Hi, On Mon, Dec 18, 2017 at 12:41:16PM +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 4.9-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From bd3486ded7a0c313a6575343e6c2b21d14476645 Mon Sep 17 00:00:00 2001 > From: Bin Liu <b-liu@xxxxxx> > Date: Tue, 5 Dec 2017 08:45:30 -0600 > Subject: [PATCH] usb: musb: da8xx: fix babble condition handling > > When babble condition happens, the musb controller might automatically > turns off VBUS. On DA8xx platform, the controller generates drvvbus > interrupt for turning off VBUS along with the babble interrupt. > > In this case, we should handle the babble interrupt first and recover > from the babble condition. > > This change ignores the drvvbus interrupt if babble interrupt is also > generated at the same time, so the babble recovery routine works > properly. > > Cc: stable@xxxxxxxxxxxxxxx # v3.16+ > Signed-off-by: Bin Liu <b-liu@xxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index 0397606a211b..6c036de63272 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -284,7 +284,15 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; > portstate(musb->port1_status |= USB_PORT_STAT_POWER); > del_timer(&musb->dev_timer); This line causes the conflict. I have sent the new patch for the stable trees. Regards, -Bin. > - } else { > + } else if (!(musb->int_usb & MUSB_INTR_BABBLE)) { > + /* > + * When babble condition happens, drvvbus interrupt > + * is also generated. Ignore this drvvbus interrupt > + * and let babble interrupt handler recovers the > + * controller; otherwise, the host-mode flag is lost > + * due to the MUSB_DEV_MODE() call below and babble > + * recovery logic will not be called. > + */ > musb->is_active = 0; > MUSB_DEV_MODE(musb); > otg->default_a = 0; >