diff options
Diffstat (limited to 'drivers/usb/gadget/fsl_mxc_udc.c')
-rw-r--r-- | drivers/usb/gadget/fsl_mxc_udc.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/usb/gadget/fsl_mxc_udc.c b/drivers/usb/gadget/fsl_mxc_udc.c index eafa6d2c5ed..5bdbfe61985 100644 --- a/drivers/usb/gadget/fsl_mxc_udc.c +++ b/drivers/usb/gadget/fsl_mxc_udc.c | |||
@@ -22,6 +22,10 @@ | |||
22 | static struct clk *mxc_ahb_clk; | 22 | static struct clk *mxc_ahb_clk; |
23 | static struct clk *mxc_usb_clk; | 23 | static struct clk *mxc_usb_clk; |
24 | 24 | ||
25 | /* workaround ENGcm09152 for i.MX35 */ | ||
26 | #define USBPHYCTRL_OTGBASE_OFFSET 0x608 | ||
27 | #define USBPHYCTRL_EVDO (1 << 23) | ||
28 | |||
25 | int fsl_udc_clk_init(struct platform_device *pdev) | 29 | int fsl_udc_clk_init(struct platform_device *pdev) |
26 | { | 30 | { |
27 | struct fsl_usb2_platform_data *pdata; | 31 | struct fsl_usb2_platform_data *pdata; |
@@ -84,6 +88,17 @@ eenahb: | |||
84 | void fsl_udc_clk_finalize(struct platform_device *pdev) | 88 | void fsl_udc_clk_finalize(struct platform_device *pdev) |
85 | { | 89 | { |
86 | struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; | 90 | struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; |
91 | #if defined(CONFIG_ARCH_MX35) | ||
92 | unsigned int v; | ||
93 | |||
94 | /* workaround ENGcm09152 for i.MX35 */ | ||
95 | if (pdata->workaround & FLS_USB2_WORKAROUND_ENGCM09152) { | ||
96 | v = readl(MX35_IO_ADDRESS(MX35_OTG_BASE_ADDR + | ||
97 | USBPHYCTRL_OTGBASE_OFFSET)); | ||
98 | writel(v | USBPHYCTRL_EVDO, MX35_IO_ADDRESS(MX35_OTG_BASE_ADDR + | ||
99 | USBPHYCTRL_OTGBASE_OFFSET)); | ||
100 | } | ||
101 | #endif | ||
87 | 102 | ||
88 | /* ULPI transceivers don't need usbpll */ | 103 | /* ULPI transceivers don't need usbpll */ |
89 | if (pdata->phy_mode == FSL_USB2_PHY_ULPI) { | 104 | if (pdata->phy_mode == FSL_USB2_PHY_ULPI) { |