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

Commit 3f308d17 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: dwc3: gadget: hold gadget IRQ in dwc->irq_gadget



by holding gadget's IRQ number in dwc->irq_gadget,
it'll be simpler to free_irq() and disable the IRQ
in case an IRQ fires while we are runtime suspended.

Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 51f5d49a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -730,6 +730,7 @@ struct dwc3_scratchpad_array {
 * @regs: base address for our registers
 * @regs_size: address space size
 * @fladj: frame length adjustment
 * @irq_gadget: peripheral controller's IRQ number
 * @nr_scratch: number of scratch buffers
 * @u1u2: only used on revisions <1.83a for workaround
 * @maximum_speed: maximum speed requested (mainly for testing purposes)
@@ -837,6 +838,7 @@ struct dwc3 {
	enum usb_dr_mode	dr_mode;

	u32			fladj;
	u32			irq_gadget;
	u32			nr_scratch;
	u32			u1u2;
	u32			maximum_speed;
+2 −3
Original line number Diff line number Diff line
@@ -1751,6 +1751,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
				irq, ret);
		goto err0;
	}
	dwc->irq_gadget = irq;

	spin_lock_irqsave(&dwc->lock, flags);
	if (dwc->gadget_driver) {
@@ -1787,15 +1788,13 @@ static int dwc3_gadget_stop(struct usb_gadget *g)
{
	struct dwc3		*dwc = gadget_to_dwc(g);
	unsigned long		flags;
	int			irq;

	spin_lock_irqsave(&dwc->lock, flags);
	__dwc3_gadget_stop(dwc);
	dwc->gadget_driver	= NULL;
	spin_unlock_irqrestore(&dwc->lock, flags);

	irq = platform_get_irq(to_platform_device(dwc->dev), 0);
	free_irq(irq, dwc->ev_buf);
	free_irq(dwc->irq_gadget, dwc->ev_buf);

	return 0;
}