Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f9e223f authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dwc3: gadget: Take copy of dwc->gadget_driver before releasing lock"

parents 2094211f 7a8f3814
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -3017,43 +3017,55 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,

static void dwc3_disconnect_gadget(struct dwc3 *dwc)
{
	struct usb_gadget_driver *gadget_driver;

	if (dwc->gadget_driver && dwc->gadget_driver->disconnect) {
		gadget_driver = dwc->gadget_driver;
		spin_unlock(&dwc->lock);
		dbg_event(0xFF, "DISCONNECT", 0);
		dwc->gadget_driver->disconnect(&dwc->gadget);
		gadget_driver->disconnect(&dwc->gadget);
		spin_lock(&dwc->lock);
	}
}

static void dwc3_suspend_gadget(struct dwc3 *dwc)
{
	struct usb_gadget_driver *gadget_driver;

	if (dwc->gadget_driver && dwc->gadget_driver->suspend) {
		gadget_driver = dwc->gadget_driver;
		spin_unlock(&dwc->lock);
		dbg_event(0xFF, "SUSPEND", 0);
		dwc->gadget_driver->suspend(&dwc->gadget);
		gadget_driver->suspend(&dwc->gadget);
		spin_lock(&dwc->lock);
	}
}

static void dwc3_resume_gadget(struct dwc3 *dwc)
{
	struct usb_gadget_driver *gadget_driver;

	if (dwc->gadget_driver && dwc->gadget_driver->resume) {
		gadget_driver = dwc->gadget_driver;
		spin_unlock(&dwc->lock);
		dbg_event(0xFF, "RESUME", 0);
		dwc->gadget_driver->resume(&dwc->gadget);
		gadget_driver->resume(&dwc->gadget);
		spin_lock(&dwc->lock);
	}
}

static void dwc3_reset_gadget(struct dwc3 *dwc)
{
	struct usb_gadget_driver *gadget_driver;

	if (!dwc->gadget_driver)
		return;

	if (dwc->gadget.speed != USB_SPEED_UNKNOWN) {
		gadget_driver = dwc->gadget_driver;
		spin_unlock(&dwc->lock);
		dbg_event(0xFF, "UDC RESET", 0);
		usb_gadget_udc_reset(&dwc->gadget, dwc->gadget_driver);
		usb_gadget_udc_reset(&dwc->gadget, gadget_driver);
		spin_lock(&dwc->lock);
	}
}