mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
USB: musb: gadget_ep0: avoid SetupEnd interrupt
commit 17be5c5f5e upstream.
Gadget stalling a zero-length SETUP request results in this error message:
SetupEnd came in a wrong ep0stage idle
In order to avoid it, always set the CSR0.DataEnd bit after detecting a zero-
length request. Add the missing '\n' to the error message itself as well...
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Acked-by: Anand Gadiyar <gadiyar@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3635acd7f7
commit
b71bfa6a11
@@ -647,7 +647,7 @@ irqreturn_t musb_g_ep0_irq(struct musb *musb)
|
||||
musb->ep0_state = MUSB_EP0_STAGE_STATUSIN;
|
||||
break;
|
||||
default:
|
||||
ERR("SetupEnd came in a wrong ep0stage %s",
|
||||
ERR("SetupEnd came in a wrong ep0stage %s\n",
|
||||
decode_ep0stage(musb->ep0_state));
|
||||
}
|
||||
csr = musb_readw(regs, MUSB_CSR0);
|
||||
@@ -770,12 +770,18 @@ setup:
|
||||
handled = service_zero_data_request(
|
||||
musb, &setup);
|
||||
|
||||
/*
|
||||
* We're expecting no data in any case, so
|
||||
* always set the DATAEND bit -- doing this
|
||||
* here helps avoid SetupEnd interrupt coming
|
||||
* in the idle stage when we're stalling...
|
||||
*/
|
||||
musb->ackpend |= MUSB_CSR0_P_DATAEND;
|
||||
|
||||
/* status stage might be immediate */
|
||||
if (handled > 0) {
|
||||
musb->ackpend |= MUSB_CSR0_P_DATAEND;
|
||||
if (handled > 0)
|
||||
musb->ep0_state =
|
||||
MUSB_EP0_STAGE_STATUSIN;
|
||||
}
|
||||
break;
|
||||
|
||||
/* sequence #1 (IN to host), includes GET_STATUS
|
||||
|
||||
Reference in New Issue
Block a user