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

From: Joakim Tjernlund
Date: Mon Jun 05 2023 - 09:22:00 EST


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.

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;
> > > }
> >