linux-kernel-test/drivers/usb/host
Sarah Sharp 1530bbc627 xhci: Add new short TX quirk for Fresco Logic host.
Sergio reported that when he recorded audio from a USB headset mic
plugged into the USB 3.0 port on his ASUS N53SV-DH72, the audio sounded
"robotic".  When plugged into the USB 2.0 port under EHCI on the same
laptop, the audio sounded fine.  The device is:

Bus 002 Device 004: ID 046d:0a0c Logitech, Inc. Clear Chat Comfort USB Headset

The problem was tracked down to the Fresco Logic xHCI host controller
not correctly reporting short transfers on isochronous IN endpoints.
The driver would submit a 96 byte transfer, the device would only send
88 or 90 bytes, and the xHCI host would report the transfer had a
"successful" completion code, with an untransferred buffer length of 8
or 6 bytes.

The successful completion code and non-zero untransferred length is a
contradiction.  The xHCI host is supposed to only mark a transfer as
successful if all the bytes are transferred.  Otherwise, the transfer
should be marked with a short packet completion code.  Without the EHCI
bus trace, we wouldn't know whether the xHCI driver should trust the
completion code or the untransferred length.  With it, we know to trust
the untransferred length.

Add a new xHCI quirk for the Fresco Logic host controller.  If a
transfer is reported as successful, but the untransferred length is
non-zero, print a warning.  For the Fresco Logic host, change the
completion code to COMP_SHORT_TX and process the transfer like a short
transfer.

