aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/quirks.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/usb/quirks.c')
-rw-r--r--sound/usb/quirks.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 27817266867a..0f58b4b6d702 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -761,3 +761,27 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
761 } 761 }
762} 762}
763 763
764void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
765{
766 /*
767 * "Playback Design" products send bogus feedback data at the start
768 * of the stream. Ignore them.
769 */
770 if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) &&
771 ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
772 ep->skip_packets = 4;
773}
774
775void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
776 __u8 request, __u8 requesttype, __u16 value,
777 __u16 index, void *data, __u16 size)
778{
779 /*
780 * "Playback Design" products need a 20ms delay after each
781 * class compliant request
782 */
783 if ((le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) &&
784 (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
785 mdelay(20);
786}
787