On 2014-07-01 04:15, Hui Wang wrote: > 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.h...@canonical.com> >>>>> Cc: David Henningsson <david.hennings...@canonical.com> >>>>> Signed-off-by: Hui Wang <hui.w...@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.
I'm running OpenSUSE 13.1. The reported keycode of the power button is 116. Jan
signature.asc
Description: OpenPGP digital signature