[alsa-devel] [V2 PATCH] ALSA: hda - Enable mute/mic-mute LEDs for more Thinkpads with Conexant codec
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), {}
On 11/27/2013 07:47 AM, 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.
Looks good to me!
Acked-by: David Henningsson david.henningsson@canonical.com
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))
if (!led_set_func) led_set_func = symbol_request(tpacpi_led_set); if (!led_set_func) {return;
@@ -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), {}
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))
if (!led_set_func) led_set_func = symbol_request(tpacpi_led_set); if (!led_set_func) {return;
@@ -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 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))
if (!led_set_func) led_set_func = symbol_request(tpacpi_led_set); if (!led_set_func) {return;
@@ -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 ||
return false; if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found) return true;codec->subsystem_id == 0x17aa21ec)
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 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?
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 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
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.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.
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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>> 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068",
acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>>> 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Jan
On 2015-05-23 18:22, Jan Kiszka wrote:
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>>>> 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Jan
Ping...
Jan
On 06/24/2015 01:37 PM, Jan Kiszka wrote:
On 2015-05-23 18:22, Jan Kiszka wrote:
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>>>>> 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Some hotkey leds are embedded on button. Through the pictures I found on the internet (thinkpad t520), it looks like there is a led at the center of the mute button.
Jan
Ping...
Jan _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On 2015-06-24 10:46, Hui Wang wrote:
On 06/24/2015 01:37 PM, Jan Kiszka wrote:
On 2015-05-23 18:22, Jan Kiszka wrote:
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>>>>>> 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Some hotkey leds are embedded on button. Through the pictures I found on the internet (thinkpad t520), it looks like there is a led at the center of the mute button.
Again, I'm on a X121e, and that has only a single physical LED for signaling the power state. The mute button is behind key combination of the keyboard.
Jan
On 06/25/2015 07:02 PM, Jan Kiszka wrote:
On 2015-06-24 10:46, Hui Wang wrote:
On 06/24/2015 01:37 PM, Jan Kiszka wrote:
On 2015-05-23 18:22, Jan Kiszka wrote:
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道:
>>>>>>>>>>> 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?
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Some hotkey leds are embedded on button. Through the pictures I found on the internet (thinkpad t520), it looks like there is a led at the center of the mute button.
Again, I'm on a X121e, and that has only a single physical LED for signaling the power state. The mute button is behind key combination of the keyboard.
Jan
There is no reason to change a power button to a reset button after accessing the acpi device "SSMS", the "SSMS" is for the mute led instead of the power management.
I think it is better you login to the lenovo website and look for the latest BIOS image, then upgrade the BIOS on your machine to see if it can solve the problem or not.
On 2015-06-26 04:22, Hui Wang wrote:
On 06/25/2015 07:02 PM, Jan Kiszka wrote:
On 2015-06-24 10:46, Hui Wang wrote:
On 06/24/2015 01:37 PM, Jan Kiszka wrote:
On 2015-05-23 18:22, Jan Kiszka wrote:
On 2015-05-23 18:06, Raymond Yau wrote:
2015-5-23 下午4:50 於 "Jan Kiszka" jan.kiszka@web.de 寫道: >>>>>>>>>>>> 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? http://mailman.alsa-project.org/pipermail/alsa-devel/2015-May/091561.html
If you cannot find "SSMS" in your T520 ACPI dump, this mean mute LED cannot be turn on/off similar to T510
There is an entry (see attached disassembly), but this device has at least no physical LED to drive.
Some hotkey leds are embedded on button. Through the pictures I found on the internet (thinkpad t520), it looks like there is a led at the center of the mute button.
Again, I'm on a X121e, and that has only a single physical LED for signaling the power state. The mute button is behind key combination of the keyboard.
Jan
There is no reason to change a power button to a reset button after accessing the acpi device "SSMS", the "SSMS" is for the mute led instead of the power management.
I think it is better you login to the lenovo website and look for the latest BIOS image, then upgrade the BIOS on your machine to see if it can solve the problem or not.
There is no more update since 2013, and I'm using the latest one. The real bug is likely in the BIOS (it also has some other oddities), but the trigger was this patch.
I suggested to have a quirk installed for my model - it cannot benefit from this change anyway. Now I'm waiting for feedback on how to address this best *in Linux* (because this is what we have under control).
Thanks, Jan
On Fri, 26 Jun 2015, Hui Wang wrote:
Again, I'm on a X121e, and that has only a single physical LED for signaling the power state. The mute button is behind key combination of the keyboard.
Jan
There is no reason to change a power button to a reset button after accessing the acpi device "SSMS", the "SSMS" is for the mute led instead of the power management.
I think it is better you login to the lenovo website and look for the latest BIOS image, then upgrade the BIOS on your machine to see if it can solve the problem or not.
Hmm, I think I am missing something here.
Please explain _in detail_ what you mean with "changing a power button to a reset button by acessing the SSMS ACPI method in a X121e".
Are we trigering a bug somewhere that crashes the x121e and causes it to reboot?
On 2015-06-27 00:49, Henrique de Moraes Holschuh wrote:
On Fri, 26 Jun 2015, Hui Wang wrote:
Again, I'm on a X121e, and that has only a single physical LED for signaling the power state. The mute button is behind key combination of the keyboard.
Jan
There is no reason to change a power button to a reset button after accessing the acpi device "SSMS", the "SSMS" is for the mute led instead of the power management.
I think it is better you login to the lenovo website and look for the latest BIOS image, then upgrade the BIOS on your machine to see if it can solve the problem or not.
Hmm, I think I am missing something here.
Please explain _in detail_ what you mean with "changing a power button to a reset button by acessing the SSMS ACPI method in a X121e".
Are we trigering a bug somewhere that crashes the x121e and causes it to reboot?
Well, there aren't much details to describe in this case: When this patch is applied and I press the power button, the device performs a hard reset. It doesn't reveal if the kernel crashes catastrophically, causing a triple fault or so, or if the firmware decides to reset the platform. Reverting the patch or preventing its effect via a quirk filter like I posted [1] makes the issue go away.
Jan
[1] http://mailman.alsa-project.org/pipermail/alsa-devel/2014-June/078284.html
On Sat, 27 Jun 2015, Jan Kiszka wrote:
Please explain _in detail_ what you mean with "changing a power button to a reset button by acessing the SSMS ACPI method in a X121e".
Are we trigering a bug somewhere that crashes the x121e and causes it to reboot?
Well, there aren't much details to describe in this case: When this patch is applied and I press the power button, the device performs a hard reset. It doesn't reveal if the kernel crashes catastrophically, causing a triple fault or so, or if the firmware decides to reset the platform. Reverting the patch or preventing its effect via a quirk filter like I posted [1] makes the issue go away.
Ok, so we crashing the firmware, and on a box that is not likely to get further updates. Well, this is a pretty clear case: blacklist.
Since calling SSMS in the X121e is unsafe, it needs to be blacklisted in thinkpad-acpi. I will need dmidecode output for that (please XXX-out UUIDs and serial numbers in the dmidecode output before you send it to me, but do keep model numbers intact).
We can also have a blacklist in ALSA to avoid the whole symbol_request() for something that will have to fail, of course. I leave that for the ALSA maintainers to decide.
That said, you blacklisted in ALSA by full codec->subsystem_id. Which thinkpads have the 0x17aa21ec subsystem ID on the codec? Just the x121e?
At Sat, 27 Jun 2015 12:50:44 -0300, Henrique de Moraes Holschuh wrote:
On Sat, 27 Jun 2015, Jan Kiszka wrote:
Please explain _in detail_ what you mean with "changing a power button to a reset button by acessing the SSMS ACPI method in a X121e".
Are we trigering a bug somewhere that crashes the x121e and causes it to reboot?
Well, there aren't much details to describe in this case: When this patch is applied and I press the power button, the device performs a hard reset. It doesn't reveal if the kernel crashes catastrophically, causing a triple fault or so, or if the firmware decides to reset the platform. Reverting the patch or preventing its effect via a quirk filter like I posted [1] makes the issue go away.
Ok, so we crashing the firmware, and on a box that is not likely to get further updates. Well, this is a pretty clear case: blacklist.
Since calling SSMS in the X121e is unsafe, it needs to be blacklisted in thinkpad-acpi. I will need dmidecode output for that (please XXX-out UUIDs and serial numbers in the dmidecode output before you send it to me, but do keep model numbers intact).
We can also have a blacklist in ALSA to avoid the whole symbol_request() for something that will have to fail, of course. I leave that for the ALSA maintainers to decide.
IMO, it's simpler to just leave the decision in thinkpad_acpi.
That said, you blacklisted in ALSA by full codec->subsystem_id. Which thinkpads have the 0x17aa21ec subsystem ID on the codec? Just the x121e?
It's not guaranteed, but Lenovo doesn't share the same PCI SSID for multiple models, AFAIK.
thanks,
Takashi
>>>>>> 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:
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
return ACPI_SUCCESS(acpi_get_devices("IBM0068",
acpi_check_cb,
&found, NULL)) && found; // same as above
if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { //in the
sound/pci/hda/thinkpad_helper.c, hda_fixup_thinkpad_acpi()
...and this
- 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);
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/driver...
It seem that software mute also depend on HAUM and SAUM ACPI interface
Seem regression of the above patch is SSMS is not supported
https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1450947
Which models of thinkpad are tested by the author ?
On 06/27/2015 11:03 AM, Raymond Yau 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);
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/driver...
It seem that software mute also depend on HAUM and SAUM ACPI interface
Seem regression of the above patch is SSMS is not supported
https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1450947
Which models of thinkpad are tested by the author ?
A lot, we tested this patch on all Lenovo machines with mute led we have. I need to check the models name and provide them at a later time.
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On 06/29/2015 08:49 AM, Hui Wang wrote:
On 06/27/2015 11:03 AM, Raymond Yau 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);
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/driver...
It seem that software mute also depend on HAUM and SAUM ACPI interface
Seem regression of the above patch is SSMS is not supported
https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1450947
Which models of thinkpad are tested by the author ?
A lot, we tested this patch on all Lenovo machines with mute led we have. I need to check the models name and provide them at a later time.
What I can remeber now are x230, x240, x250, L560 and x1
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
participants (7)
-
David Henningsson
-
Henrique de Moraes Holschuh
-
Hui Wang
-
Hui Wang
-
Jan Kiszka
-
Raymond Yau
-
Takashi Iwai