diff options
Diffstat (limited to 'sound/usb/quirks.c')
-rw-r--r-- | sound/usb/quirks.c | 24 |
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 | ||
764 | void 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 | |||
775 | void 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 | |||