summaryrefslogtreecommitdiff
path: root/drivers/usb/musb/ux500.c
diff options
context:
space:
mode:
authorsupriya karanth <supriya.karanth@stericsson.com>2012-05-22 09:37:00 +0200
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:25:19 +0200
commit2b85348ec0be48a89fb2689bc59d943fbee8a625 (patch)
tree0f7b9caec8ac1cf2f66087f98f791c1b43d4df01 /drivers/usb/musb/ux500.c
parent49ad144fbf2abcc415847975e79f0ef9bb5e78c6 (diff)
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 <supriya.karanth@stericsson.com>
Diffstat (limited to 'drivers/usb/musb/ux500.c')
-rw-r--r--drivers/usb/musb/ux500.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
index 2f089ddcd46..c1a205cd5e3 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) {