* [PATCH v2] ALSA: usb-audio: add sample-rate quirk for Yamaha 01V96i
@ 2026-10-04 19:20 Justin Bacle
2026-10-05 10:29 ` Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: Justin Bacle @ 2026-10-04 19:20 UTC (permalink / raw)
To: Takashi Iwai, Jaroslav Kysela; +Cc: linux-sound, linux-kernel, Justin Bacle
The Yamaha 01V96i exposes its audio streaming interfaces as
vendor-specific USB class 0xff and ships no class-specific endpoint
descriptor. parse_uac_endpoint_attributes() therefore returns no
attributes for the device, and without UAC_EP_CS_ATTR_SAMPLE_RATE the
driver never issues the SET_CUR sampling-frequency request the hardware
needs to start its USB audio stream. The playback and capture PCMs are
reported as RUNNING and their pointers advance, but the mixer passes no
audio in either direction.
The vendor (Yamaha Steinberg) driver on Windows sends this request at
startup; the generic driver does not. Add the 01V96i to
snd_usb_audioformat_attributes_quirk() to force the attribute on, so the
stream is initialised the same way.
Confirmed against a usbmon capture of the Windows vendor driver: SET_CUR
CS_SAMPLING_FREQ_CONTROL to endpoints 0x07 and 0x86 is the only
non-standard control transfer it issues that completes successfully.
Verified on a mainline 7.2.9 kernel with a loopback test: playing a
440 Hz tone on USB channels 1/2 and recording USB channels 9/10 returns
the tone unchanged at 44100, 48000, 88200 and 96000 Hz.
Tested-by: Justin Bacle <justin.bacle@gmail.com>
Signed-off-by: Justin Bacle <justin.bacle@gmail.com>
---
Changes in v2:
- Describe the change and its verification.
sound/usb/quirks.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 6176acc04..9a5ea295e 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -2332,6 +2332,21 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
int stream)
{
switch (chip->usb_id) {
+ case USB_ID(0x0499, 0x5500): /* Yamaha 01V96i */
+ /*
+ * The 01V96i declares its audio streaming interfaces as
+ * vendor-specific (class 0xff) and provides no class-specific
+ * endpoint descriptor. parse_uac_endpoint_attributes() therefore
+ * returns no attributes, and the driver never issues the SET_CUR
+ * sampling-frequency request the hardware needs to engage its USB
+ * stream: playback and capture PCMs report RUNNING, but the desk
+ * passes no audio.
+ *
+ * Force the attribute on so the stream is initialised the same way
+ * the Windows driver does it.
+ */
+ fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE;
+ break;
case USB_ID(0x0a92, 0x0053): /* AudioTrak Optoplay */
/* Optoplay sets the sample rate attribute although
* it seems not supporting it in fact.
--
2.53.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v2] ALSA: usb-audio: add sample-rate quirk for Yamaha 01V96i
2026-10-04 19:20 [PATCH v2] ALSA: usb-audio: add sample-rate quirk for Yamaha 01V96i Justin Bacle
@ 2026-10-05 10:29 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2026-10-05 10:29 UTC (permalink / raw)
To: Justin Bacle; +Cc: Takashi Iwai, Jaroslav Kysela, linux-sound, linux-kernel
On Sun, 04 Oct 2026 21:20:50 +0200,
Justin Bacle wrote:
>
> The Yamaha 01V96i exposes its audio streaming interfaces as
> vendor-specific USB class 0xff and ships no class-specific endpoint
> descriptor. parse_uac_endpoint_attributes() therefore returns no
> attributes for the device, and without UAC_EP_CS_ATTR_SAMPLE_RATE the
> driver never issues the SET_CUR sampling-frequency request the hardware
> needs to start its USB audio stream. The playback and capture PCMs are
> reported as RUNNING and their pointers advance, but the mixer passes no
> audio in either direction.
>
> The vendor (Yamaha Steinberg) driver on Windows sends this request at
> startup; the generic driver does not. Add the 01V96i to
> snd_usb_audioformat_attributes_quirk() to force the attribute on, so the
> stream is initialised the same way.
>
> Confirmed against a usbmon capture of the Windows vendor driver: SET_CUR
> CS_SAMPLING_FREQ_CONTROL to endpoints 0x07 and 0x86 is the only
> non-standard control transfer it issues that completes successfully.
>
> Verified on a mainline 7.2.9 kernel with a loopback test: playing a
> 440 Hz tone on USB channels 1/2 and recording USB channels 9/10 returns
> the tone unchanged at 44100, 48000, 88200 and 96000 Hz.
>
> Tested-by: Justin Bacle <justin.bacle@gmail.com>
> Signed-off-by: Justin Bacle <justin.bacle@gmail.com>
Applied to for-next branch now. Thanks.
Takashi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-05 10:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-04 19:20 [PATCH v2] ALSA: usb-audio: add sample-rate quirk for Yamaha 01V96i Justin Bacle
2026-10-05 10:29 ` Takashi Iwai
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®