On a somewhat related note, is there a way to apply changes to things in, say, sound/usb and compile/install those changes without a few kernel rebuild/install? Or, even better, without a reboot? Would certainly shorting the debug cycle time for me. In this case I'm interested in finding out what quirk->type is when it gets to snd_usb_create_quirk as it looks like the function in the quirk_funcs table that gets called here produces the first suspect error. Adding a dev_info, followed by a kernel rebuild, reinstall, reboot (and the fact that my broken nvidia drivers require reinstalling the video driver every time I install a new kernel) makes for a tedious process!
thanks!
Cyrus
On 11/05/2014 01:17 PM, Clemens Ladisch wrote:
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; }