This should be backported to stable kernels that contain the commit
f5182b4155 "xhci: Disable MSI for some
Fresco Logic hosts."  That commit was marked for stable kernels as old
as 2.6.36.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Reported-by: Sergio Correia <lists@uece.net>
Tested-by: Sergio Correia <lists@uece.net>
Cc: stable@vger.kernel.org
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
2012-05-17 10:36:57 -07:00
..
whci Merge branch 'for-next/dwc3' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next 2011-12-12 15:19:53 -08:00
alchemy-common.c MIPS: Alchemy: Au1300 SoC support 2011-12-07 22:02:05 +00:00
bcma-hcd.c usb/bcma: Add missing #include <linux/slab.h> 2012-04-23 13:22:00 -07:00
ehci-atmel.c USB: ehci-atmel: add needed of.h header file 2012-04-04 18:35:43 +02:00
ehci-au1xxx.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-cns3xxx.c
ehci-dbg.c EHCI: maintain the ehci->command value properly 2012-04-23 12:05:44 -07:00
ehci-fsl.c USB: ehci-fsl: Use usb_put_transceiver instead of put_device 2012-05-14 08:49:50 -07:00
ehci-fsl.h fsl/usb: Add controller version based ULPI and UTMI phy support 2012-04-18 13:46:42 -07:00
ehci-grlib.c
ehci-hcd.c USB: EHCI: work around bug in the Philips ISP1562 controller 2012-05-14 12:50:22 -07:00
ehci-hub.c EHCI: maintain the ehci->command value properly 2012-04-23 12:05:44 -07:00
ehci-ixp4xx.c
ehci-lpm.c
ehci-ls1x.c USB: Add EHCI bus glue for Loongson1x SoCs (UPDATED) 2012-01-24 15:28:02 -08:00
ehci-mem.c
ehci-msm.c usb: otg: Convert all users to pass struct usb_otg for OTG functions 2012-02-27 15:41:52 +02:00
ehci-mv.c usb: otg: Convert all users to pass struct usb_otg for OTG functions 2012-02-27 15:41:52 +02:00
ehci-mxc.c usb: otg: Convert all users to pass struct usb_otg for OTG functions 2012-02-27 15:41:52 +02:00
ehci-octeon.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-omap.c ARM: OMAP: USB: fix warning on EHCI PHY reset path 2012-05-09 15:20:12 -07:00
ehci-orion.c ARM: Orion: Get address map from plat-orion instead of via platform_data 2011-12-13 18:46:55 -05:00
ehci-pci.c USB: EHCI: work around bug in the Philips ISP1562 controller 2012-05-14 12:50:22 -07:00
ehci-platform.c usb: Fix various typo within usb 2012-04-18 13:57:26 -07:00
ehci-pmcmsp.c
ehci-ppc-of.c
ehci-ps3.c usb: PS3 EHCI HC reset work-around 2011-12-08 09:38:53 -08:00
ehci-q.c USB: ehci-q.c: remove dbg() usage 2012-05-01 21:33:35 -07:00
ehci-s5p.c USB: ehci-s5p: add clock gating to suspend/resume 2012-04-18 13:52:36 -07:00
ehci-sched.c USB: EHCI: improve full-speed isochronous scheduling routine 2012-05-14 12:50:22 -07:00
ehci-sead3.c usb: host: mips: sead3: Fix for big endian. 2012-05-11 15:17:30 -07:00
ehci-sh.c usb: ehci-sh: Add PHY init function with platform data 2012-04-18 13:52:35 -07:00
ehci-spear.c USB: ehci: ohci: Add clk_{un}prepare() support 2012-04-18 14:33:43 -07:00
ehci-sysfs.c
ehci-tegra.c Merge 3.4-rc6 into usb-next 2012-05-07 09:03:39 -07:00
ehci-vt8500.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-w90x900.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-xilinx-of.c USB: EHCI: Don't use NO_IRQ in xilinx ehci driver 2012-01-16 08:23:15 +01:00
ehci-xls.c Merge 3.2-rc3 into usb-linus 2011-11-26 19:46:48 -08:00
ehci.h USB: EHCI: work around bug in the Philips ISP1562 controller 2012-05-14 12:50:22 -07:00
fhci-dbg.c
fhci-hcd.c usb: convert drivers/usb/* to use module_platform_driver() 2011-11-28 06:48:32 +09:00
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c QE/FHCI: fixed the CONTROL bug 2011-10-18 13:51:34 -07:00
fhci-tds.c usb: Fix various typo within usb 2012-04-18 13:57:26 -07:00
fhci.h
fsl-mph-dr-of.c fsl/usb: Add controller version based ULPI and UTMI phy support 2012-04-18 13:46:42 -07:00
hwa-hc.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb 2012-01-09 12:09:47 -08:00
imx21-dbg.c usb: Fix typo in imx21-dbg.c 2012-02-13 14:32:34 -08:00
imx21-hcd.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb 2012-01-09 12:09:47 -08:00
imx21-hcd.h
isp116x-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
isp116x.h
isp1362-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
isp1362.h
isp1760-hcd.c isp1760-hcd: fix possible memory leak if urb could not be enqueued 2012-04-18 13:51:19 -07:00
isp1760-hcd.h usb/isp1760: Allow to optionally trigger low-level chip reset via GPIOLIB. 2011-10-19 13:29:06 -07:00
isp1760-if.c isp1760-if: make module unloads correctly 2012-04-18 13:50:44 -07:00
Kconfig USB: CI13xxx: Allow use of CONFIG_USB_EHCI_ROOT_HUB_TT 2012-05-15 08:43:40 -07:00
Makefile USB: Add driver for the ssb bus 2012-04-18 13:43:30 -07:00
octeon2-common.c
ohci-at91.c USB: ohci-at91: add a reset function to fix race condition 2012-05-09 15:22:27 -07:00
ohci-au1xxx.c usb: [MIPS] fix unresolved err() reference in host/ohci-au1xxx.c 2012-05-01 18:36:09 -04:00
ohci-cns3xxx.c USB: ohci-cns3xxx.c: remove err() usage 2012-04-27 11:24:40 -07:00
ohci-da8xx.c ohci-da8xx: set MODULE_ALIAS to allow autoloading 2012-05-08 09:26:10 -07:00
ohci-dbg.c USB: ohci-dbg.c: remove dbg() usage 2012-05-01 21:33:37 -07:00
ohci-ep93xx.c USB: ohci-ep93xx.c: remove dbg() usage 2012-05-01 21:33:38 -07:00
ohci-exynos.c USB: ohci-exynos.c: remove err() usage 2012-04-27 11:24:41 -07:00
ohci-hcd.c USB: OHCI: remove old SSB OHCI driver 2012-04-18 13:43:30 -07:00
ohci-hub.c OHCI: remove uses of hcd->state 2011-11-18 10:51:00 -08:00
ohci-jz4740.c
ohci-mem.c
ohci-nxp.c USB: ohci-nxp: Use isp1301 driver 2012-05-01 13:36:18 -04:00
ohci-octeon.c USB: irq: Remove IRQF_DISABLED 2011-09-18 01:39:36 -07:00
ohci-omap3.c ARM: OMAP: USBHOST: Replace usbhs core driver APIs by Runtime pm APIs 2011-12-16 04:29:57 -07:00
ohci-omap.c USB: ohci-omap: Use usb_put_transceiver instead of put_device 2012-05-14 08:49:50 -07:00
ohci-pci.c usb: add support for STA2X11 host driver 2012-01-24 14:15:37 -08:00
ohci-platform.c usb: Fix various typo within usb 2012-04-18 13:57:26 -07:00
ohci-pnx8550.c usb: [MIPS] fix unresolved err() reference in host/ohci-pnx8550.c 2012-05-01 18:36:09 -04:00
ohci-ppc-of.c USB: ohci-ppc-of.c: remove err() usage 2012-04-27 11:24:42 -07:00
ohci-ppc-soc.c USB: ohci-ppc-soc.c: remove err() usage 2012-04-27 11:24:42 -07:00
ohci-ps3.c USB: ohci-ps3.c: remove err() usage 2012-04-27 11:24:43 -07:00
ohci-pxa27x.c usb: [ARM] fix unresolved err() reference in host/ohci-pxa27x.c 2012-05-01 18:36:09 -04:00
ohci-q.c OHCI: remove uses of hcd->state 2011-11-18 10:51:00 -08:00
ohci-s3c2410.c USB: ohci-s3c2410.c: remove err() usage 2012-04-27 11:24:43 -07:00
ohci-sa1111.c USB: ohci-sa1111.c: remove dbg() usage 2012-05-01 21:33:39 -07:00
ohci-sh.c USB: ohci-sh.c: remove err() usage 2012-04-27 11:24:44 -07:00
ohci-sm501.c OHCI: remove uses of hcd->state 2011-11-18 10:51:00 -08:00
ohci-spear.c USB: ehci: ohci: Add clk_{un}prepare() support 2012-04-18 14:33:43 -07:00
ohci-tmio.c USB: ohci-tmio.c: remove err() usage 2012-04-27 11:24:44 -07:00
ohci-xls.c USB: ohci-xls.c: remove err() usage 2012-04-27 11:24:45 -07:00
ohci.h usb: otg: Rename otg_transceiver to usb_phy 2012-02-13 13:34:36 +02:00
oxu210hp-hcd.c USB: oxu210hp-hcd.c: remove dbg() usage 2012-05-01 21:33:43 -07:00
oxu210hp.h
pci-quirks.c xhci: Add Lynx Point to list of Intel switchable hosts. 2012-05-03 13:18:40 -07:00
pci-quirks.h
r8a66597-hcd.c Revert "usb: move struct usb_device->children to struct usb_hub_port->child" 2012-05-14 09:20:37 -07:00
r8a66597.h
sl811_cs.c
sl811-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
sl811.h
ssb-hcd.c usb/ssb: Add missing #include <linux/slab.h> 2012-04-23 13:22:00 -07:00
u132-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
uhci-debug.c
uhci-grlib.c
uhci-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
uhci-hcd.h
uhci-hub.c UHCI: hub_status_data should indicate if ports are resuming 2012-04-09 15:43:21 -07:00
uhci-pci.c
uhci-q.c usb: fix number of mapped SG DMA entries 2011-12-09 16:18:19 -08:00
xhci-dbg.c xHCI: correct to print the true HSEE of USBCMD 2012-04-10 15:21:52 -07:00
xhci-ext-caps.h xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI 2012-04-11 08:31:06 -07:00
xhci-hub.c xHCI: keep track of ports being resumed and indicate in hub_status_data 2012-05-03 13:10:17 -07:00
xhci-mem.c xhci: Don't write zeroed pointers to xHC registers. 2012-04-11 08:28:55 -07:00
xhci-pci.c xhci: Add new short TX quirk for Fresco Logic host. 2012-05-17 10:36:57 -07:00
xhci-plat.c usb: host: xhci: add platform driver support 2012-03-13 10:30:59 -07:00
xhci-ring.c xhci: Add new short TX quirk for Fresco Logic host. 2012-05-17 10:36:57 -07:00
xhci.c USB: xhci: testing sizeof xhci_doorbell_array 2 time 2012-05-07 16:44:49 -07:00
xhci.h xhci: Add new short TX quirk for Fresco Logic host. 2012-05-17 10:36:57 -07:00