Messages in this thread | | | Date | Tue, 01 Jul 2014 10:15:59 +0800 | From | Hui Wang <> | Subject | Re: [V2 PATCH] ALSA: hda - Enable mute/mic-mute LEDs for more Thinkpads with Conexant codec |
| |
On 06/30/2014 02:45 PM, Jan Kiszka wrote: > On 2014-06-30 04:04, Hui Wang wrote: >> On 06/29/2014 07:33 PM, Jan Kiszka wrote: >>> On 2013-11-27 07:47, Hui Wang wrote: >>>> Most Thinkpad Edge series laptops use conexant codec, so far although >>>> the codecs have different minor Vendor Id and minor Subsystem Id, >>>> they all belong to the cxt5066 family, this change can make the >>>> mute/mic-mute LEDs support more generic among cxt_5066 family. >>>> >>>> This design refers to the similar solution for the realtek codec >>>> ALC269 family in the patch_realtek.c. >>>> >>>> Cc: Alex Hung <alex.hung@canonical.com> >>>> Cc: David Henningsson <david.henningsson@canonical.com> >>>> Signed-off-by: Hui Wang <hui.wang@canonical.com> >>>> --- >>>> sound/pci/hda/patch_conexant.c | 23 +++++++++++++++++++++++ >>>> 1 file changed, 23 insertions(+) >>>> >>>> diff --git a/sound/pci/hda/patch_conexant.c >>>> b/sound/pci/hda/patch_conexant.c >>>> index c205bb1..1f2717f 100644 >>>> --- a/sound/pci/hda/patch_conexant.c >>>> +++ b/sound/pci/hda/patch_conexant.c >>>> @@ -3244,9 +3244,29 @@ enum { >>>> #if IS_ENABLED(CONFIG_THINKPAD_ACPI) >>>> #include <linux/thinkpad_acpi.h> >>>> +#include <acpi/acpi.h> >>>> static int (*led_set_func)(int, bool); >>>> +static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void >>>> *context, >>>> + void **rv) >>>> +{ >>>> + bool *found = context; >>>> + *found = true; >>>> + return AE_OK; >>>> +} >>>> + >>>> +static bool is_thinkpad(struct hda_codec *codec) >>>> +{ >>>> + bool found = false; >>>> + if (codec->subsystem_id >> 16 != 0x17aa) >>>> + return false; >>>> + if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, >>>> &found, NULL)) && found) >>>> + return true; >>>> + found = false; >>>> + return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb, >>>> &found, NULL)) && found; >>>> +} >>>> + >>>> static void update_tpacpi_mute_led(void *private_data, int enabled) >>>> { >>>> struct hda_codec *codec = private_data; >>>> @@ -3279,6 +3299,8 @@ static void cxt_fixup_thinkpad_acpi(struct >>>> hda_codec *codec, >>>> bool removefunc = false; >>>> if (action == HDA_FIXUP_ACT_PROBE) { >>>> + if (!is_thinkpad(codec)) >>>> + return; >>>> if (!led_set_func) >>>> led_set_func = symbol_request(tpacpi_led_set); >>>> if (!led_set_func) { >>>> @@ -3494,6 +3516,7 @@ static const struct snd_pci_quirk >>>> cxt5066_fixups[] = { >>>> SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", >>>> CXT_FIXUP_STEREO_DMIC), >>>> SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", >>>> CXT_FIXUP_STEREO_DMIC), >>>> SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", >>>> CXT_FIXUP_STEREO_DMIC), >>>> + SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", CXT_FIXUP_THINKPAD_ACPI), >>>> SND_PCI_QUIRK(0x1c06, 0x2011, "Lemote A1004", >>>> CXT_PINCFG_LEMOTE_A1004), >>>> SND_PCI_QUIRK(0x1c06, 0x2012, "Lemote A1205", >>>> CXT_PINCFG_LEMOTE_A1205), >>>> {} >>>> >>> Starting with this patch, my Lenovo Thinkpad X121e netbook (it's without >>> any mute LEDs, BTW, there is only a power LED) considers the power >>> button as hard reset. I have to exclude my machine from that ACPI fixup >>> (this is on top of current Linus master): >> It seems more like a firmware issue, in the acpi code, the "SSMS" is for >> mute led, and the "MMTS" is for micmute led, I don't know why your >> machine can pass "SSMS" or "MMTS" scanning even without mute LEDs. >> > Is there anything I can debug or any information I can collect from my > box to examine this? What is the linux distribution on your machine? And use showkey to catch the keycode of that button.
> > Jan > >
| |