mirror of
https://github.com/LineageOS/android_kernel_samsung_msm8226.git
synced 2026-09-28 00:00:22 +02:00
USB: ci13xxx_udc: Fix runtime PM sleeping bug
Call pm_runtime_get_sync() and pm_runtime_put_sync() functions outside spin lock to fix "sleeping function called from invalid context" bug. Change-Id: Ib96797743f40d6f8e33a0c954f096a4afdd86fe3 Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
This commit is contained in:
@@ -2862,6 +2862,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
||||
udc->softconnect = 1;
|
||||
|
||||
spin_unlock_irqrestore(udc->lock, flags);
|
||||
pm_runtime_get_sync(&udc->gadget.dev);
|
||||
retval = bind(&udc->gadget); /* MAY SLEEP */
|
||||
spin_lock_irqsave(udc->lock, flags);
|
||||
|
||||
@@ -2871,13 +2872,11 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
||||
}
|
||||
|
||||
udc->driver = driver;
|
||||
pm_runtime_get_sync(&udc->gadget.dev);
|
||||
if (udc->udc_driver->flags & CI13XXX_PULLUP_ON_VBUS) {
|
||||
if (udc->vbus_active) {
|
||||
if (udc->udc_driver->flags & CI13XXX_REGS_SHARED)
|
||||
hw_device_reset(udc);
|
||||
} else {
|
||||
pm_runtime_put_sync(&udc->gadget.dev);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
@@ -2886,11 +2885,11 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
||||
goto done;
|
||||
|
||||
retval = hw_device_state(udc->ep0out.qh.dma);
|
||||
if (retval)
|
||||
pm_runtime_put_sync(&udc->gadget.dev);
|
||||
|
||||
done:
|
||||
spin_unlock_irqrestore(udc->lock, flags);
|
||||
if (retval)
|
||||
pm_runtime_put_sync(&udc->gadget.dev);
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL(usb_gadget_probe_driver);
|
||||
|
||||
Reference in New Issue
Block a user