summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/usb/pcm.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 5953e22a72c5..676acc20595b 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -403,6 +403,9 @@ static int audioformat_implicit_fb_quirk(struct snd_usb_audio *chip,
case USB_ID(0x0582, 0x01d8): /* BOSS Katana */
/* BOSS Katana amplifiers do not need quirks */
return 0;
+ case USB_ID(0x0582, 0x01e5): /* BOSS GT-001 */
+ /* BOSS GT-001 needs no implicit fb for playback */
+ return 0;
}
/* Generic UAC2 implicit feedback */
@@ -454,6 +457,30 @@ add_sync_ep:
return 1;
}
+static int audioformat_capture_quirk(struct snd_usb_audio *chip,
+ struct audioformat *fmt,
+ struct usb_host_interface *alts)
+{
+ struct usb_device *dev = chip->dev;
+
+ switch (chip->usb_id) {
+ case USB_ID(0x0582, 0x01e5): /* BOSS GT-001 */
+ if (!snd_usb_get_host_interface(chip, 0x01, 0x01))
+ return 0;
+ fmt->sync_ep = 0x0d;
+ fmt->sync_iface = 0x01;
+ fmt->sync_altsetting = 0x01;
+ fmt->sync_ep_idx = 0;
+ fmt->implicit_fb = 1;
+ dev_dbg(&dev->dev, "%d:%d: added fake capture sync sync_ep=%x, iface=%d, alt=%d\n",
+ fmt->iface, fmt->altsetting, fmt->sync_ep, fmt->sync_iface,
+ fmt->sync_altsetting);
+ return 1;
+ }
+ return 0;
+
+}
+
int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio *chip,
struct audioformat *fmt)
{
@@ -474,6 +501,10 @@ int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio *chip,
err = audioformat_implicit_fb_quirk(chip, fmt, alts);
if (err > 0)
return 0;
+ } else {
+ err = audioformat_capture_quirk(chip, fmt, alts);
+ if (err > 0)
+ return 0;
}
if (altsd->bNumEndpoints < 2)