]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
usb: chipidea: Drop lock across event_notify during gadget stop
authorStephen Boyd <stephen.boyd@linaro.org>
Wed, 28 Dec 2016 22:57:08 +0000 (14:57 -0800)
committerPeter Chen <peter.chen@nxp.com>
Fri, 20 Jan 2017 07:27:43 +0000 (15:27 +0800)
The CI_HDRC_CONTROLLER_STOPPED_EVENT may want to call sleeping
APIs similar to how _gadget_stop_activity() may. Let's drop the
lock across the event so that glue drivers can make sleeping
calls.

Cc: Peter Chen <peter.chen@nxp.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
drivers/usb/chipidea/udc.c

index 732b281485deb2011678a6a0757c09d0f85bdbe6..f88e9157fad07ea8443a8c72f036133418721cdf 100644 (file)
@@ -1793,10 +1793,10 @@ static int ci_udc_stop(struct usb_gadget *gadget)
 
        if (ci->vbus_active) {
                hw_device_state(ci, 0);
+               spin_unlock_irqrestore(&ci->lock, flags);
                if (ci->platdata->notify_event)
                        ci->platdata->notify_event(ci,
                        CI_HDRC_CONTROLLER_STOPPED_EVENT);
-               spin_unlock_irqrestore(&ci->lock, flags);
                _gadget_stop_activity(&ci->gadget);
                spin_lock_irqsave(&ci->lock, flags);
                pm_runtime_put(&ci->gadget.dev);