mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 11:16:11 +00:00
USB: musb: gadget_ep0: avoid SetupEnd interrupt
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> Cc: stable <stable@kernel.org> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
93aa3dab00
commit
17be5c5f5e
1 changed files with 10 additions and 4 deletions
|
@ -664,7 +664,7 @@ irqreturn_t musb_g_ep0_irq(struct musb *musb)
|
||||||
musb->ep0_state = MUSB_EP0_STAGE_STATUSIN;
|
musb->ep0_state = MUSB_EP0_STAGE_STATUSIN;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ERR("SetupEnd came in a wrong ep0stage %s",
|
ERR("SetupEnd came in a wrong ep0stage %s\n",
|
||||||
decode_ep0stage(musb->ep0_state));
|
decode_ep0stage(musb->ep0_state));
|
||||||
}
|
}
|
||||||
csr = musb_readw(regs, MUSB_CSR0);
|
csr = musb_readw(regs, MUSB_CSR0);
|
||||||
|
@ -787,12 +787,18 @@ setup:
|
||||||
handled = service_zero_data_request(
|
handled = service_zero_data_request(
|
||||||
musb, &setup);
|
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 */
|
/* status stage might be immediate */
|
||||||
if (handled > 0) {
|
if (handled > 0)
|
||||||
musb->ackpend |= MUSB_CSR0_P_DATAEND;
|
|
||||||
musb->ep0_state =
|
musb->ep0_state =
|
||||||
MUSB_EP0_STAGE_STATUSIN;
|
MUSB_EP0_STAGE_STATUSIN;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* sequence #1 (IN to host), includes GET_STATUS
|
/* sequence #1 (IN to host), includes GET_STATUS
|
||||||
|
|
Loading…
Reference in a new issue