From: Phil Willoughby <willerz@gmail.com>
To: linux-sound@vger.kernel.org
Cc: Phil Willoughby <willerz@gmail.com>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>
Subject: [PATCH v4] ALSA: usb-audio: Add quirks for Arturia AF16Rig
Date: Sat, 28 Mar 2026 11:08:41 +0000 [thread overview]
Message-ID: <20260328112426.14816-1-willerz@gmail.com> (raw)
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>
---
Thank you all for your time and considered feedback.
There are two other clock sources the AF16Rig can use: an ADAT clock and
a BNC word clock. In theory the correct support for those would be
copies of these audioformat quirks with the clock changed to 43 (ADAT)
or 44 (BNC). The reason that I did not include those quirks in this
patch is that I cannot test them (because I do not have any other device
that can act as an ADAT or BNC clock source).
I think that what I want to do is:
1. Macro-ise these quirks so the common stuff isn't repeated as much.
This will be v5 of this patch.
Then a separate patch where I:
2. Add the external clock quirks and locally test that it doesn't break
anything for people who don't have the external clocks
3. Wrap the external clock quirks in #if 0 and a comment that they are
disabled because they haven't been tested.
4. This will be marked signed-off but not tested-by me.
sound/usb/quirks-table.h | 165 +++++++++++++++++++++++++++++++++++++++
1 file changed, 165 insertions(+)
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index eafc0d73cca1..8f79a15055a6 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -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
--
2.53.0
next reply other threads:[~2026-03-28 15:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-28 11:08 Phil Willoughby [this message]
2026-03-28 13:17 ` [PATCH v4] ALSA: usb-audio: Add quirks for Arturia AF16Rig Takashi Iwai
2026-03-28 15:49 ` Phil Willoughby
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260328112426.14816-1-willerz@gmail.com \
--to=willerz@gmail.com \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox