Re: [PATCH] ALSA: usb-audio: Fix "cannot set freq 48000 to ep 0x3" msgs

From: Takashi Iwai
Date: Mon Jun 05 2023 - 09:43:10 EST


On Mon, 05 Jun 2023 15:21:51 +0200,
Joakim Tjernlund wrote:
>
> On Mon, 2023-06-05 at 09:39 +0200, Takashi Iwai wrote:
> > On Thu, 01 Jun 2023 16:28:05 +0200,
> > Joakim Tjernlund wrote:
> > >
> > > Adding Michael Ralston <michael@xxxxxxxxxxxxx>
> > >
> > > He did have problems with his behringer UMC404HD device when this whole seq. was removed.
> > > Ralston, can you try if the below change affects your device?
> >
> > Sorry for the late reaction, as I've been off in the last weeks.
>
> NP.
>
> >
> > The code sequence there seems pretty sensitive, and swapping or
> > dropping the call might break things easily on certain devices,
> > unfortunately. So, I guess we can't take the patch as is. If any, we
> > need to fiddle the call order depending on the device quirk or such.
> > I guess we may try to fit with the existing quirk flag. Let me check
> > it later.
>
> yes, this is tricky. To me it look like this code will always set 48000 sample rate and
> not all devices support that on all EPs.
> Maybe one can get away with not setting sample rate at all? Just guessing though.

I guess it should work without setting the rate explicitly, but as
already mentioned, some devices (firmware) might need it. Who knows.

The vendors apparently test only with Windows and/or MacOS, and
issuing unexpected commands (or missing the expected command) can
screw up firmware...


Takashi

>
> Jocke
>
> >
> >
> > thanks,
> >
> > Takashi
> >
> >
> > > Jocke
> > >
> > > On Thu, 2023-06-01 at 15:11 +0200, Joakim Tjernlund wrote:
> > > > On some USB speaker devices(Jabra/Logitech) we see above error
> > > > msg when connecting device to computer and kernel is probing the device.
> > > >
> > > > Moving the snd_usb_init_sample_rate() to after usb_set_interface() makes
> > > > the error go away.
> > > >
> > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@xxxxxxxxxxxx>
> > > > Cc: stable@xxxxxxxxxxxxxxx
> > > > ---
> > > > sound/usb/stream.c | 2 +-
> > > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/sound/usb/stream.c b/sound/usb/stream.c
> > > > index f10f4e6d3fb8..d9ac8663a48b 100644
> > > > --- a/sound/usb/stream.c
> > > > +++ b/sound/usb/stream.c
> > > > @@ -1226,8 +1226,8 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,
> > > > /* try to set the interface... */
> > > > usb_set_interface(chip->dev, iface_no, 0);
> > > > snd_usb_init_pitch(chip, fp);
> > > > - snd_usb_init_sample_rate(chip, fp, fp->rate_max);
> > > > usb_set_interface(chip->dev, iface_no, altno);
> > > > + snd_usb_init_sample_rate(chip, fp, fp->rate_max);
> > > > }
> > > > return 0;
> > > > }
> > >
>