summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/atmel_usba_udc.c14
-rw-r--r--drivers/usb/musb-new/ti-musb.c1
2 files changed, 7 insertions, 8 deletions
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index f9326f0a7e7..72f68dba3a7 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -521,16 +521,16 @@ usba_udc_set_selfpowered(struct usb_gadget *gadget, int is_selfpowered)
static int usba_udc_pullup(struct usb_gadget *gadget, int is_on)
{
struct usba_udc *udc = to_usba_udc(gadget);
- u32 ctrl;
-
- ctrl = usba_readl(udc, CTRL);
+ /*
+ * Some chips don't reliably drive DP/DM lines to high impedance when
+ * using the DETACH/PULLD_DIS bits.
+ * To ensure a reliable disconnect, power cycle the controller instead
+ */
if (is_on)
- ctrl &= ~USBA_DETACH;
+ usba_writel(udc, CTRL, USBA_ENABLE_MASK);
else
- ctrl |= USBA_DETACH;
-
- usba_writel(udc, CTRL, ctrl);
+ usba_writel(udc, CTRL, USBA_DISABLE_MASK);
return 0;
}
diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c
index ec1baa9337d..967d0953875 100644
--- a/drivers/usb/musb-new/ti-musb.c
+++ b/drivers/usb/musb-new/ti-musb.c
@@ -282,7 +282,6 @@ U_BOOT_DRIVER(ti_musb_peripheral) = {
.ops = &ti_musb_gadget_ops,
.probe = ti_musb_peripheral_probe,
.remove = ti_musb_peripheral_remove,
- .ops = &musb_usb_ops,
.plat_auto = sizeof(struct ti_musb_plat),
.priv_auto = sizeof(struct ti_musb_peripheral),
.flags = DM_FLAG_PRE_RELOC,