Skip to contentSkip to conversation

ALSA: usb-audio: allow -EPIPE errors for some v2 messages

PATCH In review Greg Kroah-Hartman 2 participants 12 messages Oct 10, 2021 – Oct 14, 2021

Subsystems (2)
lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

PATCH 1/1 ALSA: usb-audio: allow -EPIPE errors for some v2 messages

The Schiit Hel device does not like to respond to all get_ctl_value_v2() requests for some reason. This used to work in older kernels, but now with more strict checking, this failure causes the device to fail to work.

Cc Jaroslav Kysela <[email protected]>
Cc Takashi Iwai <[email protected]>

---

This fixes the Shiit Hel device that I have. It used to work on older kernels (a year ago?), but stopped working for some reason and I didn't take the time to track it down. This change fixes the issue for me, but feels wrong for some reason. At least now I can use the device as a headphone driver, much better than the built-in one for my current machine...

If needed, I can take the time to do bisection to track down the real issue here, it might be due to stricter endpoint checking in the USB core, but that feels wrong somehow.

Here's the debugfs USB output for this device, showing the endpoints:

T:  Bus=07 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=30be ProdID=0101 Rev=01.02
S:  Manufacturer=Schiit Audio
S:  Product=Schiit Hel
C:  #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
E:  Ad=8f(I) Atr=03(Int.) MxPS=   6 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=05(O) Atr=05(Isoc) MxPS= 104 Ivl=125us
E:  Ad=85(I) Atr=11(Isoc) MxPS=   4 Ivl=1ms
I:  If#= 2 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=88(I) Atr=05(Isoc) MxPS= 156 Ivl=125us
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=84(I) Atr=03(Int.) MxPS=  16 Ivl=1ms

Any other suggestions to fix this are welcome.

 sound/usb/mixer.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
sound/usb/mixer.c +3 -3
index a2ce535df14b..37d3d697776b 100644
@@ -371,11 +371,11 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
 			      validx, idx, buf, size);
 	snd_usb_unlock_shutdown(chip);
 
-	if (ret < 0) {
+	if ((ret < 0) && (ret != -EPIPE)) {
 error:
 		usb_audio_err(chip,
-			"cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
-			request, validx, idx, cval->val_type);
+			"cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, ret = %d\n",
+			request, validx, idx, cval->val_type, ret);
 		return ret;
 	}
 
Signature · 1 line
2.33.0
#1 lore raw
Quoted 40 lines · Greg Kroah-Hartman

The Schiit Hel device does not like to respond to all get_ctl_value_v2() requests for some reason. This used to work in older kernels, but now with more strict checking, this failure causes the device to fail to work.

Cc Jaroslav Kysela <[email protected]>
Cc Takashi Iwai <[email protected]>

---

This fixes the Shiit Hel device that I have. It used to work on older kernels (a year ago?), but stopped working for some reason and I didn't take the time to track it down. This change fixes the issue for me, but feels wrong for some reason. At least now I can use the device as a headphone driver, much better than the built-in one for my current machine...

If needed, I can take the time to do bisection to track down the real issue here, it might be due to stricter endpoint checking in the USB core, but that feels wrong somehow.

Here's the debugfs USB output for this device, showing the endpoints:

