*** This patch is incomplete, as the device re-initialises *** if playback and capture is attempted at the same time.
The capture endpoint shares the same interface as the playback endpoint, and it seems that this is the first quirk to do this.
We must override the maxpacksize (which is not done in the playback interface) because create_fixed_stream_quirk() takes the wMaxPacketSize from the first endpoint by default. --- sound/usb/quirks-table.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 3614e9b..c62f2a3 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -2707,6 +2707,29 @@ YAMAHA_DEVICE(0x7010, "UB99"), } }, { + .ifnum = 0, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = & (const struct audioformat) { + .formats = SNDRV_PCM_FMTBIT_S24_3LE, + .channels = 2, + .iface = 0, + .altsetting = 1, + .altset_idx = 1, + .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, + .endpoint = 0x82, + .ep_attr = USB_ENDPOINT_XFER_ISOC, + .maxpacksize = 0x126, + .rates = SNDRV_PCM_RATE_44100 | + SNDRV_PCM_RATE_48000, + .rate_min = 44100, + .rate_max = 48000, + .nr_rates = 2, + .rate_table = (unsigned int[]) { + 44100, 48000 + } + } + }, + { .ifnum = 1, .type = QUIRK_MIDI_RAW_BYTES },