]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: usb-audio: Add quirks for Arturia AF16Rig
authorPhil Willoughby <willerz@gmail.com>
Sat, 28 Mar 2026 11:08:41 +0000 (11:08 +0000)
committerTakashi Iwai <tiwai@suse.de>
Sat, 28 Mar 2026 13:13:20 +0000 (14:13 +0100)
The AF16Rig supports 34 channels at 44.1k/48k, 18 channels at 88.2k/96k
and 10 channels at 176.4k/192k.

This quirks is necessary because the automatic probing process we would
otherwise use fails. The root cause of that is that the AF16Rig clock is
not readable (its descriptor says that it is but the reads fail).

Except as described below, the values in the audio format quirks were
copied from the USB descriptors of the device. The rate information is
from the datasheet of the device. The clock is the internal clock of the
AF16Rig.

Tested-By: Phil Willoughby <willerz@gmail.com>
I have tested all the configurations enabled by this patch.

Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.com>
Signed-off-by: Phil Willoughby <willerz@gmail.com>
Link: https://patch.msgid.link/20260328112426.14816-1-willerz@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/quirks-table.h

index eafc0d73cca1fb385f3666eab17c1e6f96e63f59..8f79a15055a6ae8212c53062f8cf6db8d1c2365f 100644 (file)
@@ -3900,5 +3900,170 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 QUIRK_RME_DIGIFACE(0x3f8c),
 QUIRK_RME_DIGIFACE(0x3fa0),
 
+/* Arturia AudioFuse 16Rig Audio */
+/* AF16Rig MIDI has USB PID 0xaf21 and appears to work OK without quirks */
+{
+       USB_DEVICE(0x1c75, 0xaf20),
+       QUIRK_DRIVER_INFO {
+               .vendor_name = "Arturia",
+               .product_name = "AF16Rig",
+               QUIRK_DATA_COMPOSITE {
+                       { QUIRK_DATA_STANDARD_MIXER(0) },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(1) { /* Playback */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 34,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 1,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .endpoint = 0x01,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03b8,
+                                       .rates = SNDRV_PCM_RATE_44100|
+                                                SNDRV_PCM_RATE_48000,
+                                       .rate_min = 44100,
+                                       .rate_max = 48000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 44100, 48000 },
+                                       .clock = 41,
+                               }
+                       },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(1) { /* Playback */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 18,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 1,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .endpoint = 0x01,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03a8,
+                                       .rates = SNDRV_PCM_RATE_88200|
+                                                SNDRV_PCM_RATE_96000,
+                                       .rate_min = 88200,
+                                       .rate_max = 96000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 88200, 96000 },
+                                       .clock = 41,
+                               }
+                       },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(1) { /* Playback */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 10,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 1,
+                                       .altsetting = 3,
+                                       .altset_idx = 3,
+                                       .endpoint = 0x01,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03e8,
+                                       .rates = SNDRV_PCM_RATE_176400|
+                                                SNDRV_PCM_RATE_192000,
+                                       .rate_min = 176400,
+                                       .rate_max = 192000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 176400, 192000 },
+                                       .clock = 41,
+                               }
+                       },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(2) { /* Capture */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 34,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 2,
+                                       .altsetting = 1,
+                                       .altset_idx = 1,
+                                       .endpoint = 0x81,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03b8,
+                                       .rates = SNDRV_PCM_RATE_44100|
+                                                SNDRV_PCM_RATE_48000,
+                                       .rate_min = 44100,
+                                       .rate_max = 48000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 44100, 48000 },
+                                       .clock = 41,
+                               }
+                       },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(2) { /* Capture */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 18,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 2,
+                                       .altsetting = 2,
+                                       .altset_idx = 2,
+                                       .endpoint = 0x81,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03a8,
+                                       .rates = SNDRV_PCM_RATE_88200|
+                                                SNDRV_PCM_RATE_96000,
+                                       .rate_min = 88200,
+                                       .rate_max = 96000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 88200, 96000 },
+                                       .clock = 41,
+                               }
+                       },
+                       {
+                               QUIRK_DATA_AUDIOFORMAT(2) { /* Capture */
+                                       .formats = SNDRV_PCM_FMTBIT_S32_LE,
+                                       .channels = 10,
+                                       .fmt_type = UAC_FORMAT_TYPE_I_PCM,
+                                       .fmt_bits = 24,
+                                       .fmt_sz = 4,
+                                       .iface = 2,
+                                       .altsetting = 3,
+                                       .altset_idx = 3,
+                                       .endpoint = 0x81,
+                                       .ep_attr = USB_ENDPOINT_XFER_ISOC|
+                                                  USB_ENDPOINT_SYNC_ASYNC,
+                                       .datainterval = 1,
+                                       .protocol = UAC_VERSION_2,
+                                       .maxpacksize = 0x03e8,
+                                       .rates = SNDRV_PCM_RATE_176400|
+                                                SNDRV_PCM_RATE_192000,
+                                       .rate_min = 176400,
+                                       .rate_max = 192000,
+                                       .nr_rates = 2,
+                                       .rate_table = (unsigned int[]) { 176400, 192000 },
+                                       .clock = 41,
+                               }
+                       },
+                       { QUIRK_DATA_IGNORE(3) }, /* Firmware update */
+                       QUIRK_COMPOSITE_END
+               }
+       }
+},
+
 #undef USB_DEVICE_VENDOR_SPEC
 #undef USB_AUDIO_DEVICE