T:  Bus=07 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=30be ProdID=0101 Rev=01.02
S:  Manufacturer=Schiit Audio
S:  Product=Schiit Hel
C:  #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
E:  Ad=8f(I) Atr=03(Int.) MxPS=   6 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=05(O) Atr=05(Isoc) MxPS= 104 Ivl=125us
E:  Ad=85(I) Atr=11(Isoc) MxPS=   4 Ivl=1ms
I:  If#= 2 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=88(I) Atr=05(Isoc) MxPS= 156 Ivl=125us
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=84(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
Quoted 1 line

Any other suggestions to fix this are welcome.

Could you show the exact error messages and lsusb -v output? We may paper over only the problematic node instead.

thanks,

Takashi

author maintainer
#2 lore raw
Quoted 42 lines · Takashi Iwai
Quoted 40 lines · Greg Kroah-Hartman

The Schiit Hel device does not like to respond to all get_ctl_value_v2() requests for some reason. This used to work in older kernels, but now with more strict checking, this failure causes the device to fail to work.

Cc Jaroslav Kysela <[email protected]>
Cc Takashi Iwai <[email protected]>

---

This fixes the Shiit Hel device that I have. It used to work on older kernels (a year ago?), but stopped working for some reason and I didn't take the time to track it down. This change fixes the issue for me, but feels wrong for some reason. At least now I can use the device as a headphone driver, much better than the built-in one for my current machine...

If needed, I can take the time to do bisection to track down the real issue here, it might be due to stricter endpoint checking in the USB core, but that feels wrong somehow.

Here's the debugfs USB output for this device, showing the endpoints:

T:  Bus=07 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=30be ProdID=0101 Rev=01.02
S:  Manufacturer=Schiit Audio
S:  Product=Schiit Hel
C:  #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
E:  Ad=8f(I) Atr=03(Int.) MxPS=   6 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=05(O) Atr=05(Isoc) MxPS= 104 Ivl=125us
E:  Ad=85(I) Atr=11(Isoc) MxPS=   4 Ivl=1ms
I:  If#= 2 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=88(I) Atr=05(Isoc) MxPS= 156 Ivl=125us
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=84(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
Quoted 4 lines
Quoted 1 line

Any other suggestions to fix this are welcome.

Could you show the exact error messages and lsusb -v output? We may paper over only the problematic node instead.

Sure, here's the dmesg output on 5.15-rc5 when it is turned on:

[Oct11 17:25] usb 7-2.2: new high-speed USB device number 9 using xhci_hcd

[  +0.122422] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000002] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.327172] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.0009/input/input21
[  +0.055134] hid-generic 0003:30BE:0101.0009: input,hidraw8: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3
[  +0.135988] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.060647] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.065362] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.192121] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1

And here is the 'lsusb -v' output of the device.

Bus 007 Device 009: ID 30be:0101 Schiit Audio Schiit Hel Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x30be
idProduct 0x0101
bcdDevice 1.02

  iManufacturer           1 Schiit Audio
  iProduct                2 Schiit Hel
  iSerial                 0 
  bNumConfigurations      1

Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0198
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 0mA
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 1
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 10
wTotalLength 0x0100
bmControls 0x00
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bCSourceID 18
bNrChannels 0
bmChannelConfig 0x00000000
iChannelNames 0
bmControls 0x0040
Cluster Control (read-only)
iTerminal 0
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 5
wTerminalType 0x0201 Microphone
bAssocTerminal 0
bCSourceID 22
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
iChannelNames 0
bmControls 0x0044
Connector Control (read-only) Cluster Control (read-only)
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 7
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 13
bCSourceID 18
bmControls 0x0004
Connector Control (read-only)
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 11
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 17
bCSourceID 22
bmControls 0x0000
iTerminal 0
AudioControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 13
bSourceID 1
bmaControls(0) 0x00000003
Mute Control (read/write)
bmaControls(1) 0x00000000
bmaControls(2) 0x00000000
iFeature 0
AudioControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 17
bSourceID 5
bmaControls(0) 0x00000003
Mute Control (read/write)
bmaControls(1) 0x00000000
bmaControls(2) 0x00000000
iFeature 0
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 10 (CLOCK_SOURCE)
bClockID 18
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 10 (CLOCK_SOURCE)
bClockID 22
bmAttributes 3 Internal programmable clock
bmControls 0x07
Clock Frequency Control (read/write) Clock Validity Control (read-only)
bAssocTerminal 0
iClockSource 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x8f EP 15 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0006 1x 6 bytes
bInterval 4
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 4 Schiit Hel
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 1
bmControls 0x05
Active Alternate Setting Control (read-only) Valid Alternate Setting Control (read-only)
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 2
bBitResolution 16
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0068 1x 104 bytes
bInterval 1
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 0x85 EP 5 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 1
bAlternateSetting 2
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bmControls 0x05
Active Alternate Setting Control (read-only) Valid Alternate Setting Control (read-only)
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 3
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x009c 1x 156 bytes
bInterval 1
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 0x85 EP 5 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 1
bAlternateSetting 3
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bmControls 0x05
Active Alternate Setting Control (read-only) Valid Alternate Setting Control (read-only)
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 4
bBitResolution 32
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00d0 1x 208 bytes
bInterval 1
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 0x85 EP 5 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 6 Schiit Hel
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 11
bmControls 0x05
Active Alternate Setting Control (read-only) Valid Alternate Setting Control (read-only)
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 3
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x88 EP 8 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x009c 1x 156 bytes
bInterval 1
AudioStreaming Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 3
bInterfaceCount 1
bFunctionClass 3 Human Interface Device
bFunctionSubClass 0
bFunctionProtocol 0
iFunction 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 50
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 4
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0001
Self Powered

