From: Greg Kroah-Hartman Date: Mon, 18 Dec 2017 15:17:33 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v3.18.89~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4469b67326be4ad8a8049b845e221b2e9dfef66b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: usb-musb-da8xx-fix-babble-condition-handling.patch --- diff --git a/queue-4.14/series b/queue-4.14/series index 469ddb82c9d..8d308985390 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -175,3 +175,4 @@ lightnvm-pblk-protect-line-bitmap-while-submitting-meta-io.patch ath9k-fix-tx99-potential-info-leak.patch ath10k-fix-core-pci-suspend-when-wowlan-is-supported-but-disabled.patch ath10k-fix-build-errors-with-config_pm.patch +usb-musb-da8xx-fix-babble-condition-handling.patch diff --git a/queue-4.14/usb-musb-da8xx-fix-babble-condition-handling.patch b/queue-4.14/usb-musb-da8xx-fix-babble-condition-handling.patch new file mode 100644 index 00000000000..346f85eb085 --- /dev/null +++ b/queue-4.14/usb-musb-da8xx-fix-babble-condition-handling.patch @@ -0,0 +1,46 @@ +From bd3486ded7a0c313a6575343e6c2b21d14476645 Mon Sep 17 00:00:00 2001 +From: Bin Liu +Date: Tue, 5 Dec 2017 08:45:30 -0600 +Subject: usb: musb: da8xx: fix babble condition handling + +From: Bin Liu + +commit bd3486ded7a0c313a6575343e6c2b21d14476645 upstream. + +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. + +Signed-off-by: Bin Liu +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/musb/da8xx.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/drivers/usb/musb/da8xx.c ++++ b/drivers/usb/musb/da8xx.c +@@ -305,7 +305,15 @@ static irqreturn_t da8xx_musb_interrupt( + musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; + portstate(musb->port1_status |= USB_PORT_STAT_POWER); + del_timer(&otg_workaround); +- } 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 called. ++ */ + musb->is_active = 0; + MUSB_DEV_MODE(musb); + otg->default_a = 0;