
[Switched Cc to alsa-devel ML, as it's irrelevant from PA but rather a driver issue.]
At Mon, 27 Apr 2015 07:58:59 -0600, Glenn Golden wrote:
Takashi Iwai tiwai@suse.de [2015-04-27 08:50:34 +0200]:
Gah, I hate reports without alsa-info.sh output (not a link to somewhere else).
Glenn, please attach alsa-info.sh outputs (run it with --no-upload option) and the whole dmesg output after boot. 3.19 should already contain the hook to thinkpad_acpi.c. If anything is missing, you should have a warning indicating it.
Apologies for the omissions. Both are attached.
Thanks!
Fwiw -- perhaps nothing at this point -- a good deal of info has also been posted to the kernel bugtracker ticket:
https://bugzilla.kernel.org/show_bug.cgi?id=96171
Re: "...you should have a warning indicating it": I'm an unskilled laboror here w.r.t. kernel affairs, and not even sure what sort of warnings to be looking for, so may have missed something important without realizing it. Just let me know what add'l info you need, I'll be happy to post it. I do appreciate your attention to the issue.
I see no such warning in the log you attached, so it's not the issue, as it seems.
Below is a debug patch, and now you should see messages like "XXX ..." in kernel log at loading the driver. If there is no such a message, it means that the thinkpad hook isn't built in at all. Please check the kernel log again with the patch.
Takashi
--- diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c index 0a4ad5feb82e..48ce61e46599 100644 --- a/sound/pci/hda/thinkpad_helper.c +++ b/sound/pci/hda/thinkpad_helper.c @@ -34,6 +34,7 @@ static void update_tpacpi_mute_led(void *private_data, int enabled) if (old_vmaster_hook) old_vmaster_hook(private_data, enabled);
+ pr_info("XXX mute led updated %d\n", enabled); if (led_set_func) led_set_func(TPACPI_LED_MUTE, !enabled); } @@ -58,8 +59,10 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec, bool removefunc = false;
if (action == HDA_FIXUP_ACT_PROBE) { + codec_info(codec, "XXX hda_fixup_thinkpad_acpi init...\n"); if (!is_thinkpad(codec)) return; + codec_info(codec, "XXX ok, this is thinkpad\n"); if (!led_set_func) led_set_func = symbol_request(tpacpi_led_set); if (!led_set_func) { @@ -70,18 +73,24 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
removefunc = true; if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { + codec_info(codec, "XXX ok, mute LED is hooked\n"); old_vmaster_hook = spec->vmaster_mute.hook; spec->vmaster_mute.hook = update_tpacpi_mute_led; removefunc = false; + } else { + codec_err(codec, "XXX mute LED NOT WORKING!\n"); } if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { if (spec->num_adc_nids > 1) codec_dbg(codec, "Skipping micmute LED control due to several ADCs"); else { + codec_info(codec, "XXX ok, mic LED is hooked\n"); spec->cap_sync_hook = update_tpacpi_micmute_led; removefunc = false; } + } else { + codec_err(codec, "XXX mic LED NOT WORKING!\n"); } }