Message ID | ec393c6b-a960-5fb3-f98c-cb2120961d45@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 18-12-2017 21:56, Mauro Santos wrote: > On 18-12-2017 19:30, Takashi Iwai wrote: >> On Mon, 18 Dec 2017 20:10:44 +0100, >> Mauro Santos wrote: >>> >>> On 18-12-2017 17:50, Jaejoong Kim wrote: >>>> Mauro, >>>> >>>> Could you please try debug patch(I also attach the patch file)? >>> >>> With the attached patch I get the following when plugging in the usb dac >>> directly to a usb3 port: >>> [ 54.391539] usb 1-2: new full-speed USB device number 7 using xhci_hcd >>> [ 54.514996] usb 1-2: device descriptor read/64, error -71 >>> [ 54.849808] input: HiFimeDIY Audio HiFimeDIY DAC as >>> /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:1852:7022.0003/input/input20 >>> [ 54.850168] hid-generic 0003:1852:7022.0003: input,hidraw2: USB HID >>> v1.00 Device [HiFimeDIY Audio HiFimeDIY DAC] on usb-0000:00:14.0-2/input0 >>> [ 54.950421] usb 1-2: [DEBUG] nameid:0, len:0 >>> [ 54.950426] usb 1-2: [DEBUG] len:3, get_term_name:PCM >>> [ 54.950429] usb 1-2: [11] SU [PCM] items = 2 >>> [ 54.950985] usbcore: registered new interface driver snd-usb-audio >> >> Hmm, the driver get the supposedly correct name string here, so I see >> no flaw, so far. >> >> Could you put the similar debug prints after reverting the commit and >> compare? Or, at minimum, you can enable simply the kernel debug >> prints like below: >> >> % echo "file sound/usb/mixer.c +p" > /sys/kernel/debug/dynamic_debug_control >> >> and re-plug the device. >> >> Also, could you attach the output of "amixer contents" on both working >> and non-working kernels? >> > > I have compiled a new kernel where I have reverted the commit and I've > added the debug output based on your last debug patch. I attach the > patch that reverts the changes and adds the debug output just in case > anyone wants to do a sanity check on it (don't mind the indentation I > think I botched that). > > With the debug patches I get no extra output when echoing to the > dynamic_debug/control file, I guess that's expected. > Turns out there is some output, I can't echo and plug, I need to plug, echo, replug. Dmesg outputs are attached. > I attach the dmesg and amixer outputs for the case without revert plus > debug (bad) and revert plus debug (good). > > One change does jump out: > > bad: usb 1-2: [11] SU [PCM] items = 2 > good: usb 1-2: [11] SU [PCM Capture Source] items = 2 >
diff -ur a/sound/usb/mixer.c b/sound/usb/mixer.c --- a/sound/usb/mixer.c 2017-12-18 19:47:02.748776502 +0000 +++ b/sound/usb/mixer.c 2017-12-18 20:18:30.023770892 +0000 @@ -595,7 +595,7 @@ while (snd_ctl_find_id(mixer->chip->card, &kctl->id)) kctl->id.index++; if ((err = snd_ctl_add(mixer->chip->card, kctl)) < 0) { - usb_audio_dbg(mixer->chip, "cannot add control (err = %d)\n", + usb_audio_err(mixer->chip, "cannot add control (err = %d)\n", err); return err; } @@ -656,10 +656,14 @@ unsigned char *name, int maxlen, int term_only) { struct iterm_name_combo *names; + int len; - if (iterm->name) - return snd_usb_copy_string_desc(state, iterm->name, + if (iterm->name) { + len = snd_usb_copy_string_desc(state, iterm->name, name, maxlen); + usb_audio_err(state->chip, "[DEBUG] len:%d, iterm->name:%d\n", len, iterm->name); + return len; + } /* virtual type - not a real terminal */ if (iterm->type >> 16) { @@ -2175,17 +2179,24 @@ nameid = uac_selector_unit_iSelector(desc); len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name)); + + usb_audio_err(state->chip, "[DEBUG] nameid:%d, len:%d\n", nameid, len); + if (len) ; - else if (nameid) + else if (nameid) { len = snd_usb_copy_string_desc(state, nameid, kctl->id.name, sizeof(kctl->id.name)); - else + usb_audio_err(state->chip, "[DEBUG] len:%d, copy_string id.name:%s\n", + len, (len > 0) ? kctl->id.name : " "); + } + else { len = get_term_name(state, &state->oterm, kctl->id.name, sizeof(kctl->id.name), 0); - - if (!len) { - strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name)); + usb_audio_err(state->chip, "[DEBUG] len:%d, get_term_name:%s\n", + len, (len > 0) ? kctl->id.name : " "); + if (!len) + strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name)); if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR) append_ctl_name(kctl, " Clock Source"); @@ -2195,7 +2206,7 @@ append_ctl_name(kctl, " Playback Source"); } - usb_audio_dbg(state->chip, "[%d] SU [%s] items = %d\n", + usb_audio_err(state->chip, "[%d] SU [%s] items = %d\n", cval->head.id, kctl->id.name, desc->bNrInPins); return snd_usb_mixer_add_control(&cval->head, kctl); }