Messages in this thread | | | Date | Mon, 26 May 2014 14:16:23 +0530 | From | George Cherian <> | Subject | Re: [PATCH v4 1/6] usb: musb: core: Handle Babble condition only in HOST mode |
| |
On 5/23/2014 2:12 AM, Bin Liu wrote: > Hi George, > > On Mon, May 19, 2014 at 11:32 PM, George Cherian <george.cherian@ti.com> wrote: >> Hi Bin, >> >> On 5/19/2014 9:24 PM, Bin Liu wrote: >>> Hi, >>> >>> On Mon, May 19, 2014 at 8:39 AM, George Cherian <george.cherian@ti.com> >>> wrote: >>>> BABBLE and RESET share the same interrupt. The interrupt >>>> is considered to be RESET if MUSB is in peripheral mode and >>>> as a BABBLE if MUSB is in HOST mode. >>>> >>>> Handle babble condition iff MUSB is in HOST mode. >>>> >>>> Signed-off-by: George Cherian <george.cherian@ti.com> >>>> --- >>>> drivers/usb/musb/musb_core.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c >>>> index 61da471..eff3c5c 100644 >>>> --- a/drivers/usb/musb/musb_core.c >>>> +++ b/drivers/usb/musb/musb_core.c >>>> @@ -849,7 +849,7 @@ b_host: >>>> } >>>> >>>> /* handle babble condition */ >>>> - if (int_usb & MUSB_INTR_BABBLE) >>>> + if (int_usb & MUSB_INTR_BABBLE && is_host_active(musb)) >>>> schedule_work(&musb->recover_work); >>> I guess my following comments are for Daniel's patch as while which >>> initially added the babble work. >>> >>> Should this if statement be merged into the previous 'if(int_usb & >>> MUSB_INTR_RESET)' one, which handles the same interrupt and already >>> handles host and device mode respectively. >> >> Initially I too had the babble handling as part of 'if(int_usb & >> MUSB_INTR_RESET)' >> one. But during my tests I hit a corner case where in we hit a BABBLE >> condition >> on disconnect. In such case the babble interrupt can be handled only if we >> have a seperate >> check, else its considered as a BUS RESET. >> >> When all devices are disconnected MUSB_DEVCTL_HM = 0 and the code always >> enter the >> else path. In this path it treats the BABBLE as a BUS RESET. > The code flow is a bit confusing, two if() handle the same interrupt. > The second one implied using 'handled = IRQ_HANDLED;' from the first > one. > Also does the switch() in else{} in the first if() cause any side effect? No it doesn't. > Since this babble handing is AM335x specific, how about handle it in > dsps_interrupt() in musb_dsps.c, which already has an entry for babble > interrupt? TI 3.2 kernel does this way. That the reason we have platform specific callbacks added from the main interrupt handler. > Regards, > -Bin. > >> >>> Regards, >>> -Bin. >>> >>>> #if 0 >>>> -- >>>> 1.8.3.1 >>>> >>>> -- >>>> To unsubscribe from this list: send the line "unsubscribe linux-usb" in >>>> the body of a message to majordomo@vger.kernel.org >>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> >> -- >> -George >>
-- -George
| |