On Mon, Nov 28, 2016 at 05:26:21PM +0100, Alexandre Bailon wrote: > On da8xx, VBUS is not maintained during suspend when musb is in host mode. > On resume, all the connected devices will be disconnected and then will > be enumerated again. > This happens because MUSB_DEVCTL is cleared during suspend. > MUSB_DEVCTL is clear twice: once by da8xx_musb_disable() > and once musb_generic_disable(). > > Don't clear MUSB_DEVCTL in da8xx_musb_disable() and use the quirk > MUSB_PRESERVE_DEVCTL to preseve MUSB_DEVCTL during suspend. > > Signed-off-by: Alexandre Bailon <abailon@xxxxxxxxxxxx> > --- > drivers/usb/musb/da8xx.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index 905f0d9..90f0c06 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -125,7 +125,6 @@ static void da8xx_musb_disable(struct musb *musb) > musb_writel(reg_base, DA8XX_USB_INTR_MASK_CLEAR_REG, > DA8XX_INTR_USB_MASK | > DA8XX_INTR_TX_MASK | DA8XX_INTR_RX_MASK); > - musb_writeb(musb->mregs, MUSB_DEVCTL, 0); > musb_writel(reg_base, DA8XX_USB_END_OF_INTR_REG, 0); > } This would be in a separate patch. I have cleaned it up as in [1]. > > @@ -458,7 +457,8 @@ static inline u8 get_vbus_power(struct device *dev) > } > > static const struct musb_platform_ops da8xx_ops = { > - .quirks = MUSB_DMA_CPPI | MUSB_INDEXED_EP, > + .quirks = MUSB_DMA_CPPI | MUSB_INDEXED_EP | > + MUSB_PRESERVE_DEVCTL, MUSB_PRESERVE_SESSION would be a better name. > .init = da8xx_musb_init, > .exit = da8xx_musb_exit, > [1] http://www.spinics.net/lists/linux-usb/msg150857.html Regards, -Bin. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html