提交 8d4b3137 编写于 作者: H Hans de Goede 提交者: Dmitry Torokhov

Input: axp20x-pek - only check for "INTCFD9" ACPI device on Cherry Trail

Commit 9b13a4ca ("Input: axp20x-pek - do not register input device
on some systems") added a check for the INTCFD9 ACPI device which also
handles the powerbutton as on some systems the powerbutton is connected
to both the PMIC, handled by axp20x-pek, and to a gpio on the SoC, handled
by soc_button_array which attaches itself to the INTCFD9 ACPI device.

Testing + comparing DSDTs has shown that this only happens on Cherry
Trail devices with an AXP288 PMIC, the AXP288 PMIC is also used on
Bay Trail devices but there the power button is only connected to
the PMIC and not handled by soc_button_array.

This means that the INTCFD9 check has caused a regression on Bay Trail
devices, causing power-button presses to no longer be seen.

This commit fixes this by limiting the check to devices where the ACPI
node for the AXP288 contains a _HRV (hardware revision) attribute with
a value of 3 which indicates we are dealing with a Cherry Trail platform.

Fixes: 9b13a4ca ("Input: axp20x-pek - do not register input ...")
Reported-by: NСергей Трусов <t.rus76@ya.ru>
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
上级 eadcbfa5
...@@ -256,6 +256,41 @@ static int axp20x_pek_probe_input_device(struct axp20x_pek *axp20x_pek, ...@@ -256,6 +256,41 @@ static int axp20x_pek_probe_input_device(struct axp20x_pek *axp20x_pek,
return 0; return 0;
} }
#ifdef CONFIG_ACPI
static bool axp20x_pek_should_register_input(struct axp20x_pek *axp20x_pek,
struct platform_device *pdev)
{
unsigned long long hrv = 0;
acpi_status status;
if (IS_ENABLED(CONFIG_INPUT_SOC_BUTTON_ARRAY) &&
axp20x_pek->axp20x->variant == AXP288_ID) {
status = acpi_evaluate_integer(ACPI_HANDLE(pdev->dev.parent),
"_HRV", NULL, &hrv);
if (ACPI_FAILURE(status))
dev_err(&pdev->dev, "Failed to get PMIC hardware revision\n");
/*
* On Cherry Trail platforms (hrv == 3), do not register the
* input device if there is an "INTCFD9" gpio
* button ACPI device, as that handles the power button too,
* and otherwise we end up reporting all presses twice.
*/
if (hrv == 3 && acpi_dev_found("INTCFD9"))
return false;
}
return true;
}
#else
static bool axp20x_pek_should_register_input(struct axp20x_pek *axp20x_pek,
struct platform_device *pdev)
{
return true;
}
#endif
static int axp20x_pek_probe(struct platform_device *pdev) static int axp20x_pek_probe(struct platform_device *pdev)
{ {
struct axp20x_pek *axp20x_pek; struct axp20x_pek *axp20x_pek;
...@@ -268,13 +303,7 @@ static int axp20x_pek_probe(struct platform_device *pdev) ...@@ -268,13 +303,7 @@ static int axp20x_pek_probe(struct platform_device *pdev)
axp20x_pek->axp20x = dev_get_drvdata(pdev->dev.parent); axp20x_pek->axp20x = dev_get_drvdata(pdev->dev.parent);
/* if (axp20x_pek_should_register_input(axp20x_pek, pdev)) {
* Do not register the input device if there is an "INTCFD9"
* gpio button ACPI device, that handles the power button too,
* and otherwise we end up reporting all presses twice.
*/
if (!acpi_dev_found("INTCFD9") ||
!IS_ENABLED(CONFIG_INPUT_SOC_BUTTON_ARRAY)) {
error = axp20x_pek_probe_input_device(axp20x_pek, pdev); error = axp20x_pek_probe_input_device(axp20x_pek, pdev);
if (error) if (error)
return error; return error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册