diff options
Diffstat (limited to 'drivers/usb/chipidea/udc.c')
-rw-r--r-- | drivers/usb/chipidea/udc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 6b4c2f2eb946..9333083dd111 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c | |||
@@ -1600,6 +1600,8 @@ static void destroy_eps(struct ci_hdrc *ci) | |||
1600 | for (i = 0; i < ci->hw_ep_max; i++) { | 1600 | for (i = 0; i < ci->hw_ep_max; i++) { |
1601 | struct ci_hw_ep *hwep = &ci->ci_hw_ep[i]; | 1601 | struct ci_hw_ep *hwep = &ci->ci_hw_ep[i]; |
1602 | 1602 | ||
1603 | if (hwep->pending_td) | ||
1604 | free_pending_td(hwep); | ||
1603 | dma_pool_free(ci->qh_pool, hwep->qh.ptr, hwep->qh.dma); | 1605 | dma_pool_free(ci->qh_pool, hwep->qh.ptr, hwep->qh.dma); |
1604 | } | 1606 | } |
1605 | } | 1607 | } |
@@ -1667,13 +1669,13 @@ static int ci_udc_stop(struct usb_gadget *gadget, | |||
1667 | if (ci->platdata->notify_event) | 1669 | if (ci->platdata->notify_event) |
1668 | ci->platdata->notify_event(ci, | 1670 | ci->platdata->notify_event(ci, |
1669 | CI_HDRC_CONTROLLER_STOPPED_EVENT); | 1671 | CI_HDRC_CONTROLLER_STOPPED_EVENT); |
1670 | ci->driver = NULL; | ||
1671 | spin_unlock_irqrestore(&ci->lock, flags); | 1672 | spin_unlock_irqrestore(&ci->lock, flags); |
1672 | _gadget_stop_activity(&ci->gadget); | 1673 | _gadget_stop_activity(&ci->gadget); |
1673 | spin_lock_irqsave(&ci->lock, flags); | 1674 | spin_lock_irqsave(&ci->lock, flags); |
1674 | pm_runtime_put(&ci->gadget.dev); | 1675 | pm_runtime_put(&ci->gadget.dev); |
1675 | } | 1676 | } |
1676 | 1677 | ||
1678 | ci->driver = NULL; | ||
1677 | spin_unlock_irqrestore(&ci->lock, flags); | 1679 | spin_unlock_irqrestore(&ci->lock, flags); |
1678 | 1680 | ||
1679 | return 0; | 1681 | return 0; |