[alsa-devel] [PATCH] fixed mixer range reading during probing when compiled with CONFIG_PM defined
Daniel Schürmann
daschuer at mixxx.org
Wed Apr 24 09:15:17 CEST 2013
Hi Takashi,
thank you for review.
The patch solves the following error messages when connecting the Hercules
RMX2 DJ Controller:
[ 9.600161] ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue =
0x201, wIndex = 0xa00, type = 4
[ 9.600487] ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue =
0x200, wIndex = 0xa00, type = 4
[ 9.600984] ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue =
0x201, wIndex = 0xb00, type = 4
[ 9.601236] ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue =
0x200, wIndex = 0xb00, type = 4
But I am not entirely sure if this solves the real Bug.
So I hope one with more experience can help out here.
Kind regards,
Daniel
2013/4/24 Takashi Iwai <tiwai at suse.de>
> At Tue, 23 Apr 2013 23:38:49 +0200,
> Daniel Schürmann wrote:
> >
> > During probing, snd_usb_autoresume() failes with -ENODEV. This brakes
> > get_ctl_value() in mixer.c when rading the range values. The new
> > code does not try to call snd_usb_autoresume() in this case.
> > The following snd_usb_suspend() fails silently during probing anyway.
> > The patch also makes the error messages more significant. The original
> > error messages where identified as missleading during debug.
>
> Does this patch really fix the real bug (i.e. you got an error in
> get_ctl_value() during probe), or just hypothesis?
>
> Also, better to correct many typos in the changelog :)
>
>
> thanks,
>
> Takashi
>
> >
> > Signed-off-by: Daniel Schürmann <daschuer at mixxx.org>
> > ---
> > sound/usb/mixer.c | 23 +++++++++++++++--------
> > 1 file changed, 15 insertions(+), 8 deletions(-)
> >
> > diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> > index ca4739c..c2daa58 100644
> > --- a/sound/usb/mixer.c
> > +++ b/sound/usb/mixer.c
> > @@ -289,9 +289,11 @@ static int get_ctl_value_v1(struct
> usb_mixer_elem_info *cval, int request, int v
> > int timeout = 10;
> > int idx = 0, err;
> >
> > - err = snd_usb_autoresume(cval->mixer->chip);
> > - if (err < 0)
> > - return -EIO;
> > + if (!chip->probing) {
> > + err = snd_usb_autoresume(cval->mixer->chip);
> > + if (err < 0)
> > + return -EIO;
> > + }
> > down_read(&chip->shutdown_rwsem);
> > while (timeout-- > 0) {
> > if (chip->shutdown)
> > @@ -333,9 +335,14 @@ static int get_ctl_value_v2(struct
> usb_mixer_elem_info *cval, int request, int v
> >
> > memset(buf, 0, sizeof(buf));
> >
> > - ret = snd_usb_autoresume(chip) ? -EIO : 0;
> > - if (ret)
> > - goto error;
> > + if (!chip->probing) {
> > + ret = snd_usb_autoresume(chip);
> > + if (ret) {
> > + snd_printk(KERN_ERR "snd_usb_autoresume() failed
> with %d\n", ret);
> > + ret = -EIO;
> > + goto error;
> > + }
> > + }
> >
> > down_read(&chip->shutdown_rwsem);
> > if (chip->shutdown)
> > @@ -351,8 +358,8 @@ static int get_ctl_value_v2(struct
> usb_mixer_elem_info *cval, int request, int v
> >
> > if (ret < 0) {
> > error:
> > - snd_printk(KERN_ERR "cannot get ctl value: req = %#x,
> wValue = %#x, wIndex = %#x, type = %d\n",
> > - request, validx, idx, cval->val_type);
> > + snd_printk(KERN_ERR "cannot get ctl value: req = %#x,
> wValue = %#x, wIndex = %#x, type = %d, ret = %d\n",
> > + bRequest, validx, idx, cval->val_type, ret);
> > return ret;
> > }
> >
> > --
> > 1.7.9.5
> >
>
More information about the Alsa-devel
mailing list