From a7b0cf9ed04ecf0f1a9d3a86b2078385d6c03ac4 Mon Sep 17 00:00:00 2001 From: supriya karanth Date: Tue, 22 May 2012 09:37:00 +0200 Subject: usb: musb: SW workaround for USB host issue For snowball in HOST mode, the eye diagram is facing high distortion in high speed use cases. This patch allows the user to use an external charge pump instead of the internal one to generate the Vbus voltage. This can be done by setting a sysfs entry. The external VBUS is OFF by default and can be made ON by setting the sysfs entry inorder to enumerate high speed devices. Signed-off-by: supriya karanth --- drivers/usb/musb/ux500.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'drivers/usb/musb/ux500.c') diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c index 360131b337f..db1cb809bee 100644 --- a/drivers/usb/musb/ux500.c +++ b/drivers/usb/musb/ux500.c @@ -311,6 +311,7 @@ static void ux500_musb_set_vbus(struct musb *musb, int is_on) u8 devctl; unsigned long timeout = jiffies + msecs_to_jiffies(1000); int ret = 1; + struct musb_hdrc_platform_data *plat = musb->controller->platform_data; #ifdef CONFIG_USB_OTG_20 int val = 0; #endif @@ -323,6 +324,17 @@ static void ux500_musb_set_vbus(struct musb *musb, int is_on) val |= 0x1C; musb_writeb(musb->mregs, MUSB_MISC, val); #endif + + /* Use EXTVBUS */ + u8 busctl = musb_read_ulpi_buscontrol(musb->mregs); + if (plat->extvbus) { + busctl |= MUSB_ULPI_USE_EXTVBUS; + musb_write_ulpi_buscontrol(musb->mregs, busctl); + } else { + busctl &= ~MUSB_ULPI_USE_EXTVBUS; + musb_write_ulpi_buscontrol(musb->mregs, busctl); + } + devctl = musb_readb(musb->mregs, MUSB_DEVCTL); if (is_on) { -- cgit v1.2.3