I can easily test any proposed patches :)

thanks,

greg k-h

#3 lore raw
Quoted 52 lines · Greg Kroah-Hartman
Quoted 42 lines · Takashi Iwai
Quoted 40 lines · Greg Kroah-Hartman

The Schiit Hel device does not like to respond to all get_ctl_value_v2() requests for some reason. This used to work in older kernels, but now with more strict checking, this failure causes the device to fail to work.

Cc Jaroslav Kysela <[email protected]>
Cc Takashi Iwai <[email protected]>

---

This fixes the Shiit Hel device that I have. It used to work on older kernels (a year ago?), but stopped working for some reason and I didn't take the time to track it down. This change fixes the issue for me, but feels wrong for some reason. At least now I can use the device as a headphone driver, much better than the built-in one for my current machine...

If needed, I can take the time to do bisection to track down the real issue here, it might be due to stricter endpoint checking in the USB core, but that feels wrong somehow.

Here's the debugfs USB output for this device, showing the endpoints:

T:  Bus=07 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=30be ProdID=0101 Rev=01.02
S:  Manufacturer=Schiit Audio
S:  Product=Schiit Hel
C:  #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
E:  Ad=8f(I) Atr=03(Int.) MxPS=   6 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=05(O) Atr=05(Isoc) MxPS= 104 Ivl=125us
E:  Ad=85(I) Atr=11(Isoc) MxPS=   4 Ivl=1ms
I:  If#= 2 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=88(I) Atr=05(Isoc) MxPS= 156 Ivl=125us
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=84(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
Quoted 4 lines
Quoted 1 line

Any other suggestions to fix this are welcome.

Could you show the exact error messages and lsusb -v output? We may paper over only the problematic node instead.

Sure, here's the dmesg output on 5.15-rc5 when it is turned on:

[Oct11 17:25] usb 7-2.2: new high-speed USB device number 9 using xhci_hcd

Quoted 10 lines
[  +0.122422] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000002] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.327172] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.0009/input/input21
[  +0.055134] hid-generic 0003:30BE:0101.0009: input,hidraw8: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3
[  +0.135988] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.060647] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.065362] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.192121] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1

Thanks. So this happens at the unit 17, and ...

Quoted 4 lines

And here is the 'lsusb -v' output of the device.

Bus 007 Device 009: ID 30be:0101 Schiit Audio Schiit Hel

(snip)

Quoted 11 lines

AudioControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 17
bSourceID 5
bmaControls(0) 0x00000003
Mute Control (read/write)
bmaControls(1) 0x00000000
bmaControls(2) 0x00000000
iFeature 0

... this is the entry.

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

thanks,

Takashi

author maintainer
#4 lore raw
Quoted 85 lines · Takashi Iwai
Quoted 52 lines · Greg Kroah-Hartman
Quoted 42 lines · Takashi Iwai
Quoted 40 lines · Greg Kroah-Hartman

The Schiit Hel device does not like to respond to all get_ctl_value_v2() requests for some reason. This used to work in older kernels, but now with more strict checking, this failure causes the device to fail to work.

Cc Jaroslav Kysela <[email protected]>
Cc Takashi Iwai <[email protected]>

---

This fixes the Shiit Hel device that I have. It used to work on older kernels (a year ago?), but stopped working for some reason and I didn't take the time to track it down. This change fixes the issue for me, but feels wrong for some reason. At least now I can use the device as a headphone driver, much better than the built-in one for my current machine...

If needed, I can take the time to do bisection to track down the real issue here, it might be due to stricter endpoint checking in the USB core, but that feels wrong somehow.

Here's the debugfs USB output for this device, showing the endpoints:

T:  Bus=07 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=30be ProdID=0101 Rev=01.02
S:  Manufacturer=Schiit Audio
S:  Product=Schiit Hel
C:  #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
E:  Ad=8f(I) Atr=03(Int.) MxPS=   6 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=05(O) Atr=05(Isoc) MxPS= 104 Ivl=125us
E:  Ad=85(I) Atr=11(Isoc) MxPS=   4 Ivl=1ms
I:  If#= 2 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
E:  Ad=88(I) Atr=05(Isoc) MxPS= 156 Ivl=125us
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=84(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
Quoted 4 lines
Quoted 1 line

Any other suggestions to fix this are welcome.

Could you show the exact error messages and lsusb -v output? We may paper over only the problematic node instead.

Sure, here's the dmesg output on 5.15-rc5 when it is turned on:

[Oct11 17:25] usb 7-2.2: new high-speed USB device number 9 using xhci_hcd

Quoted 10 lines
[  +0.122422] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000002] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.327172] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.0009/input/input21
[  +0.055134] hid-generic 0003:30BE:0101.0009: input,hidraw8: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3
[  +0.135988] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.060647] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.065362] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1
[  +0.192121] usb 7-2.2: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x1100, type = 1

