Re: [PATCH] ALSA: usb-audio: allow -EPIPE errors for some v2 messages

Takashi Iwai
2021-10-12T13:24:16Z

On Tue, 12 Oct 2021 14:41:44 +0200,
Greg Kroah-Hartman wrote:
>
> On Tue, Oct 12, 2021 at 09:35:16AM +0200, Takashi Iwai wrote:
> > On Mon, 11 Oct 2021 19:23:05 +0200,
> > Greg Kroah-Hartman wrote:
> > >
> > > On Mon, Oct 11, 2021 at 06:07:01PM +0200, Takashi Iwai wrote:
> > > > 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
> >
> > 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.
>
> 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

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

> 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