OSDN Git Service

usb: dwc2: Reset DEVADDR after exiting gadget hibernation.
authorArtur Petrosyan <Arthur.Petrosyan@synopsys.com>
Fri, 16 Apr 2021 12:46:58 +0000 (16:46 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Apr 2021 09:55:33 +0000 (11:55 +0200)
Initially resetting device address was done in dwc2_hsotg_irq()
interrupt handler. However, when core is hibernated USB RESET
is not handled in dwc2_hsotg_irq() handler, instead USB RESET
interrupt is handled in dwc2_handle_gpwrdn_intr() handler.

- Added reset device address to zero when core exits from gadget
  hibernation.

Acked-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Signed-off-by: Artur Petrosyan <Arthur.Petrosyan@synopsys.com>
Signed-off-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Link: https://lore.kernel.org/r/20210416124659.652CFA005C@mailhost.synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc2/gadget.c

index 2f50f3e..e6bb1bd 100644 (file)
@@ -5305,6 +5305,10 @@ int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg,
        dwc2_writel(hsotg, dr->dcfg, DCFG);
        dwc2_writel(hsotg, dr->dctl, DCTL);
 
+       /* On USB Reset, reset device address to zero */
+       if (reset)
+               dwc2_clear_bit(hsotg, DCFG, DCFG_DEVADDR_MASK);
+
        /* De-assert Wakeup Logic */
        gpwrdn = dwc2_readl(hsotg, GPWRDN);
        gpwrdn &= ~GPWRDN_PMUACTV;