]> git.baikalelectronics.ru Git - kernel.git/commit
usb: chipidea: udc: using the correct stall implementation
authorPeter Chen <peter.chen@freescale.com>
Mon, 24 Aug 2015 06:10:07 +0000 (14:10 +0800)
committerPeter Chen <peter.chen@freescale.com>
Tue, 15 Sep 2015 08:08:28 +0000 (16:08 +0800)
commitdc44a4eebee5023e443b886921a9a7ea42aeeb03
tree22a8c962b0d623bdb27800d4eb3badab68baf003
parent935a478e4144e0a4f690471a4a1d8ad5718a721b
usb: chipidea: udc: using the correct stall implementation

According to spec, there are functional and protocol stalls.

For functional stall, it is for bulk and interrupt endpoints,
below are cases for it:
- Host sends SET_FEATURE request for Set-Halt, the udc driver
needs to set stall, and return true unconditionally.
- The gadget driver may call usb_ep_set_halt to stall certain
endpoints, if there is a transfer in pending, the udc driver
should not set stall, and return -EAGAIN accordingly.
These two kinds of stall need to be cleared by host using CLEAR_FEATURE
request (Clear-Halt).

For protocol stall, it is for control endpoint, this stall will
be set if the control request has failed. This stall will be
cleared by next setup request (hardware will do it).

It fixed usbtest (drivers/usb/misc/usbtest.c) Test 13 "set/clear halt"
test failure, meanwhile, this change has been verified by
USB2 CV Compliance Test and MSC Tests.

Cc: <stable@vger.kernel.org> #3.10+
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Felipe Balbi <balbi@ti.com>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
drivers/usb/chipidea/udc.c