aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/chipidea/udc.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-24 17:57:49 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-24 17:57:49 -0400
commit1c41a9570a02cec80be5fb4f7f9cf206220d84a5 (patch)
tree21eeee43b0cb88415ea809bfab3f2b432fd5ac45 /drivers/usb/chipidea/udc.c
parentcd0e075784f4bce97b4ed47d4b354f045e895546 (diff)
parent3e457371f436e89ce9239674828f9729a36b2595 (diff)
Merge tag 'usb-for-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next
Felipe writes: usb: patches for v4.1 merge window As usual, a big pile of commits. This time a total of 111 non-merge commits. Other than the usual set of cleanups and non-critical fixes, we have some interesting work for AM335x's MUSB babble recovery. Now that takes a lot less time and we don't have to Reset MUSB all the time. The printer gadget has been converted to configfs interface and the atmel udc has learned suspend/resume with wakeup. Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/chipidea/udc.c')
-rw-r--r--drivers/usb/chipidea/udc.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 228654c94843..41914a55055d 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -86,10 +86,8 @@ static int hw_device_state(struct ci_hdrc *ci, u32 dma)
86 /* interrupt, error, port change, reset, sleep/suspend */ 86 /* interrupt, error, port change, reset, sleep/suspend */
87 hw_write(ci, OP_USBINTR, ~0, 87 hw_write(ci, OP_USBINTR, ~0,
88 USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI); 88 USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
89 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
90 } else { 89 } else {
91 hw_write(ci, OP_USBINTR, ~0, 0); 90 hw_write(ci, OP_USBINTR, ~0, 0);
92 hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
93 } 91 }
94 return 0; 92 return 0;
95} 93}
@@ -1508,7 +1506,9 @@ static int ci_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
1508 hw_device_reset(ci); 1506 hw_device_reset(ci);
1509 hw_device_state(ci, ci->ep0out->qh.dma); 1507 hw_device_state(ci, ci->ep0out->qh.dma);
1510 usb_gadget_set_state(_gadget, USB_STATE_POWERED); 1508 usb_gadget_set_state(_gadget, USB_STATE_POWERED);
1509 usb_udc_vbus_handler(_gadget, true);
1511 } else { 1510 } else {
1511 usb_udc_vbus_handler(_gadget, false);
1512 if (ci->driver) 1512 if (ci->driver)
1513 ci->driver->disconnect(&ci->gadget); 1513 ci->driver->disconnect(&ci->gadget);
1514 hw_device_state(ci, 0); 1514 hw_device_state(ci, 0);
@@ -1574,13 +1574,12 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on)
1574{ 1574{
1575 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget); 1575 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget);
1576 1576
1577 if (!ci->vbus_active) 1577 pm_runtime_get_sync(&ci->gadget.dev);
1578 return -EOPNOTSUPP;
1579
1580 if (is_on) 1578 if (is_on)
1581 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); 1579 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
1582 else 1580 else
1583 hw_write(ci, OP_USBCMD, USBCMD_RS, 0); 1581 hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
1582 pm_runtime_put_sync(&ci->gadget.dev);
1584 1583
1585 return 0; 1584 return 0;
1586} 1585}
@@ -1710,6 +1709,7 @@ static int ci_udc_start(struct usb_gadget *gadget,
1710 spin_lock_irqsave(&ci->lock, flags); 1709 spin_lock_irqsave(&ci->lock, flags);
1711 hw_device_reset(ci); 1710 hw_device_reset(ci);
1712 } else { 1711 } else {
1712 usb_udc_vbus_handler(&ci->gadget, false);
1713 pm_runtime_put_sync(&ci->gadget.dev); 1713 pm_runtime_put_sync(&ci->gadget.dev);
1714 return retval; 1714 return retval;
1715 } 1715 }