Bug 218175

Summary: Freshly bought Mackie Big Knob Studio+ needs quirk_flags
Product: Drivers Reporter: Marko Wunderlich (psychotronic)
Component: Sound(ALSA)Assignee: Jaroslav Kysela (perex)
Status: NEW ---    
Severity: normal CC: alexander
Priority: P3    
Hardware: All   
OS: Linux   
Kernel Version: 6.6.1-arch1-1 Subsystem:
Regression: No Bisected commit-id:
Attachments: dmesg output without the quirk_flag set.
dmesg output with the quirk_flag set.
lsusb output for the device
dmesg output with the quirk_flag 0x20 set.

Description Marko Wunderlich 2023-11-21 17:09:50 UTC
Created attachment 305453 [details]
dmesg output without the quirk_flag set.

Dear All,

as i just bought a Mackie Big Knob Studio+ and the only info i found about these devices was some people on Reddit saying that at least the older generation does run on Linux. I was surprised to see that the current version of it doesn't anymore.

Attached to the ticket you'll find output for lsusb for the device and dmesg logs for the error case.

I'll also attached a log for the working case, as i found out after a bit of research that the snd_usb_audio driver has a option to set quirk flags to access modes that should be from my understanding put into some kind of configuration or profile for the card. I'm not skilled enough to provide a kernel patch, but i basically found out how to get the interface to operate normally with a quirk_flag. The documentation state that i should report this to upstream, which i am doing hereby.

So the driver seems to have a problem with identifying the clock source(see attached log), that led me to the conclusion that for the quirk_flags this should be set:

"bit 6: Ignore errors from clock source search" (according to the documentation)

Setting it and re plugging the usb-cable boots the device normally.(see attached log)

The command i used for this is:

modprobe -r snd_usb_audio
modprobe snd_usb_audio dyndbg==p quirk_flags=0x64

Best Regards,

