Patchwork [3.5.y.z,extended,stable] Patch "ALSA: usb-audio: Fix autopm error during probing" has been added to staging queue

mail settings
Submitter Luis Henriques
Date May 15, 2013, 10:33 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/243992/
State New
Headers show


Luis Henriques - May 15, 2013, 10:33 a.m.
This is a note to let you know that I have just added a patch titled

    ALSA: usb-audio: Fix autopm error during probing

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 15bb89dc72bff91de10dd51110085aec22460257 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <>
Date: Thu, 25 Apr 2013 07:38:15 +0200
Subject: [PATCH] ALSA: usb-audio: Fix autopm error during probing
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

commit 60af3d037eb8c670dcce31401501d1271e7c5d95 upstream.

We've got strange errors in get_ctl_value() in mixer.c during
probing, e.g. on Hercules RMX2 DJ Controller:

  ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue = 0x201, wIndex = 0xa00, type = 4
  ALSA mixer.c:352 cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0xa00, type = 4

It turned out that the culprit is autopm: snd_usb_autoresume() returns
-ENODEV when called during card->probing = 1.

Since the call itself during card->probing = 1 is valid, let's fix the
return value of snd_usb_autoresume() as success.

Reported-and-tested-by: Daniel Schürmann <>
Signed-off-by: Takashi Iwai <>
Signed-off-by: Luis Henriques <>
 sound/usb/card.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)



diff --git a/sound/usb/card.c b/sound/usb/card.c
index b3f5ad4..aa25e04 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -619,7 +619,9 @@  int snd_usb_autoresume(struct snd_usb_audio *chip)
 	int err = -ENODEV;

-	if (!chip->shutdown && !chip->probing)
+	if (chip->probing)
+		err = 0;
+	else if (!chip->shutdown)
 		err = usb_autopm_get_interface(chip->pm_intf);