[alsa-devel] [PATCH] add Steinberg UR44 USB Audio Interface support to quirks-table

Clemens Ladisch clemens at ladisch.de
Wed Nov 5 22:17:23 CET 2014


Cyrus Harmon wrote:
> [    2.964094] snd-usb-audio 3-3.2:1.0: checking PCM interface
> [    2.964104] snd-usb-audio: probe of 3-3.2:1.0 failed with error -5
> [    2.966339] snd-usb-audio 3-3.2:1.1: checking PCM interface
> [    2.966341] snd-usb-audio 3-3.2:1.1: altsets found
> [    2.966342] snd-usb-audio 3-3.2:1.1: endpoint found
> [    2.966343] snd-usb-audio 3-3.2:1.1: iso found
> [    2.966344] snd-usb-audio 3-3.2:1.1: descriptors found
> [    2.968544] usb 3-3.2:1.0: checking PCM interface
> [    2.968546] usb 3-3.2:1.2: checking PCM interface
> [    2.968547] usb 3-3.2:1.2: altsets found
> [    2.968547] usb 3-3.2:1.2: endpoint found
> [    2.968548] usb 3-3.2:1.2: iso found
> [    2.968549] usb 3-3.2:1.2: descriptors found
> [    2.970657] usb 3-3.2:1.3: checking PCM interface
> [    2.970666] usb 3-3.2:1.4: checking PCM interface
> [    2.970930] snd-usb-audio: probe of 3-3.2:1.1 failed with error -5

Strange; in theory, this cannot happen.

Please add this patch and try again.


Regards,
Clemens


--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -536,7 +536,9 @@ snd_usb_audio_probe(struct usb_device *dev,
 	err = 1; /* continue */
 	if (quirk && quirk->ifnum != QUIRK_NO_INTERFACE) {
 		/* need some special handlings */
-		if ((err = snd_usb_create_quirk(chip, intf, &usb_audio_driver, quirk)) < 0)
+		err = snd_usb_create_quirk(chip, intf, &usb_audio_driver, quirk);
+		dev_info(&intf->dev, "quirk return code: %d\n", err);
+		if (err < 0)
 			goto __error;
 	}

@@ -547,11 +549,13 @@ snd_usb_audio_probe(struct usb_device *dev,
 			goto __error;
 		}
 	}
+	dev_info(&intf->dev, "probe step 2\n");

 	/* we are allowed to call snd_card_register() many times */
 	if (snd_card_register(chip->card) < 0) {
 		goto __error;
 	}
+	dev_info(&intf->dev, "probe step 3\n");

 	usb_chip[chip->index] = chip;
 	chip->num_interfaces++;
@@ -560,6 +564,7 @@ snd_usb_audio_probe(struct usb_device *dev,
 	return chip;

  __error:
+	dev_info(&intf->dev, "probe failed\n");
 	if (chip) {
 		if (!chip->num_interfaces)
 			snd_card_free(chip->card);
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -367,6 +367,7 @@ static int create_autodetect_quirks(struct snd_usb_audio *chip,
 	err = create_autodetect_quirk(chip, iface, driver);
 	if (err < 0)
 		return err;
+	dev_info(&iface->dev, "first interface successful\n");

 	/*
 	 * ALSA PCM playback/capture devices cannot be registered in two steps,
@@ -385,9 +386,13 @@ static int create_autodetect_quirks(struct snd_usb_audio *chip,

 		err = create_autodetect_quirk(chip, iface, driver);
 		if (err >= 0)
+		{
 			usb_driver_claim_interface(driver, iface, (void *)-1L);
+			dev_info(&iface->dev, "interface %d successful\n", ifnum);
+		}
 	}

+	dev_info(&iface->dev, "create_autodetect_quirks successful\n");
 	return 0;
 }



More information about the Alsa-devel mailing list