Thanks. So this happens at the unit 17, and ...

Quoted 4 lines

And here is the 'lsusb -v' output of the device.

Bus 007 Device 009: ID 30be:0101 Schiit Audio Schiit Hel

(snip)

Quoted 11 lines

AudioControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 17
bSourceID 5
bmaControls(0) 0x00000003
Mute Control (read/write)
bmaControls(1) 0x00000000
bmaControls(2) 0x00000000
iFeature 0

Quoted 4 lines

... this is the entry.

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 18
    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
#5 lore raw
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

thanks,

Takashi

sound/usb/mixer.c +36 -6
@@ -361,9 +361,8 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
 
 	memset(buf, 0, sizeof(buf));
 
-	ret = snd_usb_lock_shutdown(chip) ? -EIO : 0;
-	if (ret)
-		goto error;
+	if (snd_usb_lock_shutdown(chip))
+		return -EIO;
 
 	idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
 	ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), bRequest,
@@ -372,8 +371,7 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
 	snd_usb_unlock_shutdown(chip);
 
 	if (ret < 0) {
-error:
-		usb_audio_err(chip,
+		usb_audio_dbg(chip,
 			"cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
 			request, validx, idx, cval->val_type);
 		return ret;
@@ -1201,12 +1199,32 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
 	}
 }
 
+/* forcibly initialize the current mixer value; if GET_CUR fails, set to
+ * the minimum as default
+ */
+static void init_cur_mix_raw(struct usb_mixer_elem_info *cval, int ch, int idx)
+{
+	int val, err;
+
+	err = snd_usb_get_cur_mix_value(cval, ch, idx, &val);
+	if (!err)
+		return;
+	if (!cval->head.mixer->ignore_ctl_error)
+		usb_audio_warn(cval->head.mixer->chip,
+			       "%d:%d: failed to get current value for ch %d (%d)\n",
+			       cval->head.id, mixer_ctrl_intf(cval->head.mixer),
+			       ch, err);
+	snd_usb_set_cur_mix_value(cval, ch, idx, cval->min);
+}
+
 /*
  * retrieve the minimum and maximum values for the specified control
  */
 static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
 				   int default_min, struct snd_kcontrol *kctl)
 {
+	int i, idx;
+
 	/* for failsafe */
 	cval->min = default_min;
 	cval->max = cval->min + 1;
@@ -1219,7 +1237,6 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
 	} else {
 		int minchn = 0;
 		if (cval->cmask) {
-			int i;
 			for (i = 0; i < MAX_CHANNELS; i++)
 				if (cval->cmask & (1 << i)) {
 					minchn = i + 1;
@@ -1320,6 +1337,19 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
 		}
 	}
 
+	/* initialize all elements */
+	if (!cval->cmask) {
+		init_cur_mix_raw(cval, 0, 0);
+	} else {
+		idx = 0;
+		for (i = 0; i < MAX_CHANNELS; i++) {
+			if (cval->cmask & (1 << i)) {
+				init_cur_mix_raw(cval, i + 1, idx);
+				idx++;
+			}
+		}
+	}
+
 	return 0;
 }
 
author maintainer
#6 lore raw
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

thanks,

greg k-h

#7 lore raw
Quoted 52 lines · Greg Kroah-Hartman
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

Quoted 8 lines

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

OK, then the problem is only about this unit and about the master channel.

Quoted 2 lines

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

This should be persistent and visible; try to run "amixer -c1" (or the different card index for the device).

So far, so good. The only remaining piece is how this -EPIPE error comes up. Is this a protocol stall error or such? Would it be avoided by adding the delay like done for some devices?

With the 5.15-rc kernel, you can pass quirk_flags option to snd-usb-audio module for applying known quirks.
e.g. quirk_flags=0x100 will set the 1msec delay at each control message. Please check whether it makes any difference. The option is an integer array for multiple devices, so if you have multiple USB-audio devices, put at the appropriate position in the array (e.g. quirk_flags=,,0x100 for the 3rd slot).

The quirk bit 0x4000 will shut up the control errors. If the above doesn't fix the warning and the device is working more or less, set this quirk to shut up the warning. It can be set statically in the table at the end in sound/usb/quirks.c.

