diff options
Diffstat (limited to 'drivers/usb/imx/imx-usb-misc.c')
-rw-r--r-- | drivers/usb/imx/imx-usb-misc.c | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/drivers/usb/imx/imx-usb-misc.c b/drivers/usb/imx/imx-usb-misc.c index 901ced485d..51d549c2c5 100644 --- a/drivers/usb/imx/imx-usb-misc.c +++ b/drivers/usb/imx/imx-usb-misc.c @@ -347,6 +347,9 @@ static __maybe_unused struct imx_usb_misc_data mx5_data = { .init = mx5_initialize_usb_hw, }; +#define MX6_USB_CTRL(n) ((n) * 4) +#define MX6_USB_CTRL_OVER_CUR_DIS (1 << 7) + static void mx6_hsic_pullup(unsigned long reg, int on) { u32 val; @@ -364,10 +367,15 @@ static void mx6_hsic_pullup(unsigned long reg, int on) static __maybe_unused int mx6_initialize_usb_hw(void __iomem *base, int port, unsigned int flags) { + u32 val; + switch (port) { case 0: - break; case 1: + val = readl(base + MX6_USB_CTRL(port)); + if (flags & MXC_EHCI_DISABLE_OVERCURRENT) + val |= MX6_USB_CTRL_OVER_CUR_DIS; + writel(val, base + MX6_USB_CTRL(port)); break; case 2: /* HSIC port */ mx6_hsic_pullup(0x388, 0); @@ -463,6 +471,54 @@ static struct platform_device_id imx_usbmisc_ids[] = { }, }; +static __maybe_unused struct of_device_id imx_usbmisc_dt_ids[] = { +#ifdef CONFIG_ARCH_IMX25 + { + .compatible = "fsl,imx25-usbmisc", + .data = (unsigned long)&mx25_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX27 + { + .compatible = "fsl,imx27-usbmisc", + .data = (unsigned long)&mx27_mx31_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX31 + { + .compatible = "fsl,imx31-usbmisc", + .data = (unsigned long)&mx27_mx31_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX35 + { + .compatible = "fsl,imx35-usbmisc", + .data = (unsigned long)&mx35_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX51 + { + .compatible = "fsl,imx51-usbmisc", + .data = (unsigned long)&mx5_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX53 + { + .compatible = "fsl,imx53-usbmisc", + .data = (unsigned long)&mx5_data, + }, +#endif +#ifdef CONFIG_ARCH_IMX6 + { + .compatible = "fsl,imx6q-usbmisc", + .data = (unsigned long)&mx6_data, + }, +#endif + { + /* sentinel */ + }, +}; + static struct imx_usb_misc_data *imxusbmisc_data; static void __iomem *usbmisc_base; @@ -510,6 +566,7 @@ static struct driver_d imx_usbmisc_driver = { .name = "imx-usbmisc", .probe = imx_usbmisc_probe, .id_table = imx_usbmisc_ids, + .of_compatible = DRV_OF_COMPAT(imx_usbmisc_dt_ids), }; static int imx_usbmisc_init(void) |