diff options
author | Peter Chen <peter.chen@freescale.com> | 2015-03-05 21:36:04 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2015-03-19 12:26:19 -0400 |
commit | 467a78c82ad5f9a3e3c80eb4ba17de6bb70e4f9b (patch) | |
tree | 29556ca81b7ef1dcde28e5c311f0a4aed3eade0c /drivers/usb/chipidea | |
parent | 628ef0d273a69d889669a459fb4675c678ae0418 (diff) |
usb: chipidea: udc: apply new usb_udc_vbus_handler interface
It can move all pullup/pulldown operation control to udc-core
through usb_gadget_connect/usb_gadget_disconnect according to
vbus status.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/chipidea')
-rw-r--r-- | drivers/usb/chipidea/udc.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index ff451048c1ac..55a36e046a1e 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 | } |
@@ -1474,7 +1472,9 @@ static int ci_udc_vbus_session(struct usb_gadget *_gadget, int is_active) | |||
1474 | hw_device_reset(ci); | 1472 | hw_device_reset(ci); |
1475 | hw_device_state(ci, ci->ep0out->qh.dma); | 1473 | hw_device_state(ci, ci->ep0out->qh.dma); |
1476 | usb_gadget_set_state(_gadget, USB_STATE_POWERED); | 1474 | usb_gadget_set_state(_gadget, USB_STATE_POWERED); |
1475 | usb_udc_vbus_handler(_gadget, true); | ||
1477 | } else { | 1476 | } else { |
1477 | usb_udc_vbus_handler(_gadget, false); | ||
1478 | if (ci->driver) | 1478 | if (ci->driver) |
1479 | ci->driver->disconnect(&ci->gadget); | 1479 | ci->driver->disconnect(&ci->gadget); |
1480 | hw_device_state(ci, 0); | 1480 | hw_device_state(ci, 0); |
@@ -1540,13 +1540,12 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on) | |||
1540 | { | 1540 | { |
1541 | struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget); | 1541 | struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget); |
1542 | 1542 | ||
1543 | if (!ci->vbus_active) | 1543 | pm_runtime_get_sync(&ci->gadget.dev); |
1544 | return -EOPNOTSUPP; | ||
1545 | |||
1546 | if (is_on) | 1544 | if (is_on) |
1547 | hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); | 1545 | hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); |
1548 | else | 1546 | else |
1549 | hw_write(ci, OP_USBCMD, USBCMD_RS, 0); | 1547 | hw_write(ci, OP_USBCMD, USBCMD_RS, 0); |
1548 | pm_runtime_put_sync(&ci->gadget.dev); | ||
1550 | 1549 | ||
1551 | return 0; | 1550 | return 0; |
1552 | } | 1551 | } |
@@ -1676,6 +1675,7 @@ static int ci_udc_start(struct usb_gadget *gadget, | |||
1676 | spin_lock_irqsave(&ci->lock, flags); | 1675 | spin_lock_irqsave(&ci->lock, flags); |
1677 | hw_device_reset(ci); | 1676 | hw_device_reset(ci); |
1678 | } else { | 1677 | } else { |
1678 | usb_udc_vbus_handler(&ci->gadget, false); | ||
1679 | pm_runtime_put_sync(&ci->gadget.dev); | 1679 | pm_runtime_put_sync(&ci->gadget.dev); |
1680 | return retval; | 1680 | return retval; |
1681 | } | 1681 | } |