[alsa-devel] [PATCH] fixed mixer range reading during probing when compiled with CONFIG_PM defined

Takashi Iwai tiwai at suse.de
Wed Apr 24 08:00:32 CEST 2013


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