ALSA: usb-audio: Add quirks for Arturia AF16Rig

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>
master
Phil Willoughby 2026-03-28 11:08:41 +00:00 committed by Takashi Iwai
parent 18d4969e22
commit 0da18c2dd1
1 changed files with 165 additions and 0 deletions

View 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