Marko
Comment 1 Marko Wunderlich 2023-11-21 17:10:34 UTC
Created attachment 305454 [details]
dmesg output with the quirk_flag set.
Comment 2 Marko Wunderlich 2023-11-21 17:11:28 UTC
Created attachment 305455 [details]
lsusb output for the device
Comment 3 Marko Wunderlich 2023-11-21 17:13:07 UTC
In case you need more Info, please feel free to contact me.
Comment 4 Alexander Tsoy 2024-01-29 15:31:23 UTC
(In reply to Marko Wunderlich from comment #0)
> modprobe -r snd_usb_audio
> modprobe snd_usb_audio dyndbg==p quirk_flags=0x64
You actually enabled 3 quirks: 2, 5 and 6. Please try only with 5 (Skip clock selector setup):
quirk_flags=0x20
Comment 5 Marko Wunderlich 2024-02-01 12:49:27 UTC
Created attachment 305808 [details]
dmesg output with the quirk_flag 0x20 set.
Comment 6 Marko Wunderlich 2024-02-01 12:50:25 UTC
That seems to work, i added another log from that test run. 

Can we do something to tell alsa the sample rates the interface is capable? Right now we get this:

cat /proc/asound/STUDIO/stream0 
LOUD Technologies Inc. BIG KNOB STUDIO+ at usb-0000:00:14.0-6.4, high speed : USB Audio

Playback:
  Status: Stop
  Interface 1
    Altset 1
    Format: S32_LE
    Channels: 4
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000
    Data packet interval: 125 us
    Bits: 24
    Channel map: FL FR FC LFE
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 1
    Implicit Feedback Mode: No
  Interface 1
    Altset 2
    Format: S16_LE
    Channels: 4
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000
    Data packet interval: 125 us
    Bits: 16
    Channel map: FL FR FC LFE
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 2
    Implicit Feedback Mode: No

Capture:
  Status: Stop
  Interface 2
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 0x82 (2 IN) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000
    Data packet interval: 125 us
    Bits: 24
    Channel map: FL FR
Comment 7 Marko Wunderlich 2024-02-01 12:51:36 UTC
The interface goes up to 96 kHz not higher.
Comment 8 Alexander Tsoy 2024-02-01 21:29:43 UTC
(In reply to Marko Wunderlich from comment #7)
> The interface goes up to 96 kHz not higher.

Please try to enable QUIRK_FLAG_VALIDATE_RATES + QUIRK_FLAG_SKIP_CLOCK_SELECTOR:

modprobe snd_usb_audio dyndbg==p quirk_flag=0x1020

and show dmesg output for this device.

But I think this wouldn't work since the card lacks Valid Alternate Setting Control (according to lsusb output).
Comment 9 Alexander Tsoy 2024-02-01 21:56:33 UTC
Hmm.. Manual says that 192KHz should be supported, but on the product page I see 96KHz o_O
Comment 10 Marko Wunderlich 2024-02-19 13:29:15 UTC
(In reply to Alexander Tsoy from comment #9)
> Hmm.. Manual says that 192KHz should be supported, but on the product page I
> see 96KHz o_O

I just recorded a 192Khz 32bit float file with the interface. o.O The manual must be right, unfortunately ardour segfaulted out of the export process in protest, must have been my bad singing. :D


(In reply to Alexander Tsoy from comment #8)
> (In reply to Marko Wunderlich from comment #7)
> > The interface goes up to 96 kHz not higher.
> 
> Please try to enable QUIRK_FLAG_VALIDATE_RATES +
> QUIRK_FLAG_SKIP_CLOCK_SELECTOR:
> 
> modprobe snd_usb_audio dyndbg==p quirk_flag=0x1020
> 
> and show dmesg output for this device.
> 
> But I think this wouldn't work since the card lacks Valid Alternate Setting
> Control (according to lsusb output).

Log looks like this:

[ 2925.061562] usb 1-6.4: USB disconnect, device number 13
[ 2928.850398] usb 1-6.4: new high-speed USB device number 14 using xhci_hcd
[ 2928.941094] usb 1-6.4: New USB device found, idVendor=0a73, idProduct=001b, bcdDevice= 6.c5
[ 2928.941110] usb 1-6.4: New USB device strings: Mfr=1, Product=3, SerialNumber=0
[ 2928.941118] usb 1-6.4: Product: BIG KNOB STUDIO+
[ 2928.941124] usb 1-6.4: Manufacturer: LOUD Technologies Inc.
[ 2928.947156] usb 1-6.4: Found last interface = 0
[ 2928.948811] usb 1-6.4: No valid sample rate available for 1:1, assuming a firmware bug
[ 2928.948817] usb 1-6.4: 1:1: found sync_ep=0x81, iface=1, alt=1, implicit_fb=0
[ 2928.948819] usb 1-6.4: 1:1: add audio endpoint 0x1
[ 2928.948833] usb 1-6.4: Creating new data endpoint #1
[ 2928.948836] usb 1-6.4: Creating new sync endpoint #81
[ 2928.948893] usb 1-6.4: 1:1 Set sample rate 192000, clock 40
[ 2928.952622] usb 1-6.4: No valid sample rate available for 1:2, assuming a firmware bug
[ 2928.952627] usb 1-6.4: 1:2: found sync_ep=0x81, iface=1, alt=2, implicit_fb=0
[ 2928.952629] usb 1-6.4: 1:2: add audio endpoint 0x1
[ 2928.952684] usb 1-6.4: 1:2 Set sample rate 192000, clock 40
[ 2928.955939] usb 1-6.4: No valid sample rate available for 2:1, assuming a firmware bug
[ 2928.955943] usb 1-6.4: 2:1: add audio endpoint 0x82
[ 2928.955955] usb 1-6.4: Creating new data endpoint #82
[ 2928.955993] usb 1-6.4: 2:1 Set sample rate 192000, clock 40
[ 2928.957935] usb 1-6.4: [10] FU [BIG KNOB STUDIO+  Playback Switch] ch = 4, val = 0/1/1
[ 2928.958036] usb 1-6.4: [10] FU [BIG KNOB STUDIO+  Playback Switch] ch = 1, val = 0/1/1
[ 2928.958579] usb 1-6.4: [10] FU [BIG KNOB STUDIO+  Playback Volume] ch = 4, val = -32512/0/256
[ 2928.958973] usb 1-6.4: [10] FU [BIG KNOB STUDIO+  Playback Volume] ch = 1, val = -32512/0/256
[ 2928.959125] usb 1-6.4: [11] FU [Mic Capture Switch] ch = 2, val = 0/1/1
[ 2928.959178] usb 1-6.4: [11] FU [Mic Capture Switch] ch = 1, val = 0/1/1
[ 2928.959583] usb 1-6.4: [11] FU [Mic Capture Volume] ch = 2, val = -32512/0/256
[ 2928.959971] usb 1-6.4: [11] FU [Mic Capture Volume] ch = 1, val = -32512/0/256
[ 2929.669429] usb 1-6.4: Open EP 0x82, iface=2:1, idx=0
[ 2929.669434] usb 1-6.4:   channels=2, rate=48000, format=S32_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.669437] usb 1-6.4: Setting params for data EP 0x82, pipe 0x10e80
[ 2929.669443] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.669453] usb 1-6.4: 2:1 Set sample rate 48000, clock 40
[ 2929.669757] usb 1-6.4: Setting usb interface 2:1 for EP 0x82
[ 2929.672786] usb 1-6.4: Closing EP 0x82 (count 1)
[ 2929.672790] usb 1-6.4: Setting usb interface 2:0 for EP 0x82
[ 2929.673246] usb 1-6.4: EP 0x82 closed
[ 2929.680764] usb 1-6.4: Open EP 0x82, iface=2:1, idx=0
[ 2929.680770] usb 1-6.4:   channels=2, rate=48000, format=S32_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.680776] usb 1-6.4: Setting params for data EP 0x82, pipe 0x10e80
[ 2929.680783] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.680820] usb 1-6.4: 2:1 Set sample rate 48000, clock 40
[ 2929.681000] usb 1-6.4: Setting usb interface 2:1 for EP 0x82
[ 2929.681597] usb 1-6.4: Closing EP 0x82 (count 1)
[ 2929.681601] usb 1-6.4: Setting usb interface 2:0 for EP 0x82
[ 2929.682051] usb 1-6.4: EP 0x82 closed
[ 2929.683973] usb 1-6.4: Open EP 0x1, iface=1:2, idx=0
[ 2929.683978] usb 1-6.4:   channels=4, rate=48000, format=S16_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.683980] usb 1-6.4: Open EP 0x81, iface=1:2, idx=1
[ 2929.683982] usb 1-6.4:   channels=4, rate=48000, format=S16_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.683985] usb 1-6.4: Setting params for sync EP 0x81, pipe 0x8e80
[ 2929.683987] usb 1-6.4: Set up 4 URBS, ret=0
[ 2929.683989] usb 1-6.4: Setting params for data EP 0x1, pipe 0x8e00
[ 2929.683995] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.684005] usb 1-6.4: 1:2 Set sample rate 48000, clock 40
[ 2929.684235] usb 1-6.4: Setting usb interface 1:2 for EP 0x81
[ 2929.685365] usb 1-6.4: Open EP 0x82, iface=2:1, idx=0
[ 2929.685369] usb 1-6.4:   channels=2, rate=48000, format=S32_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.685375] usb 1-6.4: Setting params for data EP 0x82, pipe 0x10e80
[ 2929.685380] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.685388] usb 1-6.4: Setting usb interface 2:1 for EP 0x82
[ 2929.685886] usb 1-6.4: Closing EP 0x82 (count 1)
[ 2929.685888] usb 1-6.4: Setting usb interface 2:0 for EP 0x82
[ 2929.686312] usb 1-6.4: EP 0x82 closed
[ 2929.686579] usb 1-6.4: Open EP 0x82, iface=2:1, idx=0
[ 2929.686581] usb 1-6.4:   channels=2, rate=48000, format=S32_LE, period_bytes=9600, periods=4, implicit_fb=0
[ 2929.686585] usb 1-6.4: Setting params for data EP 0x82, pipe 0x10e80
[ 2929.686589] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.686596] usb 1-6.4: Setting usb interface 2:1 for EP 0x82
[ 2929.687231] usb 1-6.4: Closing EP 0x1 (count 1)
[ 2929.687235] usb 1-6.4: EP 0x1 closed
[ 2929.687237] usb 1-6.4: Closing EP 0x81 (count 1)
[ 2929.687240] usb 1-6.4: Setting usb interface 1:0 for EP 0x81
[ 2929.687760] usb 1-6.4: EP 0x81 closed
[ 2929.687821] usb 1-6.4: Closing EP 0x82 (count 1)
[ 2929.687823] usb 1-6.4: Setting usb interface 2:0 for EP 0x82
[ 2929.688311] usb 1-6.4: EP 0x82 closed
[ 2929.714763] usb 1-6.4: Open EP 0x1, iface=1:1, idx=0
[ 2929.714769] usb 1-6.4:   channels=4, rate=48000, format=S32_LE, period_bytes=16384, periods=64, implicit_fb=0
[ 2929.714772] usb 1-6.4: Open EP 0x81, iface=1:1, idx=1
[ 2929.714774] usb 1-6.4:   channels=4, rate=48000, format=S32_LE, period_bytes=16384, periods=64, implicit_fb=0
[ 2929.714779] usb 1-6.4: Setting params for sync EP 0x81, pipe 0x8e80
[ 2929.714781] usb 1-6.4: Set up 4 URBS, ret=0
[ 2929.714785] usb 1-6.4: Setting params for data EP 0x1, pipe 0x8e00
[ 2929.714790] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.714857] usb 1-6.4: 1:1 Set sample rate 48000, clock 40
[ 2929.715091] usb 1-6.4: Setting usb interface 1:1 for EP 0x81
[ 2929.715770] usb 1-6.4: Closing EP 0x1 (count 1)
[ 2929.715776] usb 1-6.4: EP 0x1 closed
[ 2929.715778] usb 1-6.4: Closing EP 0x81 (count 1)
[ 2929.715780] usb 1-6.4: Setting usb interface 1:0 for EP 0x81
[ 2929.716279] usb 1-6.4: EP 0x81 closed
[ 2929.716600] usb 1-6.4: Open EP 0x82, iface=2:1, idx=0
[ 2929.716605] usb 1-6.4:   channels=2, rate=48000, format=S32_LE, period_bytes=8192, periods=64, implicit_fb=0
[ 2929.716611] usb 1-6.4: Setting params for data EP 0x82, pipe 0x10e80
[ 2929.716618] usb 1-6.4: Set up 12 URBS, ret=0
[ 2929.716659] usb 1-6.4: 2:1 Set sample rate 48000, clock 40
[ 2929.717256] usb 1-6.4: Setting usb interface 2:1 for EP 0x82
[ 2929.717828] usb 1-6.4: Closing EP 0x82 (count 1)
[ 2929.717832] usb 1-6.4: Setting usb interface 2:0 for EP 0x82
[ 2929.718332] usb 1-6.4: EP 0x82 closed