From: Jonathan Seth Mainguy <jon@soh.re>
To: linux-sound@vger.kernel.org
Cc: perex@perex.cz, tiwai@suse.com, niklas@aldervall.se,
linux-kernel@vger.kernel.org, Jonathan Seth Mainguy <jon@soh.re>
Subject: [PATCH 1/4] ALSA: usb-audio: add Roland OCTA-CAPTURE multirate support
Date: Fri, 28 Aug 2026 20:49:58 -0400 [thread overview]
Message-ID: <20260829005001.534571-2-jon@soh.re> (raw)
In-Reply-To: <20260829005001.534571-1-jon@soh.re>
The OCTA-CAPTURE provides one alternate setting for each supported
sample rate. Add the 48, 96 and 192 kHz playback and capture settings.
The existing S32_LE description causes the white-noise playback reported
by Niklas Aldervall and other users. The device sends packed 24-bit
samples, but S32_LE makes ALSA interpret each sample as a four-byte value,
which misaligns the stream. USB captures and PCM streaming tests confirm
that S24_3LE is the correct format for every setting.
The device provides 10 playback and 12 capture channels through
96 kHz, and four channels in each direction at 192 kHz. Correct the
product name in the commented override.
Tested on a physical OCTA-CAPTURE with full-duplex streams at 44.1,
48, 96 and 192 kHz.
Reported-by: Niklas Aldervall <niklas@aldervall.se>
Closes: https://lore.kernel.org/alsa-devel/6b623cb6-3a9b-4fe4-a57c-9a165d261692@aldervall.se/
Signed-off-by: Jonathan Seth Mainguy <jon@soh.re>
---
sound/usb/quirks-table.h | 104 +++++++++++++++++++++++++++++++++++++--
1 file changed, 100 insertions(+), 4 deletions(-)
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index dd02c6294edf..ef618a0f18d3 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -1227,15 +1227,15 @@ YAMAHA_DEVICE(0x7010, "UB99"),
}
},
{
- /* only 44.1 kHz works at the moment */
+ /* S24_3LE; altsettings 1-4 match the device clock. */
USB_DEVICE(0x0582, 0x0120),
QUIRK_DRIVER_INFO {
/* .vendor_name = "Roland", */
- /* .product_name = "OCTO-CAPTURE", */
+ /* .product_name = "OCTA-CAPTURE", */
QUIRK_DATA_COMPOSITE {
{
QUIRK_DATA_AUDIOFORMAT(0) {
- .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
.channels = 10,
.iface = 0,
.altsetting = 1,
@@ -1249,9 +1249,57 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.rate_table = (unsigned int[]) { 44100 }
}
},
+ {
+ QUIRK_DATA_AUDIOFORMAT(0) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 10,
+ .iface = 0,
+ .altsetting = 2,
+ .altset_idx = 2,
+ .endpoint = 0x05,
+ .ep_attr = 0x05,
+ .rates = SNDRV_PCM_RATE_48000,
+ .rate_min = 48000,
+ .rate_max = 48000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 48000 }
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(0) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 10,
+ .iface = 0,
+ .altsetting = 3,
+ .altset_idx = 3,
+ .endpoint = 0x05,
+ .ep_attr = 0x05,
+ .rates = SNDRV_PCM_RATE_96000,
+ .rate_min = 96000,
+ .rate_max = 96000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 96000 }
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(0) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 4,
+ .iface = 0,
+ .altsetting = 4,
+ .altset_idx = 4,
+ .endpoint = 0x05,
+ .ep_attr = 0x05,
+ .rates = SNDRV_PCM_RATE_192000,
+ .rate_min = 192000,
+ .rate_max = 192000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 192000 }
+ }
+ },
{
QUIRK_DATA_AUDIOFORMAT(1) {
- .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
.channels = 12,
.iface = 1,
.altsetting = 1,
@@ -1265,6 +1313,54 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.rate_table = (unsigned int[]) { 44100 }
}
},
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 12,
+ .iface = 1,
+ .altsetting = 2,
+ .altset_idx = 2,
+ .endpoint = 0x85,
+ .ep_attr = 0x25,
+ .rates = SNDRV_PCM_RATE_48000,
+ .rate_min = 48000,
+ .rate_max = 48000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 48000 }
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 12,
+ .iface = 1,
+ .altsetting = 3,
+ .altset_idx = 3,
+ .endpoint = 0x85,
+ .ep_attr = 0x25,
+ .rates = SNDRV_PCM_RATE_96000,
+ .rate_min = 96000,
+ .rate_max = 96000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 96000 }
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S24_3LE,
+ .channels = 4,
+ .iface = 1,
+ .altsetting = 4,
+ .altset_idx = 4,
+ .endpoint = 0x85,
+ .ep_attr = 0x25,
+ .rates = SNDRV_PCM_RATE_192000,
+ .rate_min = 192000,
+ .rate_max = 192000,
+ .nr_rates = 1,
+ .rate_table = (unsigned int[]) { 192000 }
+ }
+ },
{
QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
.out_cables = 0x0001,
--
2.55.0
next prev parent reply other threads:[~2026-08-29 0:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-29 0:49 [PATCH 0/4] ALSA: usb-audio: support Roland Capture sample rates Jonathan Seth Mainguy
2026-08-29 0:49 ` Jonathan Seth Mainguy [this message]
2026-08-29 0:49 ` [PATCH 2/4] ALSA: usb-audio: expose OCTA-CAPTURE control MIDI cables Jonathan Seth Mainguy
2026-08-29 0:50 ` [PATCH 3/4] ALSA: usb-audio: add Roland QUAD-CAPTURE multirate support Jonathan Seth Mainguy
2026-08-29 0:50 ` [PATCH 4/4] ALSA: usb-audio: set Roland Capture rate during stream preparation Jonathan Seth Mainguy
2026-08-31 8:30 ` [PATCH 0/4] ALSA: usb-audio: support Roland Capture sample rates Takashi Iwai
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=20260829005001.534571-2-jon@soh.re \
--to=jon@soh.re \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=niklas@aldervall.se \
--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
all inboxes | Powered by JetHome®