linux/drivers/usb/gadget
Robert Jarzmik 367815eea4 USB: pxa27x_udc: single-thread setup requests
Since the PXA 27x UDC automatically ACK's some control
packets such as SET_INTERFACE, the gadgets may not get a
chance to process the request before another control packet
is received. The Linux gadgets do not expect to receive
setup callbacks out of order. The file storage gadget only
saves the "highest" priority request.

The PXA27x UDC driver must make sure it only sends one up at
a time, allowing the gadget to make changes before
continuing. In theory, the host would be NACK'd while the
gadget processes the change but the UDC has already ACK'd
the request. If another request is sent by the host that is
not automatically ACK'd by the UDC, then the throttling
happens properly to regain sync.

The observed case was the file_storage gadget timing out on
a BulkReset request because the SET_INTERFACE was being
processed by the gadget. Since SET_INTERFACE is higher
priority than BulkReset, the BulkReset was dropped.  This
was exacerbated by turning on the debug which delayed the
fsg signal processing thread.

This also fixes the "should never get in
WAIT_ACK_SET_CONF_INTERF state here!!!" warning.

Reported-by: Vernon Sauder <vernoninhand@gmail.com>
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

index 51790b0..1937d8c 100644
2009-06-15 21:44:42 -07:00
..
amd5536udc.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
amd5536udc.h
at91_udc.c USB: at91_udc: use helper functions to determine endpoint type and direction 2009-06-15 21:44:42 -07:00
at91_udc.h Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
atmel_usba_udc.c USB: atmel_usba_udc: use helper functions to determine endpoint type and direction 2009-06-15 21:44:41 -07:00
atmel_usba_udc.h
cdc2.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
ci13xxx_udc.c USB: ci13xxx_udc: use helper functions to determine endpoint type and direction 2009-06-15 21:44:41 -07:00
ci13xxx_udc.h USB: gadget: MIPS ci13xxx_udc 2009-01-07 09:59:58 -08:00
composite.c USB: gadget: composite device-level suspend/resume hooks 2009-03-24 16:20:45 -07:00
config.c usb/gadget: fix kernel-doc warning 2008-10-22 10:05:28 -07:00
dummy_hcd.c USB: make transfer_buffer_lengths in struct urb field u32 2009-03-24 16:20:36 -07:00
epautoconf.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
ether.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_acm.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_ecm.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_loopback.c USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00
f_obex.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_phonet.c usb: gadget: f_phonet: fix memory allocation sizes 2009-06-02 00:17:46 -07:00
f_rndis.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_serial.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_sourcesink.c USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00
f_subset.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
file_storage.c USB: g_file_storage: fix use-after-free bug when closing files 2009-04-23 14:15:28 -07:00
fsl_qe_udc.c USB: fsl_qe_udc: Fix stalled TX requests bug 2009-02-09 11:19:47 -08:00
fsl_qe_udc.h usb/fsl_qe_udc: fix response to get status request 2008-10-17 14:41:08 -07:00
fsl_usb2_udc.c USB: add missing KERN_* constants to printks 2009-03-24 16:20:30 -07:00
fsl_usb2_udc.h fsl_usb2_udc: Fix some sparse warnings and remove redundant code. 2008-10-17 14:41:05 -07:00
g_zero.h USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00
gadget_chips.h USB: add imx udc gadget driver 2009-01-07 10:00:11 -08:00
gmidi.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2009-03-26 11:17:39 -07:00
goku_udc.c USB: Goku-S: use helper functions to determine endpoint type and direction 2009-06-15 21:44:42 -07:00
goku_udc.h Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
imx_udc.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2009-03-26 11:17:39 -07:00
imx_udc.h USB: imx_udc: Fix IMX UDC gadget general irq handling 2009-03-24 16:20:29 -07:00
inode.c USB: gadgetfs: use helper functions to determine endpoint type and direction 2009-06-15 21:44:42 -07:00
Kconfig USB: pxa27x_udc: compatibility with pxa320 SoC 2009-06-15 21:44:42 -07:00
lh7a40x_udc.c USB: add missing KERN_* constants to printks 2009-03-24 16:20:30 -07:00
lh7a40x_udc.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
m66592-udc.c USB: m66592 and r8a66597 resource changes 2009-01-07 09:59:53 -08:00
m66592-udc.h sh: sh_mobile usbf clock framework support 2008-12-22 18:42:51 +09:00
Makefile USB: add imx udc gadget driver 2009-01-07 10:00:11 -08:00
ndis.h usb gadget: RNDIS cleanups 2008-07-21 15:16:10 -07:00
net2280.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
net2280.h USB: gadget: net2280: implement set_wedge 2008-10-17 14:40:52 -07:00
omap_udc.c USB: gadget: omap_udc uses platform_driver_probe() 2009-04-23 14:15:29 -07:00
omap_udc.h Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
printer.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
pxa25x_udc.c [ARM] 5403/1: pxa25x_ep_fifo_flush() *ep->reg_udccs always set to 0 2009-02-19 11:04:46 +00:00
pxa25x_udc.h [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
pxa27x_udc.c USB: pxa27x_udc: single-thread setup requests 2009-06-15 21:44:42 -07:00
pxa27x_udc.h USB: pxa27x_udc: single-thread setup requests 2009-06-15 21:44:42 -07:00
rndis.c usbnet: convert rndis driver to use dev_get_stats 2009-03-21 19:55:34 -07:00
rndis.h usb gadget: RNDIS cleanups 2008-07-21 15:16:10 -07:00
s3c2410_udc.c USB: gadget: s3c2410_udc uses standard GPIO calls 2009-01-07 10:00:02 -08:00
s3c2410_udc.h
serial.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
u_ether.c net: use symbolic values for ndo_start_xmit() return codes 2009-06-13 01:18:50 -07:00
u_ether.h usb ethernet gadget: split RNDIS function 2008-07-21 15:16:15 -07:00
u_phonet.h Phonet: USB CDC Phonet function for gadget framework 2008-12-17 15:49:09 -08:00
u_serial.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
u_serial.h usb gadget: cdc obex glue 2008-10-17 14:40:53 -07:00
usbstring.c USB: Gadget: fix UTF conversion in the usbstring library 2009-05-08 19:34:56 -07:00
zero.c USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00