At Wed, 24 Apr 2013 09:15:17 +0200, Daniel Schürmann wrote:
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.
It's strange because snd_usb_autoresume() itself has already the check of chip->probing... Ah, wait, I see the culprit.
The reason is simple. snd_usb_autoresume() returns -ENODEV when chip->probing is set. This should be zero instead.
Does the patch below work instead of yours?
Takashi
--- diff --git a/sound/usb/card.c b/sound/usb/card.c index 5254b18..1a03317 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -631,7 +631,9 @@ int snd_usb_autoresume(struct snd_usb_audio *chip) int err = -ENODEV;
down_read(&chip->shutdown_rwsem); - if (!chip->shutdown && !chip->probing) + if (chip->probing) + err = 0; + else if (!chip->shutdown) err = usb_autopm_get_interface(chip->pm_intf); up_read(&chip->shutdown_rwsem);