Takashi

author maintainer
#8 lore raw
Quoted 76 lines · Takashi Iwai
Quoted 52 lines · Greg Kroah-Hartman
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

Quoted 8 lines

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

OK, then the problem is only about this unit and about the master channel.

Quoted 2 lines

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

This should be persistent and visible; try to run "amixer -c1" (or the different card index for the device).

So far, so good. The only remaining piece is how this -EPIPE error comes up. Is this a protocol stall error or such? Would it be avoided by adding the delay like done for some devices?

Quoted 7 lines

With the 5.15-rc kernel, you can pass quirk_flags option to snd-usb-audio module for applying known quirks.
e.g. quirk_flags=0x100 will set the 1msec delay at each control message. Please check whether it makes any difference. The option is an integer array for multiple devices, so if you have multiple USB-audio devices, put at the appropriate position in the array (e.g. quirk_flags=,,0x100 for the 3rd slot).

This quirk did not work. Well, it caused the error to show up after a delay, but the error is still there.

Quoted 4 lines

The quirk bit 0x4000 will shut up the control errors. If the above doesn't fix the warning and the device is working more or less, set this quirk to shut up the warning. It can be set statically in the table at the end in sound/usb/quirks.c.

This quirk did work in that the error messages are still in the kernel log, but the device seems to work properly now.

Let me send a patch that adds this device to the quirk table.

thanks for your help,

greg k-h

author maintainer
#9 lore raw
Quoted 93 lines · Greg Kroah-Hartman
Quoted 76 lines · Takashi Iwai
Quoted 52 lines · Greg Kroah-Hartman
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

Quoted 8 lines

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

OK, then the problem is only about this unit and about the master channel.

Quoted 2 lines

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

This should be persistent and visible; try to run "amixer -c1" (or the different card index for the device).

So far, so good. The only remaining piece is how this -EPIPE error comes up. Is this a protocol stall error or such? Would it be avoided by adding the delay like done for some devices?

Quoted 7 lines

With the 5.15-rc kernel, you can pass quirk_flags option to snd-usb-audio module for applying known quirks.
e.g. quirk_flags=0x100 will set the 1msec delay at each control message. Please check whether it makes any difference. The option is an integer array for multiple devices, so if you have multiple USB-audio devices, put at the appropriate position in the array (e.g. quirk_flags=,,0x100 for the 3rd slot).

This quirk did not work. Well, it caused the error to show up after a delay, but the error is still there.

Quoted 4 lines

The quirk bit 0x4000 will shut up the control errors. If the above doesn't fix the warning and the device is working more or less, set this quirk to shut up the warning. It can be set statically in the table at the end in sound/usb/quirks.c.

Quoted 4 lines

This quirk did work in that the error messages are still in the kernel log, but the device seems to work properly now.

Let me send a patch that adds this device to the quirk table.

Now done:
https://lore.kernel.org/r/[email protected]

#10 lore raw
In reply to Greg Kroah-Hartman
Quoted 94 lines · Greg Kroah-Hartman
Quoted 76 lines · Takashi Iwai
Quoted 52 lines · Greg Kroah-Hartman
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

Quoted 8 lines

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

OK, then the problem is only about this unit and about the master channel.

Quoted 2 lines

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

This should be persistent and visible; try to run "amixer -c1" (or the different card index for the device).

So far, so good. The only remaining piece is how this -EPIPE error comes up. Is this a protocol stall error or such? Would it be avoided by adding the delay like done for some devices?

Quoted 7 lines

With the 5.15-rc kernel, you can pass quirk_flags option to snd-usb-audio module for applying known quirks.
e.g. quirk_flags=0x100 will set the 1msec delay at each control message. Please check whether it makes any difference. The option is an integer array for multiple devices, so if you have multiple USB-audio devices, put at the appropriate position in the array (e.g. quirk_flags=,,0x100 for the 3rd slot).

This quirk did not work. Well, it caused the error to show up after a delay, but the error is still there.

Quoted 4 lines

The quirk bit 0x4000 will shut up the control errors. If the above doesn't fix the warning and the device is working more or less, set this quirk to shut up the warning. It can be set statically in the table at the end in sound/usb/quirks.c.

Quoted 4 lines

This quirk did work in that the error messages are still in the kernel log, but the device seems to work properly now.

Let me send a patch that adds this device to the quirk table.

