* Support for NUX MG-300 USB interface
@ 2021-01-17 18:56 Mike Oliphant
2021-01-18 7:43 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-17 18:56 UTC (permalink / raw)
To: alsa-devel
I recently got a NUX MG-300 USB guitar fx interface with high hopes that it
would work in Linux. It is supposed to be class-compliant, and works in iOS
and macOS without a driver.
Unfortunately, while it is recognized as a USB audio device by Linux, it is
not working.
The core issue seems to be that "stream0" reports no playback rates. dmesg
also shows errors, including "__uac_clock_find_source(): selector reported
illegal value".
Any help identifying the issue would be much appreciated. I have some
experience troubleshooting the USB audio kernel code and am happy to try
doing so if I can get a nudge in the right direction.
Output from "stream0", dmesg, and lsusb follows.
Thanks!
Mike
"stream0"
---
NUX NUX MG-300 AUDIO at usb-0000:00:1a.7-1.3, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x01 (1 OUT) (ASYNC)
Rates:
Data packet interval: 1000 us
Bits: 24
Channel map: FL FR
Sync Endpoint: 0x81 (1 IN)
Sync EP Interface: 1
Sync EP Altset: 1
Implicit Feedback Mode: No
Capture:
Status: Stop
Interface 2
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x82 (2 IN) (ASYNC)
Rates:
Data packet interval: 1000 us
Bits: 24
Channel map: FL FR
---
dmesg log:
---
[ 141.265806] usb 3-1.3: new high-speed USB device number 9 using ehci-pci
[ 141.374351] usb 3-1.3: config 1 interface 3 altsetting 0 bulk endpoint
0x4 has invalid maxpacket 256
[ 141.374370] usb 3-1.3: config 1 interface 3 altsetting 0 bulk endpoint
0x83 has invalid maxpacket 256
[ 141.375373] usb 3-1.3: New USB device found, idVendor=1fc9,
idProduct=8260, bcdDevice= 1.00
[ 141.375389] usb 3-1.3: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[ 141.375396] usb 3-1.3: Product: NUX MG-300 AUDIO
[ 141.375401] usb 3-1.3: Manufacturer: NUX
[ 141.375405] usb 3-1.3: SerialNumber: 2008101346
[ 141.468523] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.468531] usb 3-1.3: parse_audio_format_rates_v2v3(): unable to find
clock source (clock -22)
[ 141.468771] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.468897] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.469274] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.469279] usb 3-1.3: parse_audio_format_rates_v2v3(): unable to find
clock source (clock -22)
[ 141.469521] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.469646] usb 3-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 141.472645] usbcore: registered new interface driver snd-usb-audio
---
lsusb output:
---
Bus 003 Device 009: ID 1fc9:8260 NXP Semiconductors
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x1fc9 NXP Semiconductors
idProduct 0x8260
bcdDevice 1.00
iManufacturer 1
iProduct 2
iSerial 3
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x013e
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 3
bFunctionClass 1 Audio
bFunctionSubClass 0
bFunctionProtocol 32
iFunction 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 32
iInterface 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 2.00
bCategory 8
wTotalLength 0x0065
bmControls 0x00
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 10 (CLOCK_SOURCE)
bClockID 41
bmAttributes 3 Internal programmable clock
bmControls 0x07
Clock Frequency Control (read/write)
Clock Validity Control (read-only)
bAssocTerminal 0
iClockSource 0
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 11 (CLOCK_SELECTOR)
bClockID 40
bNrInPins 1
baCSourceID(0) 41
bmControls 0x03
Clock Selector Control (read/write)
iClockSelector 0
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bCSourceID 40
bNrChannels 2
bmChannelConfig 0x00000000
iChannelNames 0
bmControls 0x0000
iTerminal 0
AudioControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 10
bSourceID 2
bmaControls(0) 0x0000000f
Mute Control (read/write)
Volume Control (read/write)
bmaControls(1) 0x0000000f
Mute Control (read/write)
Volume Control (read/write)
bmaControls(2) 0x0000000f
Mute Control (read/write)
Volume Control (read/write)
iFeature 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 20
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 10
bCSourceID 40
bmControls 0x0000
iTerminal 0
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0201 Microphone
bAssocTerminal 0
bCSourceID 40
bNrChannels 2
bmChannelConfig 0x00000000
iChannelNames 0
bmControls 0x0000
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 22
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 2
bCSourceID 40
bmControls 0x0000
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 2
bmControls 0x00
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000000
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 4
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0258 1x 600 bytes
bInterval 4
AudioStreaming Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 17
Transfer Type Isochronous
Synch Type None
Usage Type Feedback
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 4
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 22
bmControls 0x00
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000000
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 4
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0258 1x 600 bytes
bInterval 4
AudioStreaming Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 3 MIDI Streaming
bInterfaceProtocol 0
iInterface 4
MIDIStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0041
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 1 Embedded
bJackID 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 2 External
bJackID 2
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 1 Embedded
bJackID 3
bNrInputPins 1
baSourceID( 0) 2
BaSourcePin( 0) 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 2 External
bJackID 4
bNrInputPins 1
baSourceID( 0) 1
BaSourcePin( 0) 1
iJack 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0100 1x 256 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (GENERAL)
bNumEmbMIDIJack 1
baAssocJackID( 0) 1
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0100 1x 256 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (GENERAL)
bNumEmbMIDIJack 1
baAssocJackID( 0) 3
---
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-17 18:56 Support for NUX MG-300 USB interface Mike Oliphant
@ 2021-01-18 7:43 ` Takashi Iwai
2021-01-18 16:33 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-18 7:43 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Sun, 17 Jan 2021 19:56:01 +0100,
Mike Oliphant wrote:
>
> I recently got a NUX MG-300 USB guitar fx interface with high hopes that it
> would work in Linux. It is supposed to be class-compliant, and works in iOS
> and macOS without a driver.
>
> Unfortunately, while it is recognized as a USB audio device by Linux, it is
> not working.
>
> The core issue seems to be that "stream0" reports no playback rates. dmesg
> also shows errors, including "__uac_clock_find_source(): selector reported
> illegal value".
>
> Any help identifying the issue would be much appreciated. I have some
> experience troubleshooting the USB audio kernel code and am happy to try
> doing so if I can get a nudge in the right direction.
>
> Output from "stream0", dmesg, and lsusb follows.
Did you try the latest 5.11-rc kernel? There have been lots of
changes in USB-audio and this might work better there.
If it still doesn't work with 5.11-rc, please try to enable the debug
option, e.g. boot with snd_usb_audio.dyndbg=+p boot option, plug the
device, and get the kernel logs (at plugging and during the audio
operations).
thanks,
Takashi
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 7:43 ` Takashi Iwai
@ 2021-01-18 16:33 ` Mike Oliphant
2021-01-18 17:54 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-18 16:33 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Thanks for the response. I'm running a very recent build of the master
kernel tree (~ 5.11-rc2).
I'll give dyndbg a try.
Mike
On Sun, Jan 17, 2021 at 11:43 PM Takashi Iwai <tiwai@suse.de> wrote:
> On Sun, 17 Jan 2021 19:56:01 +0100,
> Mike Oliphant wrote:
> >
> > I recently got a NUX MG-300 USB guitar fx interface with high hopes that
> it
> > would work in Linux. It is supposed to be class-compliant, and works in
> iOS
> > and macOS without a driver.
> >
> > Unfortunately, while it is recognized as a USB audio device by Linux, it
> is
> > not working.
> >
> > The core issue seems to be that "stream0" reports no playback rates.
> dmesg
> > also shows errors, including "__uac_clock_find_source(): selector
> reported
> > illegal value".
> >
> > Any help identifying the issue would be much appreciated. I have some
> > experience troubleshooting the USB audio kernel code and am happy to try
> > doing so if I can get a nudge in the right direction.
> >
> > Output from "stream0", dmesg, and lsusb follows.
>
> Did you try the latest 5.11-rc kernel? There have been lots of
> changes in USB-audio and this might work better there.
>
> If it still doesn't work with 5.11-rc, please try to enable the debug
> option, e.g. boot with snd_usb_audio.dyndbg=+p boot option, plug the
> device, and get the kernel logs (at plugging and during the audio
> operations).
>
>
> thanks,
>
> Takashi
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 16:33 ` Mike Oliphant
@ 2021-01-18 17:54 ` Mike Oliphant
2021-01-18 19:19 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-18 17:54 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Here is the dmesg output with dyndbg enabled. It looks like it is failing
to find the clock source, and hence cannot obtain the valid sample rates.
It looks like it is finding the clock selector (id: 40), but
"uac_clock_selector_get_val()" is returning zero, and it never gets the
clock source (id: 41).
[ 229.641481] usb 2-1.3: new high-speed USB device number 9 using ehci-pci
[ 229.750316] usb 2-1.3: config 1 interface 3 altsetting 0 bulk endpoint
0x4 has invalid maxpacket 256
[ 229.750335] usb 2-1.3: config 1 interface 3 altsetting 0 bulk endpoint
0x83 has invalid maxpacket 256
[ 229.751432] usb 2-1.3: New USB device found, idVendor=1fc9,
idProduct=8260, bcdDevice= 1.00
[ 229.751452] usb 2-1.3: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[ 229.751459] usb 2-1.3: Product: NUX MG-300 AUDIO
[ 229.751464] usb 2-1.3: Manufacturer: NUX
[ 229.751468] usb 2-1.3: SerialNumber: 2008101346
[ 230.170840] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.170860] usb 2-1.3: parse_audio_format_rates_v2v3(): unable to find
clock source (clock -22)
[ 230.170871] usb 2-1.3: 1:1: found sync_ep=0x81, iface=1, alt=1,
implicit_fb=0
[ 230.170879] usb 2-1.3: 1:1: add audio endpoint 0x1
[ 230.170907] usb 2-1.3: Creating new data endpoint #1
[ 230.170915] usb 2-1.3: Creating new sync endpoint #81
[ 230.171181] usb 2-1.3: 1:1 Set sample rate 0, clock 40
[ 230.171408] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.171657] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.172463] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.172480] usb 2-1.3: parse_audio_format_rates_v2v3(): unable to find
clock source (clock -22)
[ 230.172490] usb 2-1.3: 2:1: add audio endpoint 0x82
[ 230.172512] usb 2-1.3: Creating new data endpoint #82
[ 230.172707] usb 2-1.3: 2:1 Set sample rate 0, clock 40
[ 230.172832] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.173079] usb 2-1.3: __uac_clock_find_source(): selector reported
illegal value, id 40, ret 0
[ 230.173442] usb 2-1.3: [10] FU [PCM Playback Switch] ch = 2, val = 0/1/1
[ 230.173450] usb 2-1.3: [10] FU [PCM Playback Switch] ch = 1, val = 0/1/1
[ 230.173949] usb 2-1.3: RANGE setting not yet supported
[ 230.174700] usb 2-1.3: [10] FU [PCM Playback Volume] ch = 2, val =
-16384/0/256
[ 230.175074] usb 2-1.3: RANGE setting not yet supported
[ 230.175823] usb 2-1.3: [10] FU [PCM Playback Volume] ch = 1, val =
-16384/0/256
[ 230.176631] usbcore: registered new interface driver snd-usb-audio
On Mon, Jan 18, 2021 at 8:33 AM Mike Oliphant <oliphant@nostatic.org> wrote:
> Thanks for the response. I'm running a very recent build of the master
> kernel tree (~ 5.11-rc2).
>
> I'll give dyndbg a try.
>
> Mike
>
> On Sun, Jan 17, 2021 at 11:43 PM Takashi Iwai <tiwai@suse.de> wrote:
>
>> On Sun, 17 Jan 2021 19:56:01 +0100,
>> Mike Oliphant wrote:
>> >
>> > I recently got a NUX MG-300 USB guitar fx interface with high hopes
>> that it
>> > would work in Linux. It is supposed to be class-compliant, and works in
>> iOS
>> > and macOS without a driver.
>> >
>> > Unfortunately, while it is recognized as a USB audio device by Linux,
>> it is
>> > not working.
>> >
>> > The core issue seems to be that "stream0" reports no playback rates.
>> dmesg
>> > also shows errors, including "__uac_clock_find_source(): selector
>> reported
>> > illegal value".
>> >
>> > Any help identifying the issue would be much appreciated. I have some
>> > experience troubleshooting the USB audio kernel code and am happy to try
>> > doing so if I can get a nudge in the right direction.
>> >
>> > Output from "stream0", dmesg, and lsusb follows.
>>
>> Did you try the latest 5.11-rc kernel? There have been lots of
>> changes in USB-audio and this might work better there.
>>
>> If it still doesn't work with 5.11-rc, please try to enable the debug
>> option, e.g. boot with snd_usb_audio.dyndbg=+p boot option, plug the
>> device, and get the kernel logs (at plugging and during the audio
>> operations).
>>
>>
>> thanks,
>>
>> Takashi
>>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 17:54 ` Mike Oliphant
@ 2021-01-18 19:19 ` Takashi Iwai
2021-01-18 21:15 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-18 19:19 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Mon, 18 Jan 2021 18:54:57 +0100,
Mike Oliphant wrote:
>
> Here is the dmesg output with dyndbg enabled. It looks like it is failing
> to find the clock source, and hence cannot obtain the valid sample rates.
>
> It looks like it is finding the clock selector (id: 40), but
> "uac_clock_selector_get_val()" is returning zero, and it never gets the
> clock source (id: 41).
Aha. Maybe the firmware doesn't expect it being asked as it's the
single connection.
Does the patch below help anything?
Takashi
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -298,6 +298,11 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip,
if (selector) {
int ret, i, cur;
+ if (selector->bNrInPins == 1) {
+ ret = 1;
+ goto find_source;
+ }
+
/* the entity ID we are looking for is a selector.
* find out what it currently selects */
ret = uac_clock_selector_get_val(chip, selector->bClockID);
@@ -314,6 +319,7 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip,
return -EINVAL;
}
+ find_source:
cur = ret;
ret = __uac_clock_find_source(chip, fmt,
selector->baCSourceID[ret - 1],
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 19:19 ` Takashi Iwai
@ 2021-01-18 21:15 ` Mike Oliphant
2021-01-18 21:59 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-18 21:15 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Progress - thanks for the patch!
That got rid of the clock errors, and the the device now reports a 48000
sample rate, which is correct.
Unfortunately, it still isn't working properly. Playback doesn't seem to
work at all. Capture kind of works - it does record, but the audio is
extremely noisy.
Here is the current dmesg output when the device is connected.
Notable is the error "No valid sample rate available for 1:1, assuming a
firmware bug".
Also notable is "1:1 Set sample rate 48000, clock 40" - where "40" is the
id of the clock selector - "41" is the id of the actual clock source. So
maybe something is still getting wired up wrong?
[ 418.366449] usb 3-1.2: new high-speed USB device number 6 using ehci-pci
[ 418.479099] usb 3-1.2: config 1 interface 3 altsetting 0 bulk endpoint
0x4 has invalid maxpacket 256
[ 418.479118] usb 3-1.2: config 1 interface 3 altsetting 0 bulk endpoint
0x83 has invalid maxpacket 256
[ 418.480085] usb 3-1.2: New USB device found, idVendor=1fc9,
idProduct=8260, bcdDevice= 1.00
[ 418.480100] usb 3-1.2: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[ 418.480107] usb 3-1.2: Product: NUX MG-300 AUDIO
[ 418.480112] usb 3-1.2: Manufacturer: NUX
[ 418.480117] usb 3-1.2: SerialNumber: 2008101346
[ 418.482025] usb 3-1.2: No valid sample rate available for 1:1, assuming
a firmware bug
[ 418.482041] usb 3-1.2: 1:1: found sync_ep=0x81, iface=1, alt=1,
implicit_fb=0
[ 418.482049] usb 3-1.2: 1:1: add audio endpoint 0x1
[ 418.482078] usb 3-1.2: Creating new data endpoint #1
[ 418.482086] usb 3-1.2: Creating new sync endpoint #81
[ 418.482666] usb 3-1.2: 1:1 Set sample rate 48000, clock 40
[ 418.484525] usb 3-1.2: No valid sample rate available for 2:1, assuming
a firmware bug
[ 418.484545] usb 3-1.2: 2:1: add audio endpoint 0x82
[ 418.484584] usb 3-1.2: Creating new data endpoint #82
[ 418.484899] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.485800] usb 3-1.2: [10] FU [PCM Playback Switch] ch = 2, val = 0/1/1
[ 418.485822] usb 3-1.2: [10] FU [PCM Playback Switch] ch = 1, val = 0/1/1
[ 418.486484] usb 3-1.2: RANGE setting not yet supported
[ 418.487402] usb 3-1.2: [10] FU [PCM Playback Volume] ch = 2, val =
-16384/0/256
[ 418.487899] usb 3-1.2: RANGE setting not yet supported
[ 418.488774] usb 3-1.2: [10] FU [PCM Playback Volume] ch = 1, val =
-16384/0/256
[ 418.541357] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.541363] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.541367] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.541524] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.542000] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.542007] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.542009] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.545012] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.545018] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.545157] usb 3-1.2: EP 0x82 closed
[ 418.545620] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.545624] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.545627] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.545893] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.546257] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.546263] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.546266] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.546841] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.546845] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.547052] usb 3-1.2: EP 0x82 closed
[ 418.547467] usb 3-1.2: Open EP 0x1, iface=1:1, idx=0
[ 418.547470] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.547473] usb 3-1.2: Open EP 0x81, iface=1:1, idx=1
[ 418.547476] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.547478] usb 3-1.2: Setting usb interface 1:0 for EP 0x1
[ 418.547643] usb 3-1.2: 1:1 Set sample rate 48000, clock 40
[ 418.548129] usb 3-1.2: Setting params for data EP 0x1, pipe 0x8600
[ 418.548143] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.548146] usb 3-1.2: Setting usb interface 1:1 for EP 0x1
[ 418.548420] usb 3-1.2: Setting params for sync EP 0x81, pipe 0x8680
[ 418.548425] usb 3-1.2: Set up 4 URBS, ret=0
[ 418.548443] usb 3-1.2: Starting data EP 0x1 (running 0)
[ 418.548474] usb 3-1.2: 12 URBs submitted for EP 0x1
[ 418.548477] usb 3-1.2: Starting sync EP 0x81 (running 0)
[ 418.548487] usb 3-1.2: 4 URBs submitted for EP 0x81
[ 418.549724] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.549729] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.549732] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.549888] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.550256] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.550259] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.550261] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.550455] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.550460] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.550659] usb 3-1.2: EP 0x82 closed
[ 418.551298] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.551303] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.551307] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.551528] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.552021] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.552028] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.552031] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.552168] usb 3-1.2: Stopping sync EP 0x81 (running 1)
[ 418.552174] usb 3-1.2: Stopping data EP 0x1 (running 1)
[ 418.566466] usb 3-1.2: Closing EP 0x1 (count 1)
[ 418.566472] usb 3-1.2: Setting usb interface 1:0 for EP 0x1
[ 418.566772] usb 3-1.2: EP 0x1 closed
[ 418.566775] usb 3-1.2: Closing EP 0x81 (count 1)
[ 418.566777] usb 3-1.2: Setting usb interface 1:0 for EP 0x81
[ 418.566954] usb 3-1.2: EP 0x81 closed
[ 418.567038] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.567040] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.567257] usb 3-1.2: EP 0x82 closed
[ 418.573720] usb 3-1.2: Open EP 0x1, iface=1:1, idx=0
[ 418.573724] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.573727] usb 3-1.2: Open EP 0x81, iface=1:1, idx=1
[ 418.573729] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.573732] usb 3-1.2: Setting usb interface 1:0 for EP 0x1
[ 418.573927] usb 3-1.2: 1:1 Set sample rate 48000, clock 40
[ 418.574564] usb 3-1.2: Setting params for data EP 0x1, pipe 0x8600
[ 418.574570] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.574572] usb 3-1.2: Setting usb interface 1:1 for EP 0x1
[ 418.574659] usb 3-1.2: Setting params for sync EP 0x81, pipe 0x8680
[ 418.574662] usb 3-1.2: Set up 4 URBS, ret=0
[ 418.574676] usb 3-1.2: Starting data EP 0x1 (running 0)
[ 418.574700] usb 3-1.2: 12 URBs submitted for EP 0x1
[ 418.574701] usb 3-1.2: Starting sync EP 0x81 (running 0)
[ 418.574709] usb 3-1.2: 4 URBs submitted for EP 0x81
[ 418.575117] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.575120] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.575123] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.575384] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.575916] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.575926] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.575928] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.576065] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.576069] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.576171] usb 3-1.2: EP 0x82 closed
[ 418.576574] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.576578] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=9592, periods=4, implicit_fb=0
[ 418.576581] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.576632] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.577128] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.577132] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.577134] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.577404] usb 3-1.2: Stopping sync EP 0x81 (running 1)
[ 418.577408] usb 3-1.2: Stopping data EP 0x1 (running 1)
[ 418.594462] usb 3-1.2: Closing EP 0x1 (count 1)
[ 418.594469] usb 3-1.2: Setting usb interface 1:0 for EP 0x1
[ 418.594806] usb 3-1.2: EP 0x1 closed
[ 418.594810] usb 3-1.2: Closing EP 0x81 (count 1)
[ 418.594812] usb 3-1.2: Setting usb interface 1:0 for EP 0x81
[ 418.595093] usb 3-1.2: EP 0x81 closed
[ 418.595187] usb 3-1.2: Closing EP 0x82 (count 1)
[ 418.595189] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.595520] usb 3-1.2: EP 0x82 closed
[ 418.610935] usb 3-1.2: Open EP 0x1, iface=1:1, idx=0
[ 418.610943] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=384000, periods=2, implicit_fb=0
[ 418.610946] usb 3-1.2: Open EP 0x81, iface=1:1, idx=1
[ 418.610949] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=384000, periods=2, implicit_fb=0
[ 418.610952] usb 3-1.2: Setting usb interface 1:0 for EP 0x1
[ 418.611223] usb 3-1.2: 1:1 Set sample rate 48000, clock 40
[ 418.611990] usb 3-1.2: Setting params for data EP 0x1, pipe 0x8600
[ 418.612013] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.612020] usb 3-1.2: Setting usb interface 1:1 for EP 0x1
[ 418.612281] usb 3-1.2: Setting params for sync EP 0x81, pipe 0x8680
[ 418.612285] usb 3-1.2: Set up 4 URBS, ret=0
[ 418.612363] usb 3-1.2: Starting data EP 0x1 (running 0)
[ 418.612389] usb 3-1.2: 12 URBs submitted for EP 0x1
[ 418.612390] usb 3-1.2: Starting sync EP 0x81 (running 0)
[ 418.612397] usb 3-1.2: 4 URBs submitted for EP 0x81
[ 418.613337] usb 3-1.2: 1:1 Start Playback PCM
[ 418.613810] usb 3-1.2: Open EP 0x82, iface=2:1, idx=0
[ 418.613813] usb 3-1.2: channels=2, rate=48000, format=S32_LE,
period_bytes=384000, periods=2, implicit_fb=0
[ 418.613815] usb 3-1.2: Setting usb interface 2:0 for EP 0x82
[ 418.614078] usb 3-1.2: 2:1 Set sample rate 48000, clock 40
[ 418.614639] usb 3-1.2: Setting params for data EP 0x82, pipe 0x10680
[ 418.614648] usb 3-1.2: Set up 12 URBS, ret=0
[ 418.614653] usb 3-1.2: Setting usb interface 2:1 for EP 0x82
[ 418.615844] usb 3-1.2: Starting data EP 0x82 (running 0)
[ 418.615879] usb 3-1.2: 12 URBs submitted for EP 0x82
[ 418.615882] usb 3-1.2: 2:1 Start Capture PCM
On Mon, Jan 18, 2021 at 11:19 AM Takashi Iwai <tiwai@suse.de> wrote:
> On Mon, 18 Jan 2021 18:54:57 +0100,
> Mike Oliphant wrote:
> >
> > Here is the dmesg output with dyndbg enabled. It looks like it is failing
> > to find the clock source, and hence cannot obtain the valid sample rates.
> >
> > It looks like it is finding the clock selector (id: 40), but
> > "uac_clock_selector_get_val()" is returning zero, and it never gets the
> > clock source (id: 41).
>
> Aha. Maybe the firmware doesn't expect it being asked as it's the
> single connection.
>
> Does the patch below help anything?
>
>
> Takashi
>
> --- a/sound/usb/clock.c
> +++ b/sound/usb/clock.c
> @@ -298,6 +298,11 @@ static int __uac_clock_find_source(struct
> snd_usb_audio *chip,
> if (selector) {
> int ret, i, cur;
>
> + if (selector->bNrInPins == 1) {
> + ret = 1;
> + goto find_source;
> + }
> +
> /* the entity ID we are looking for is a selector.
> * find out what it currently selects */
> ret = uac_clock_selector_get_val(chip, selector->bClockID);
> @@ -314,6 +319,7 @@ static int __uac_clock_find_source(struct
> snd_usb_audio *chip,
> return -EINVAL;
> }
>
> + find_source:
> cur = ret;
> ret = __uac_clock_find_source(chip, fmt,
> selector->baCSourceID[ret -
> 1],
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 21:15 ` Mike Oliphant
@ 2021-01-18 21:59 ` Takashi Iwai
2021-01-19 0:26 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-18 21:59 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Mon, 18 Jan 2021 22:15:26 +0100,
Mike Oliphant wrote:
>
> Progress - thanks for the patch!
>
> That got rid of the clock errors, and the the device now reports a 48000
> sample rate, which is correct.
>
> Unfortunately, it still isn't working properly. Playback doesn't seem to work
> at all. Capture kind of works - it does record, but the audio is extremely
> noisy.
>
> Here is the current dmesg output when the device is connected.
>
> Notable is the error "No valid sample rate available for 1:1, assuming a
> firmware bug".
>
> Also notable is "1:1 Set sample rate 48000, clock 40" - where "40" is the id
> of the clock selector - "41" is the id of the actual clock source. So maybe
> something is still getting wired up wrong?
OK, how about the one below instead?
Takashi
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -298,6 +298,12 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip,
if (selector) {
int ret, i, cur;
+ if (selector->bNrInPins == 1) {
+ uac_clock_selector_set_val(chip, selector->bClockID, 1);
+ ret = 1;
+ goto find_source;
+ }
+
/* the entity ID we are looking for is a selector.
* find out what it currently selects */
ret = uac_clock_selector_get_val(chip, selector->bClockID);
@@ -314,6 +320,7 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip,
return -EINVAL;
}
+ find_source:
cur = ret;
ret = __uac_clock_find_source(chip, fmt,
selector->baCSourceID[ret - 1],
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-18 21:59 ` Takashi Iwai
@ 2021-01-19 0:26 ` Mike Oliphant
2021-01-19 9:05 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-19 0:26 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Unfortunately, the "uac_clock_selector_set_val()" call does not seem to
change anything.
From doing some more testing, I think that the references to clock id "40"
are ok - it has "40" stored in fmt->clock, but when it uses it,
"__uac_clock_find_source()" gets called and it resolved to the actual clock
source - "41".
Not sure about the "No valid sample rate available for 1:1, assuming a
firmware bug" error, but I suspect it is spurious.
"check_valid_altsetting_v2v3()" is failing for some reason, but it is
ignoring the error.
Playback is completely silent, but the system seems to think it is working.
No apparent errors, and a play operation seems to take the correct amount
of time. Just no audio.
Maybe it is a mixer issue? mixer.c is putting out "RANGE setting not yet
supported" errors on startup.
Here is a sample of dmesg output for a playback session:
[ 4748.260975] usb 1-1.3: Open EP 0x1, iface=1:1, idx=0
[ 4748.260983] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
period_bytes=48000, periods=4, implicit_fb=0
[ 4748.260988] usb 1-1.3: Open EP 0x81, iface=1:1, idx=1
[ 4748.260992] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
period_bytes=48000, periods=4, implicit_fb=0
[ 4748.260996] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
[ 4748.261320] usb 1-1.3: 1:1 Set sample rate 48000, clock 40
[ 4748.261873] usb 1-1.3: Setting params for data EP 0x1, pipe 0x9d00
[ 4748.261890] usb 1-1.3: Set up 12 URBS, ret=0
[ 4748.261897] usb 1-1.3: Setting usb interface 1:1 for EP 0x1
[ 4748.262097] usb 1-1.3: Setting params for sync EP 0x81, pipe 0x9d80
[ 4748.262105] usb 1-1.3: Set up 4 URBS, ret=0
[ 4748.262147] usb 1-1.3: Starting data EP 0x1 (running 0)
[ 4748.262180] usb 1-1.3: 12 URBs submitted for EP 0x1
[ 4748.262183] usb 1-1.3: Starting sync EP 0x81 (running 0)
[ 4748.262193] usb 1-1.3: 4 URBs submitted for EP 0x81
[ 4748.262311] usb 1-1.3: 1:1 Start Playback PCM
[ 4762.887812] usb 1-1.3: Stopping sync EP 0x81 (running 1)
[ 4762.887836] usb 1-1.3: Stopping data EP 0x1 (running 1)
[ 4762.887849] usb 1-1.3: 1:1 Stop Playback PCM
[ 4762.902542] usb 1-1.3: Closing EP 0x1 (count 1)
[ 4762.902549] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
[ 4762.902915] usb 1-1.3: EP 0x1 closed
[ 4762.902928] usb 1-1.3: Closing EP 0x81 (count 1)
[ 4762.902935] usb 1-1.3: Setting usb interface 1:0 for EP 0x81
[ 4762.903179] usb 1-1.3: EP 0x81 closed
On Mon, Jan 18, 2021 at 1:59 PM Takashi Iwai <tiwai@suse.de> wrote:
> On Mon, 18 Jan 2021 22:15:26 +0100,
> Mike Oliphant wrote:
> >
> > Progress - thanks for the patch!
> >
> > That got rid of the clock errors, and the the device now reports a 48000
> > sample rate, which is correct.
> >
> > Unfortunately, it still isn't working properly. Playback doesn't seem to
> work
> > at all. Capture kind of works - it does record, but the audio is
> extremely
> > noisy.
> >
> > Here is the current dmesg output when the device is connected.
> >
> > Notable is the error "No valid sample rate available for 1:1, assuming a
> > firmware bug".
> >
> > Also notable is "1:1 Set sample rate 48000, clock 40" - where "40" is
> the id
> > of the clock selector - "41" is the id of the actual clock source. So
> maybe
> > something is still getting wired up wrong?
>
> OK, how about the one below instead?
>
>
> Takashi
>
> --- a/sound/usb/clock.c
> +++ b/sound/usb/clock.c
> @@ -298,6 +298,12 @@ static int __uac_clock_find_source(struct
> snd_usb_audio *chip,
> if (selector) {
> int ret, i, cur;
>
> + if (selector->bNrInPins == 1) {
> + uac_clock_selector_set_val(chip,
> selector->bClockID, 1);
> + ret = 1;
> + goto find_source;
> + }
> +
> /* the entity ID we are looking for is a selector.
> * find out what it currently selects */
> ret = uac_clock_selector_get_val(chip, selector->bClockID);
> @@ -314,6 +320,7 @@ static int __uac_clock_find_source(struct
> snd_usb_audio *chip,
> return -EINVAL;
> }
>
> + find_source:
> cur = ret;
> ret = __uac_clock_find_source(chip, fmt,
> selector->baCSourceID[ret -
> 1],
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-19 0:26 ` Mike Oliphant
@ 2021-01-19 9:05 ` Takashi Iwai
2021-01-19 17:40 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-19 9:05 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Tue, 19 Jan 2021 01:26:51 +0100,
Mike Oliphant wrote:
>
> Unfortunately, the "uac_clock_selector_set_val()" call does not seem to
> change anything.
OK,
> >From doing some more testing, I think that the references to clock id "40"
> are ok - it has "40" stored in fmt->clock, but when it uses it,
> "__uac_clock_find_source()" gets called and it resolved to the actual clock
> source - "41".
>
> Not sure about the "No valid sample rate available for 1:1, assuming a
> firmware bug" error, but I suspect it is spurious.
> "check_valid_altsetting_v2v3()" is failing for some reason, but it is
> ignoring the error.
Yes, that's the part where verifying the altsetting for the given
rate. The UAC2 device must return the valid altsetting bit mask for
the current rate in the request, but your device didn't seem returning
it. The code is there for devices like MOTU that have multiple
altsets where each one has one sample rate exclusively.
> Playback is completely silent, but the system seems to think it is working.
> No apparent errors, and a play operation seems to take the correct amount
> of time. Just no audio.
Check the status in /proc/asound/card*/pcm*/sub*/status. If the
pointer moves forward and the position is expected, at least the data
feed is done, and the problem must be something else.
What about the capture? Do you get also only silence?
> Maybe it is a mixer issue? mixer.c is putting out "RANGE setting not yet
> supported" errors on startup.
That's probably no problem, I guess it comes from the code trying to
get the resolution. The patch below may paper over it.
> Here is a sample of dmesg output for a playback session:
>
> [ 4748.260975] usb 1-1.3: Open EP 0x1, iface=1:1, idx=0
> [ 4748.260983] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
> period_bytes=48000, periods=4, implicit_fb=0
> [ 4748.260988] usb 1-1.3: Open EP 0x81, iface=1:1, idx=1
> [ 4748.260992] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
> period_bytes=48000, periods=4, implicit_fb=0
> [ 4748.260996] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
> [ 4748.261320] usb 1-1.3: 1:1 Set sample rate 48000, clock 40
> [ 4748.261873] usb 1-1.3: Setting params for data EP 0x1, pipe 0x9d00
> [ 4748.261890] usb 1-1.3: Set up 12 URBS, ret=0
> [ 4748.261897] usb 1-1.3: Setting usb interface 1:1 for EP 0x1
> [ 4748.262097] usb 1-1.3: Setting params for sync EP 0x81, pipe 0x9d80
> [ 4748.262105] usb 1-1.3: Set up 4 URBS, ret=0
> [ 4748.262147] usb 1-1.3: Starting data EP 0x1 (running 0)
> [ 4748.262180] usb 1-1.3: 12 URBs submitted for EP 0x1
> [ 4748.262183] usb 1-1.3: Starting sync EP 0x81 (running 0)
> [ 4748.262193] usb 1-1.3: 4 URBs submitted for EP 0x81
> [ 4748.262311] usb 1-1.3: 1:1 Start Playback PCM
> [ 4762.887812] usb 1-1.3: Stopping sync EP 0x81 (running 1)
> [ 4762.887836] usb 1-1.3: Stopping data EP 0x1 (running 1)
> [ 4762.887849] usb 1-1.3: 1:1 Stop Playback PCM
> [ 4762.902542] usb 1-1.3: Closing EP 0x1 (count 1)
> [ 4762.902549] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
> [ 4762.902915] usb 1-1.3: EP 0x1 closed
> [ 4762.902928] usb 1-1.3: Closing EP 0x81 (count 1)
> [ 4762.902935] usb 1-1.3: Setting usb interface 1:0 for EP 0x81
> [ 4762.903179] usb 1-1.3: EP 0x81 closed
The flow looks good judging from this log, at least.
The device is configured with the dedicated sync endpoint, but it's
not with the implicit feedback mode. It's interesting whether the
device behaves differently if you load snd-usb-audio module with
implicit_fb=1 boot option. I don't expect it working better, but
anyway...
Takashi
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -1238,7 +1238,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
(cval->control << 8) | minchn,
&cval->res) < 0) {
cval->res = 1;
- } else {
+ } else if (cval->head.mixer->protocol == UAC_VERSION_1) {
int last_valid_res = cval->res;
while (cval->res > 1) {
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-19 9:05 ` Takashi Iwai
@ 2021-01-19 17:40 ` Mike Oliphant
2021-01-20 14:33 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-19 17:40 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Your mixer.c patch does get rid of the RANGE errors. No change to behavior,
though.
I'd already tried setting "implicit_fb=1" even though I didn't expect it to
work, since there is a separate feedback endpoint. I just tried it again -
it doesn't seem to hurt anything, but it doesn't help either.
Capture seems to be working perfectly with the clock patch - I'm not sure
why I was initially getting noisy input.
I checked "/proc/asound/card*/pcm*/sub*/status" during playback, and the
pointer seems to be moving forward as it should. All indications are that
the system thinks playback is working fine.
One interesting piece of information - alsamixer shows two stereo outputs
("pcm" and "pcm1"). Not sure why there are two - maybe output is going to
the wrong one?
Here is the output from "/proc/asound/AUDIO/usbmixer":
USB Mixer: usb_id=0x1fc98260, ctrlif=0, ctlerr=0
Card: NUX NUX MG-300 AUDIO at usb-0000:00:1a.7-1.3, high speed
Unit: 10
Control: name="PCM Playback Volume", index=1
Info: id=10, control=2, cmask=0x0, channels=1, type="S16"
Volume: min=-16384, max=0, dBmin=-6400, dBmax=0
Unit: 10
Control: name="PCM Playback Volume", index=0
Info: id=10, control=2, cmask=0x3, channels=2, type="S16"
Volume: min=-16384, max=0, dBmin=-6400, dBmax=0
Unit: 10
Control: name="PCM Playback Switch", index=1
Info: id=10, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
Unit: 10
Control: name="PCM Playback Switch", index=0
Info: id=10, control=1, cmask=0x3, channels=2, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
Unit: 41
Control: name="Clock Source 41 Validity", index=0
Info: id=41, control=2, cmask=0x0, channels=1, type="BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
Mike
On Tue, Jan 19, 2021 at 1:05 AM Takashi Iwai <tiwai@suse.de> wrote:
> On Tue, 19 Jan 2021 01:26:51 +0100,
> Mike Oliphant wrote:
> >
> > Unfortunately, the "uac_clock_selector_set_val()" call does not seem to
> > change anything.
>
> OK,
>
> > >From doing some more testing, I think that the references to clock id
> "40"
> > are ok - it has "40" stored in fmt->clock, but when it uses it,
> > "__uac_clock_find_source()" gets called and it resolved to the actual
> clock
> > source - "41".
> >
> > Not sure about the "No valid sample rate available for 1:1, assuming a
> > firmware bug" error, but I suspect it is spurious.
> > "check_valid_altsetting_v2v3()" is failing for some reason, but it is
> > ignoring the error.
>
> Yes, that's the part where verifying the altsetting for the given
> rate. The UAC2 device must return the valid altsetting bit mask for
> the current rate in the request, but your device didn't seem returning
> it. The code is there for devices like MOTU that have multiple
> altsets where each one has one sample rate exclusively.
>
> > Playback is completely silent, but the system seems to think it is
> working.
> > No apparent errors, and a play operation seems to take the correct amount
> > of time. Just no audio.
>
> Check the status in /proc/asound/card*/pcm*/sub*/status. If the
> pointer moves forward and the position is expected, at least the data
> feed is done, and the problem must be something else.
>
> What about the capture? Do you get also only silence?
>
> > Maybe it is a mixer issue? mixer.c is putting out "RANGE setting not yet
> > supported" errors on startup.
>
> That's probably no problem, I guess it comes from the code trying to
> get the resolution. The patch below may paper over it.
>
> > Here is a sample of dmesg output for a playback session:
> >
> > [ 4748.260975] usb 1-1.3: Open EP 0x1, iface=1:1, idx=0
> > [ 4748.260983] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
> > period_bytes=48000, periods=4, implicit_fb=0
> > [ 4748.260988] usb 1-1.3: Open EP 0x81, iface=1:1, idx=1
> > [ 4748.260992] usb 1-1.3: channels=2, rate=48000, format=S32_LE,
> > period_bytes=48000, periods=4, implicit_fb=0
> > [ 4748.260996] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
> > [ 4748.261320] usb 1-1.3: 1:1 Set sample rate 48000, clock 40
> > [ 4748.261873] usb 1-1.3: Setting params for data EP 0x1, pipe 0x9d00
> > [ 4748.261890] usb 1-1.3: Set up 12 URBS, ret=0
> > [ 4748.261897] usb 1-1.3: Setting usb interface 1:1 for EP 0x1
> > [ 4748.262097] usb 1-1.3: Setting params for sync EP 0x81, pipe 0x9d80
> > [ 4748.262105] usb 1-1.3: Set up 4 URBS, ret=0
> > [ 4748.262147] usb 1-1.3: Starting data EP 0x1 (running 0)
> > [ 4748.262180] usb 1-1.3: 12 URBs submitted for EP 0x1
> > [ 4748.262183] usb 1-1.3: Starting sync EP 0x81 (running 0)
> > [ 4748.262193] usb 1-1.3: 4 URBs submitted for EP 0x81
> > [ 4748.262311] usb 1-1.3: 1:1 Start Playback PCM
> > [ 4762.887812] usb 1-1.3: Stopping sync EP 0x81 (running 1)
> > [ 4762.887836] usb 1-1.3: Stopping data EP 0x1 (running 1)
> > [ 4762.887849] usb 1-1.3: 1:1 Stop Playback PCM
> > [ 4762.902542] usb 1-1.3: Closing EP 0x1 (count 1)
> > [ 4762.902549] usb 1-1.3: Setting usb interface 1:0 for EP 0x1
> > [ 4762.902915] usb 1-1.3: EP 0x1 closed
> > [ 4762.902928] usb 1-1.3: Closing EP 0x81 (count 1)
> > [ 4762.902935] usb 1-1.3: Setting usb interface 1:0 for EP 0x81
> > [ 4762.903179] usb 1-1.3: EP 0x81 closed
>
> The flow looks good judging from this log, at least.
>
> The device is configured with the dedicated sync endpoint, but it's
> not with the implicit feedback mode. It's interesting whether the
> device behaves differently if you load snd-usb-audio module with
> implicit_fb=1 boot option. I don't expect it working better, but
> anyway...
>
>
> Takashi
>
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -1238,7 +1238,7 @@ static int get_min_max_with_quirks(struct
> usb_mixer_elem_info *cval,
> (cval->control << 8) | minchn,
> &cval->res) < 0) {
> cval->res = 1;
> - } else {
> + } else if (cval->head.mixer->protocol == UAC_VERSION_1) {
> int last_valid_res = cval->res;
>
> while (cval->res > 1) {
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-19 17:40 ` Mike Oliphant
@ 2021-01-20 14:33 ` Takashi Iwai
2021-01-20 21:17 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-20 14:33 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Tue, 19 Jan 2021 18:40:04 +0100,
Mike Oliphant wrote:
>
> Your mixer.c patch does get rid of the RANGE errors. No change to behavior,
> though.
>
> I'd already tried setting "implicit_fb=1" even though I didn't expect it to
> work, since there is a separate feedback endpoint. I just tried it again - it
> doesn't seem to hurt anything, but it doesn't help either.
>
> Capture seems to be working perfectly with the clock patch - I'm not sure why
> I was initially getting noisy input.
>
> I checked "/proc/asound/card*/pcm*/sub*/status" during playback, and the
> pointer seems to be moving forward as it should. All indications are that the
> system thinks playback is working fine.
>
> One interesting piece of information - alsamixer shows two stereo outputs
> ("pcm" and "pcm1"). Not sure why there are two - maybe output is going to the
> wrong one?
You might need to unmute and increase both. The first one should be a
master volume/switch while the second one is for the stereo channels.
Naming the mixer elements properly for USB-audio is a really tough
task. Many firmware don't set the right strings and a guess work
doesn't fit to all. But certainly there are some rooms for
improvements there.
Takashi
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-20 14:33 ` Takashi Iwai
@ 2021-01-20 21:17 ` Mike Oliphant
2021-01-20 21:38 ` Takashi Iwai
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-20 21:17 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
I spent a fair bit of time debugging the code setting/getting mixer control
values, and I can't see anything that seems to be operating incorrectly.
Unless you have any other suggestions, I'm going to admit defeat and return
the audio interface.
It is probably worth committing the clock selector patch - it at least made
capture work, and it may help with other audio interfaces.
Thanks for your help,
Mike
On Wed, Jan 20, 2021 at 6:33 AM Takashi Iwai <tiwai@suse.de> wrote:
> On Tue, 19 Jan 2021 18:40:04 +0100,
> Mike Oliphant wrote:
> >
> > Your mixer.c patch does get rid of the RANGE errors. No change to
> behavior,
> > though.
> >
> > I'd already tried setting "implicit_fb=1" even though I didn't expect it
> to
> > work, since there is a separate feedback endpoint. I just tried it again
> - it
> > doesn't seem to hurt anything, but it doesn't help either.
> >
> > Capture seems to be working perfectly with the clock patch - I'm not
> sure why
> > I was initially getting noisy input.
> >
> > I checked "/proc/asound/card*/pcm*/sub*/status" during playback, and the
> > pointer seems to be moving forward as it should. All indications are
> that the
> > system thinks playback is working fine.
> >
> > One interesting piece of information - alsamixer shows two stereo outputs
> > ("pcm" and "pcm1"). Not sure why there are two - maybe output is going
> to the
> > wrong one?
>
> You might need to unmute and increase both. The first one should be a
> master volume/switch while the second one is for the stereo channels.
>
> Naming the mixer elements properly for USB-audio is a really tough
> task. Many firmware don't set the right strings and a guess work
> doesn't fit to all. But certainly there are some rooms for
> improvements there.
>
>
> Takashi
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-20 21:17 ` Mike Oliphant
@ 2021-01-20 21:38 ` Takashi Iwai
2021-01-20 21:47 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Takashi Iwai @ 2021-01-20 21:38 UTC (permalink / raw)
To: Mike Oliphant; +Cc: alsa-devel
On Wed, 20 Jan 2021 22:17:35 +0100,
Mike Oliphant wrote:
>
> I spent a fair bit of time debugging the code setting/getting mixer control
> values, and I can't see anything that seems to be operating incorrectly.
So, even if you unmute and raise both mixers, it didn't help, right?
I took a look at the lsusb output, but I couldn't find anything else
suspicious.
> Unless you have any other suggestions, I'm going to admit defeat and return
> the audio interface.
>
> It is probably worth committing the clock selector patch - it at least made
> capture work, and it may help with other audio interfaces.
OK, I'll submit two fix patches.
thanks,
Takashi
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-20 21:38 ` Takashi Iwai
@ 2021-01-20 21:47 ` Mike Oliphant
2021-01-21 19:04 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-20 21:47 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Yeah, I tried every possible permutation of mute/volumes on the mixer
controls.
Thanks for submitting the patches. Maybe someone else will have better luck
down the road.
Mike
On Wed, Jan 20, 2021 at 1:38 PM Takashi Iwai <tiwai@suse.de> wrote:
> On Wed, 20 Jan 2021 22:17:35 +0100,
> Mike Oliphant wrote:
> >
> > I spent a fair bit of time debugging the code setting/getting mixer
> control
> > values, and I can't see anything that seems to be operating incorrectly.
>
> So, even if you unmute and raise both mixers, it didn't help, right?
> I took a look at the lsusb output, but I couldn't find anything else
> suspicious.
>
> > Unless you have any other suggestions, I'm going to admit defeat and
> return
> > the audio interface.
> >
> > It is probably worth committing the clock selector patch - it at least
> made
> > capture work, and it may help with other audio interfaces.
>
> OK, I'll submit two fix patches.
>
>
> thanks,
>
> Takashi
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-20 21:47 ` Mike Oliphant
@ 2021-01-21 19:04 ` Mike Oliphant
2021-01-21 20:18 ` Mike Oliphant
0 siblings, 1 reply; 16+ messages in thread
From: Mike Oliphant @ 2021-01-21 19:04 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
As a last ditch effort before returning the device, I tried the clock patch
on a Raspberry Pi 4 running an older kernel, and... it works.
The kernel version is "Linux raspberrypi 4.19.89-v7l+" and is from late
February 2020.
Maybe a change between then and now broke something? I know there have been
a *lot* of changes since then, though...
Mike
On Wed, Jan 20, 2021 at 1:47 PM Mike Oliphant <oliphant@nostatic.org> wrote:
> Yeah, I tried every possible permutation of mute/volumes on the mixer
> controls.
>
> Thanks for submitting the patches. Maybe someone else will have better
> luck down the road.
>
> Mike
>
> On Wed, Jan 20, 2021 at 1:38 PM Takashi Iwai <tiwai@suse.de> wrote:
>
>> On Wed, 20 Jan 2021 22:17:35 +0100,
>> Mike Oliphant wrote:
>> >
>> > I spent a fair bit of time debugging the code setting/getting mixer
>> control
>> > values, and I can't see anything that seems to be operating incorrectly.
>>
>> So, even if you unmute and raise both mixers, it didn't help, right?
>> I took a look at the lsusb output, but I couldn't find anything else
>> suspicious.
>>
>> > Unless you have any other suggestions, I'm going to admit defeat and
>> return
>> > the audio interface.
>> >
>> > It is probably worth committing the clock selector patch - it at least
>> made
>> > capture work, and it may help with other audio interfaces.
>>
>> OK, I'll submit two fix patches.
>>
>>
>> thanks,
>>
>> Takashi
>>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Support for NUX MG-300 USB interface
2021-01-21 19:04 ` Mike Oliphant
@ 2021-01-21 20:18 ` Mike Oliphant
0 siblings, 0 replies; 16+ messages in thread
From: Mike Oliphant @ 2021-01-21 20:18 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
After some more testing, it seems to be working inconsistently on my
Raspberry Pi. Sometimes it works perfectly, sometimes only capture works,
and sometimes only playback works.
The behavior seems reminiscent of some of the problems with implicit
feedback devices which have now been fixed.
Mike
On Thu, Jan 21, 2021 at 11:04 AM Mike Oliphant <oliphant@nostatic.org>
wrote:
> As a last ditch effort before returning the device, I tried the clock
> patch on a Raspberry Pi 4 running an older kernel, and... it works.
>
> The kernel version is "Linux raspberrypi 4.19.89-v7l+" and is from late
> February 2020.
>
> Maybe a change between then and now broke something? I know there have
> been a *lot* of changes since then, though...
>
> Mike
>
> On Wed, Jan 20, 2021 at 1:47 PM Mike Oliphant <oliphant@nostatic.org>
> wrote:
>
>> Yeah, I tried every possible permutation of mute/volumes on the mixer
>> controls.
>>
>> Thanks for submitting the patches. Maybe someone else will have better
>> luck down the road.
>>
>> Mike
>>
>> On Wed, Jan 20, 2021 at 1:38 PM Takashi Iwai <tiwai@suse.de> wrote:
>>
>>> On Wed, 20 Jan 2021 22:17:35 +0100,
>>> Mike Oliphant wrote:
>>> >
>>> > I spent a fair bit of time debugging the code setting/getting mixer
>>> control
>>> > values, and I can't see anything that seems to be operating
>>> incorrectly.
>>>
>>> So, even if you unmute and raise both mixers, it didn't help, right?
>>> I took a look at the lsusb output, but I couldn't find anything else
>>> suspicious.
>>>
>>> > Unless you have any other suggestions, I'm going to admit defeat and
>>> return
>>> > the audio interface.
>>> >
>>> > It is probably worth committing the clock selector patch - it at least
>>> made
>>> > capture work, and it may help with other audio interfaces.
>>>
>>> OK, I'll submit two fix patches.
>>>
>>>
>>> thanks,
>>>
>>> Takashi
>>>
>>
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2021-01-21 20:19 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-17 18:56 Support for NUX MG-300 USB interface Mike Oliphant
2021-01-18 7:43 ` Takashi Iwai
2021-01-18 16:33 ` Mike Oliphant
2021-01-18 17:54 ` Mike Oliphant
2021-01-18 19:19 ` Takashi Iwai
2021-01-18 21:15 ` Mike Oliphant
2021-01-18 21:59 ` Takashi Iwai
2021-01-19 0:26 ` Mike Oliphant
2021-01-19 9:05 ` Takashi Iwai
2021-01-19 17:40 ` Mike Oliphant
2021-01-20 14:33 ` Takashi Iwai
2021-01-20 21:17 ` Mike Oliphant
2021-01-20 21:38 ` Takashi Iwai
2021-01-20 21:47 ` Mike Oliphant
2021-01-21 19:04 ` Mike Oliphant
2021-01-21 20:18 ` Mike Oliphant
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.