aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb
diff options
context:
space:
mode:
authorGeorge Cherian <george.cherian@ti.com>2014-11-14 03:24:46 -0500
committerFelipe Balbi <balbi@ti.com>2014-11-18 10:55:31 -0500
commitf905bc68833b37b2274dc269fd35edb19e67aed7 (patch)
treecd18f9829ac8dc22fa94962d498ee863a04e89f7 /drivers/usb/musb
parent1eec34e9f25664cf71e05321329d128e0565beae (diff)
usb: musb: core: Disable the Interrupts till BABBLE is fully handled
Disable the MUSB interrupts till MUSB is recovered fully from BABBLE condition. There are chances that we could get multiple interrupts till the time the babble recover work gets scheduled. Sometimes this could even end up in an endless loop making MUSB itself unusable. Reported-by: Felipe Balbi <balbi@ti.com> Signed-off-by: George Cherian <george.cherian@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/musb')
-rw-r--r--drivers/usb/musb/musb_core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index f1dfe53515fb..5257928425ce 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -423,6 +423,7 @@ void musb_hnp_stop(struct musb *musb)
423 musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16); 423 musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16);
424} 424}
425 425
426static void musb_generic_disable(struct musb *musb);
426/* 427/*
427 * Interrupt Service Routine to record USB "global" interrupts. 428 * Interrupt Service Routine to record USB "global" interrupts.
428 * Since these do not happen often and signify things of 429 * Since these do not happen often and signify things of
@@ -846,9 +847,11 @@ b_host:
846 } 847 }
847 848
848 /* handle babble condition */ 849 /* handle babble condition */
849 if (int_usb & MUSB_INTR_BABBLE && is_host_active(musb)) 850 if (int_usb & MUSB_INTR_BABBLE && is_host_active(musb)) {
851 musb_generic_disable(musb);
850 schedule_delayed_work(&musb->recover_work, 852 schedule_delayed_work(&musb->recover_work,
851 msecs_to_jiffies(100)); 853 msecs_to_jiffies(100));
854 }
852 855
853#if 0 856#if 0
854/* REVISIT ... this would be for multiplexing periodic endpoints, or 857/* REVISIT ... this would be for multiplexing periodic endpoints, or