OK, thanks! The remaining error message should be suppressed with the patch in my previous mail. Or maybe we can add a patch to downgrade the error message to dev_dbg() at first for 5.15, then another one (initializing all controls at first) to 5.16.

Takashi

author maintainer
#11 lore raw
Quoted 99 lines · Takashi Iwai
Quoted 97 lines · Greg Kroah-Hartman
Quoted 76 lines · Takashi Iwai
Quoted 52 lines · Greg Kroah-Hartman
Quoted 39 lines · Takashi Iwai
Quoted 25 lines · Greg Kroah-Hartman
Quoted 2 lines · Takashi Iwai

Could you also post the contents of /proc/asound/card*/usbmixer (only for the corresponding device), too?

Sure, here it is:

USB Mixer: usb_id=0x30be0101, ctrlif=0, ctlerr=0
Card: Schiit Audio Schiit Hel at usb-0000:47:00.1-2.2, high speed
Unit: 5

    Control: name="Mic - Input Jack", index=0
    Info: id=5, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 7
    Control: name="Speaker - Output Jack", index=0
    Info: id=7, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 13
    Control: name="PCM Playback Switch", index=0
    Info: id=13, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 17
    Control: name="Mic Capture Switch", index=0
    Info: id=17, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
Quoted 8 lines

Unit: 18

    Control: name="Clock Source 18 Validity", index=0
    Info: id=18, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0
  Unit: 22
    Control: name="Clock Source 22 Validity", index=0
    Info: id=22, control=2, cmask=0x0, channels=1, type="BOOLEAN"
    Volume: min=0, max=1, dBmin=0, dBmax=0

Hm, I expected more exotic control that failed, but it was Mic Capture Switch, which should be treated normally.

Quoted 6 lines

Could you try the patch below? This will still show other warning messages, but it'll forcibly initialize the mixer elements at probe time, and the rest should work.

Once after it's confirmed to work, we may shut up the device warnings with a quirk.

Only one warning message shows up, here's the dmesg with this patch applied:

Quoted 8 lines

[Oct12 14:39] usb 7-2.2: new high-speed USB device number 10 using xhci_hcd

[  +0.123157] usb 7-2.2: New USB device found, idVendor=30be, idProduct=0101, bcdDevice= 1.02
[  +0.000009] usb 7-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0.000003] usb 7-2.2: Product: Schiit Hel
[  +0.000002] usb 7-2.2: Manufacturer: Schiit Audio
[  +0.339785] usb 7-2.2: 17:0: failed to get current value for ch 0 (-32)
[  +0.020373] input: Schiit Audio Schiit Hel as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:47:00.1/usb7/7-2/7-2.2/7-2.2:1.3/0003:30BE:0101.000B/input/input24
[  +0.056868] hid-generic 0003:30BE:0101.000B: input,hidraw6: USB HID v1.00 Device [Schiit Audio Schiit Hel] on usb-0000:47:00.1-2.2/input3

OK, then the problem is only about this unit and about the master channel.

Quoted 2 lines

I don't see a "mic capture switch" on this device, but maybe it triggers when I plug a mic into the microphone port, which is currently empty?

This should be persistent and visible; try to run "amixer -c1" (or the different card index for the device).

So far, so good. The only remaining piece is how this -EPIPE error comes up. Is this a protocol stall error or such? Would it be avoided by adding the delay like done for some devices?

Quoted 7 lines

With the 5.15-rc kernel, you can pass quirk_flags option to snd-usb-audio module for applying known quirks.
e.g. quirk_flags=0x100 will set the 1msec delay at each control message. Please check whether it makes any difference. The option is an integer array for multiple devices, so if you have multiple USB-audio devices, put at the appropriate position in the array (e.g. quirk_flags=,,0x100 for the 3rd slot).

This quirk did not work. Well, it caused the error to show up after a delay, but the error is still there.

Quoted 4 lines

The quirk bit 0x4000 will shut up the control errors. If the above doesn't fix the warning and the device is working more or less, set this quirk to shut up the warning. It can be set statically in the table at the end in sound/usb/quirks.c.

This quirk did work in that the error messages are still in the kernel log, but the device seems to work properly now.

Quoted 6 lines
Quoted 1 line

Let me send a patch that adds this device to the quirk table.

OK, thanks! The remaining error message should be suppressed with the patch in my previous mail. Or maybe we can add a patch to downgrade the error message to dev_dbg() at first for 5.15, then another one (initializing all controls at first) to 5.16.

Either works for me. If you want me to test anything out with this device, just let me know!

thanks,

greg k-h