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 <[email protected]>
> Cc: David Henningsson <[email protected]>
> Signed-off-by: Hui Wang <[email protected]>
> ---
> 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):
diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c
index 6ba0b55..7e1a179 100644
--- a/sound/pci/hda/thinkpad_helper.c
+++ b/sound/pci/hda/thinkpad_helper.c
@@ -21,7 +21,8 @@ static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void *context,
static bool is_thinkpad(struct hda_codec *codec)
{
bool found = false;
- if (codec->subsystem_id >> 16 != 0x17aa)
+ if (codec->subsystem_id >> 16 != 0x17aa ||
+ codec->subsystem_id == 0x17aa21ec)
return false;
if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found)
return true;
Is that the way to address it? Then I can send a proper patch. Any hints
regarding the "why" will be incorporated into its description.
Thanks,
Jan
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 <[email protected]>
>> Cc: David Henningsson <[email protected]>
>> Signed-off-by: Hui Wang <[email protected]>
>> ---
>> 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.
> diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c
> index 6ba0b55..7e1a179 100644
> --- a/sound/pci/hda/thinkpad_helper.c
> +++ b/sound/pci/hda/thinkpad_helper.c
> @@ -21,7 +21,8 @@ static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void *context,
> static bool is_thinkpad(struct hda_codec *codec)
> {
> bool found = false;
> - if (codec->subsystem_id >> 16 != 0x17aa)
> + if (codec->subsystem_id >> 16 != 0x17aa ||
> + codec->subsystem_id == 0x17aa21ec)
> return false;
> if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found)
> return true;
>
>
> Is that the way to address it? Then I can send a proper patch. Any hints
> regarding the "why" will be incorporated into its description.
>
> Thanks,
> Jan
>
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 <[email protected]>
>>> Cc: David Henningsson <[email protected]>
>>> Signed-off-by: Hui Wang <[email protected]>
>>> ---
>>> 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?
Jan
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 <[email protected]>
>>>> Cc: David Henningsson <[email protected]>
>>>> Signed-off-by: Hui Wang <[email protected]>
>>>> ---
>>>> 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
>
>
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 <[email protected]>
>>>>> Cc: David Henningsson <[email protected]>
>>>>> Signed-off-by: Hui Wang <[email protected]>
>>>>> ---
>>>>> 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
On 07/01/2014 03:38 PM, Jan Kiszka wrote:
> 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
<snip>
>>>>>>
>>> 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.
It seems the keycode is correct, it is power keycode rather the mute
keycode.
Could you please do some debug, let us find which line of code is the
root cause for this problem. for example:
after running the line, the problem shows up:
1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
&found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
is_thinkpad()
2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as above
>
> Jan
>
>
On 2014-07-01 11:26, Hui Wang wrote:
> On 07/01/2014 03:38 PM, Jan Kiszka wrote:
>> 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
> <snip>
>>>>>>>
>>>> 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.
> It seems the keycode is correct, it is power keycode rather the mute
> keycode.
>
> Could you please do some debug, let us find which line of code is the
> root cause for this problem. for example:
>
> after running the line, the problem shows up:
>
> 1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
> &found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
> is_thinkpad()
This evaluates to true
>
> 2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
> &found, NULL)) && found; // same as above
>
> 3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
> sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
>
> 4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as above
>
...and this as well. spec->num_adc_nids is 1.
Jan
On 07/03/2014 03:04 PM, Jan Kiszka wrote:
> On 2014-07-01 11:26, Hui Wang wrote:
>> On 07/01/2014 03:38 PM, Jan Kiszka wrote:
>>> 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
>> <snip>
>>>>> 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.
>> It seems the keycode is correct, it is power keycode rather the mute
>> keycode.
>>
>> Could you please do some debug, let us find which line of code is the
>> root cause for this problem. for example:
>>
>> after running the line, the problem shows up:
>>
>> 1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
>> &found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
>> is_thinkpad()
> This evaluates to true
>
>> 2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
>> &found, NULL)) && found; // same as above
>>
>> 3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
>> sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
> ...and this
>
>> 4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as above
>>
> ...and this as well. spec->num_adc_nids is 1.
If we change the code like below, does the power button can work well?
in the thinkpad_helper.c, hda_fixup_thinkpad_acpi()
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) {
/*
old_vmaster_hook = spec->vmaster_mute.hook;
spec->vmaster_mute.hook = update_tpacpi_mute_led;
removefunc = false;
*/
}
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 {
spec->cap_sync_hook = update_tpacpi_micmute_led;
removefunc = false;
}
*/
}
If power button can work well, please uncomment one section of the code
to find which section code introduce this problem.
Regards,
Hui.
>
> Jan
>
>
On 2014-07-03 10:59, Hui Wang wrote:
> On 07/03/2014 03:04 PM, Jan Kiszka wrote:
>> On 2014-07-01 11:26, Hui Wang wrote:
>>> On 07/01/2014 03:38 PM, Jan Kiszka wrote:
>>>> 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
>>> <snip>
>>>>>> 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.
>>> It seems the keycode is correct, it is power keycode rather the mute
>>> keycode.
>>>
>>> Could you please do some debug, let us find which line of code is the
>>> root cause for this problem. for example:
>>>
>>> after running the line, the problem shows up:
>>>
>>> 1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
>>> &found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
>>> is_thinkpad()
>> This evaluates to true
>>
>>> 2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
>>> &found, NULL)) && found; // same as above
>>>
>>> 3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
>>> sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>> ...and this
>>
>>> 4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as above
>>>
>> ...and this as well. spec->num_adc_nids is 1.
>
>
> If we change the code like below, does the power button can work well?
>
> in the thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>
>
> if (led_set_func(TPACPI_LED_MUTE, false) >= 0) {
> /*
> old_vmaster_hook = spec->vmaster_mute.hook;
> spec->vmaster_mute.hook = update_tpacpi_mute_led;
> removefunc = false;
> */
Disabling only this block resolves the issue.
Jan
On 07/03/2014 05:05 PM, Jan Kiszka wrote:
> On 2014-07-03 10:59, Hui Wang wrote:
>> On 07/03/2014 03:04 PM, Jan Kiszka wrote:
>>> On 2014-07-01 11:26, Hui Wang wrote:
>>>> On 07/01/2014 03:38 PM, Jan Kiszka wrote:
>>>>> 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
>>>> <snip>
>>>>>>> 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.
>>>> It seems the keycode is correct, it is power keycode rather the mute
>>>> keycode.
>>>>
>>>> Could you please do some debug, let us find which line of code is the
>>>> root cause for this problem. for example:
>>>>
>>>> after running the line, the problem shows up:
>>>>
>>>> 1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
>>>> &found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
>>>> is_thinkpad()
>>> This evaluates to true
>>>
>>>> 2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
>>>> &found, NULL)) && found; // same as above
>>>>
>>>> 3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
>>>> sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>>> ...and this
>>>
>>>> 4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as above
>>>>
>>> ...and this as well. spec->num_adc_nids is 1.
>>
>> If we change the code like below, does the power button can work well?
>>
>> in the thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>>
>>
>> if (led_set_func(TPACPI_LED_MUTE, false) >= 0) {
>> /*
>> old_vmaster_hook = spec->vmaster_mute.hook;
>> spec->vmaster_mute.hook = update_tpacpi_mute_led;
>> removefunc = false;
>> */
> Disabling only this block resolves the issue.
So Below two lines make the power button change to the reset button.
drivers/platform/x86/thinkpad_acpi.c mute_led_on_off():
acpi_get_handle(hkey_handle, "SSMS", &temp);
acpi_evalf(hkey_handle, &output, "SSMS", "dd", 1);
@alexhung,
Do you have any idea why this can affect the power button behavior?
>
> Jan
>
>
On 2014-07-03 11:24, Hui Wang wrote:
> On 07/03/2014 05:05 PM, Jan Kiszka wrote:
>> On 2014-07-03 10:59, Hui Wang wrote:
>>> On 07/03/2014 03:04 PM, Jan Kiszka wrote:
>>>> On 2014-07-01 11:26, Hui Wang wrote:
>>>>> On 07/01/2014 03:38 PM, Jan Kiszka wrote:
>>>>>> 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
>>>>> <snip>
>>>>>>>> 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.
>>>>> It seems the keycode is correct, it is power keycode rather the mute
>>>>> keycode.
>>>>>
>>>>> Could you please do some debug, let us find which line of code is the
>>>>> root cause for this problem. for example:
>>>>>
>>>>> after running the line, the problem shows up:
>>>>>
>>>>> 1. if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb,
>>>>> &found, NULL)) && found) // in the sound/pci/hda/thinkpad_helper.c,
>>>>> is_thinkpad()
>>>> This evaluates to true
>>>>
>>>>> 2. return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
>>>>> &found, NULL)) && found; // same as above
>>>>>
>>>>> 3. if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
>>>>> sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>>>> ...and this
>>>>
>>>>> 4. if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { // same as
>>>>> above
>>>>>
>>>> ...and this as well. spec->num_adc_nids is 1.
>>>
>>> If we change the code like below, does the power button can work well?
>>>
>>> in the thinkpad_helper.c, hda_fixup_thinkpad_acpi()
>>>
>>>
>>> if (led_set_func(TPACPI_LED_MUTE, false) >= 0) {
>>> /*
>>> old_vmaster_hook = spec->vmaster_mute.hook;
>>> spec->vmaster_mute.hook = update_tpacpi_mute_led;
>>> removefunc = false;
>>> */
>> Disabling only this block resolves the issue.
>
> So Below two lines make the power button change to the reset button.
>
> drivers/platform/x86/thinkpad_acpi.c mute_led_on_off():
>
> acpi_get_handle(hkey_handle, "SSMS", &temp);
> acpi_evalf(hkey_handle, &output, "SSMS", "dd", 1);
>
>
> @alexhung,
> Do you have any idea why this can affect the power button behavior?
>
I think we all lost track of this issue, but it unfortunately still
exists in the latest kernel, requiring custom builds here. How can we
proceed?
Thanks,
Jan