Skip to contentSkip to conversation

mxc_udc: add workaround for ENGcm09152 for i.MX35

PATCH New Eric Bénard 1 participant 2 messages Jul 16, 2010 – Jul 22, 2010

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mxc_udc: add workaround for ENGcm09152 for i.MX35

this patch gives the possibility to workaround bug ENGcm09152 on i.MX35 when the hardware workaround is also implemented on the board.

---
 arch/arm/mach-mx3/mach-cpuimx35.c |    1 +
 drivers/usb/gadget/fsl_mxc_udc.c  |   12 ++++++++++++
 include/linux/fsl_devices.h       |    3 +++
 3 files changed, 16 insertions(+), 0 deletions(-)
arch/arm/mach-mx3/mach-cpuimx35.c +1 -0
index 56e5bf0..9d578de 100644
@@ -154,6 +154,7 @@ static struct mxc_usbh_platform_data usbh1_pdata = {
 static struct fsl_usb2_platform_data otg_device_pdata = {
 	.operating_mode	= FSL_USB2_DR_DEVICE,
 	.phy_mode	= FSL_USB2_PHY_UTMI,
+	.workaround	= FLS_USB2_WORKAROUND_ENGCM09152,
 };
 
 static int otg_mode_host;
drivers/usb/gadget/fsl_mxc_udc.c +12 -0
index eafa6d2..1a31cf9 100644
@@ -22,6 +22,10 @@
 static struct clk *mxc_ahb_clk;
 static struct clk *mxc_usb_clk;
 
+/* workaround ENGcm09152 for i.MX35 */
+#define USBPHYCTRL_OTGBASE_OFFSET	0x608
+#define USBPHYCTRL_EVDO			(1 << 23)
+
 int fsl_udc_clk_init(struct platform_device *pdev)
 {
 	struct fsl_usb2_platform_data *pdata;
@@ -84,6 +88,7 @@ eenahb:
 void fsl_udc_clk_finalize(struct platform_device *pdev)
 {
 	struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
+	unsigned int v;
 
 	/* ULPI transceivers don't need usbpll */
 	if (pdata->phy_mode == FSL_USB2_PHY_ULPI) {
@@ -91,6 +96,13 @@ void fsl_udc_clk_finalize(struct platform_device *pdev)
 		clk_put(mxc_usb_clk);
 		mxc_usb_clk = NULL;
 	}
+	/* workaround ENGcm09152 for i.MX35 */
+	if (pdata->workaround & FLS_USB2_WORKAROUND_ENGCM09152) {
+		v = readl(MX35_IO_ADDRESS(MX35_OTG_BASE_ADDR +
+				USBPHYCTRL_OTGBASE_OFFSET));
+		writel(v | USBPHYCTRL_EVDO, MX35_IO_ADDRESS(MX35_OTG_BASE_ADDR +
+				USBPHYCTRL_OTGBASE_OFFSET));
+	}
 }
 
 void fsl_udc_clk_release(void)
include/linux/fsl_devices.h +3 -0
index 28e33fe..01a23fa 100644
@@ -63,12 +63,15 @@ struct fsl_usb2_platform_data {
 	enum fsl_usb2_operating_modes	operating_mode;
 	enum fsl_usb2_phy_modes		phy_mode;
 	unsigned int			port_enables;
+	unsigned int			workaround;
 };
 
 /* Flags in fsl_usb2_mph_platform_data */
 #define FSL_USB2_PORT0_ENABLED	0x00000001
 #define FSL_USB2_PORT1_ENABLED	0x00000002
 
+#define FLS_USB2_WORKAROUND_ENGCM09152	(1 << 0)
+
 struct spi_device;
 
 struct fsl_spi_platform_data {
Signature · 1 line
1.6.3.3
#1 lore raw

PATCH 1/1 mxc_udc: add workaround for ENGcm09152 for i.MX35

Hi Sascha,

Le 16/07/2010 18:30, Eric B?nard a ?crit :

Quoted 4 lines

this patch gives the possibility to workaround bug ENGcm09152 on i.MX35 when the hardware workaround is also implemented on the board.

any comment concerning this patch ?

Thanks
Eric