diff options
author | Daniel Mack <zonque@gmail.com> | 2012-09-04 10:23:07 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-09-04 11:31:14 +0200 |
commit | 2b58fd5b3193fd3af3d15114d95706087d25a7fe (patch) | |
tree | 929c51bd48ee1637f963fa520bf31eee04927861 /sound/usb/card.h | |
parent | c05fce586d4da2dfe0309bef3795a8586e967bc3 (diff) | |
download | lwn-2b58fd5b3193fd3af3d15114d95706087d25a7fe.tar.gz lwn-2b58fd5b3193fd3af3d15114d95706087d25a7fe.zip |
ALSA: snd-usb: Add quirks for Playback Designs devices
Playback Designs' USB devices have some hardware limitations on their
USB interface. In particular:
- They need a 20ms delay after each class compliant request as the
hardware ACKs the USB packets before the device is actually ready
for the next command. Sending data immediately will result in buffer
overflows in the hardware.
- The devices send bogus feedback data at the start of each stream
which confuse the feedback format auto-detection.
This patch introduces a new quirks hook that is called after each
control packet and which adds a delay for all devices that match
Playback Designs' USB VID for now.
In addition, it adds a counter to snd_usb_endpoint to drop received
packets on the floor. Another new quirks function that is called once
an endpoint is started initializes that counter for these devices on
their sync endpoint.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Reported-and-tested-by: Andreas Koch <andreas@akdesigninc.com>
Supported-by: Demian Martin <demianm_1@yahoo.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/card.h')
-rw-r--r-- | sound/usb/card.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sound/usb/card.h b/sound/usb/card.h index bcb5267a02e8..23b6f23bd36a 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -92,6 +92,8 @@ struct snd_usb_endpoint { unsigned char silence_value; unsigned int stride; int iface, alt_idx; + int skip_packets; /* quirks for devices to ignore the first n packets + in a stream */ spinlock_t lock; struct list_head list; |