Patch "ACPI: AC: Quirk GK45 to skip reading _PSR" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ACPI: AC: Quirk GK45 to skip reading _PSR

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     acpi-ac-quirk-gk45-to-skip-reading-_psr.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 39677b9456165dc3947de0d9eba40ba721fc9437
Author: Stefan Schaeckeler <schaecsn@xxxxxxx>
Date:   Sun Oct 24 15:04:45 2021 -0700

    ACPI: AC: Quirk GK45 to skip reading _PSR
    
    [ Upstream commit 3d730ee686800d71ecc5c3cb8460dcdcdeaf38a3 ]
    
    Let GK45 not go into BIOS for determining the AC power state.
    
    The BIOS wrongly returns 0, so hardcode the power state to 1.
    
    The mini PC GK45 by Besstar Tech Lld. (aka Kodlix) just runs
    off AC. It does not include any batteries. Nevertheless BIOS
    reports AC off:
    
    root@kodlix:/usr/src/linux# cat /sys/class/power_supply/ADP1/online
    0
    
    root@kodlix:/usr/src/linux# modprobe acpi_dbg
    root@kodlix:/usr/src/linux# tools/power/acpi/acpidbg
    
    - find _PSR
       \_SB.PCI0.SBRG.H_EC.ADP1._PSR Method       000000009283cee8 001 Args 0 Len 001C Aml 00000000f54e5f67
    
    - execute \_SB.PCI0.SBRG.H_EC.ADP1._PSR
    Evaluating \_SB.PCI0.SBRG.H_EC.ADP1._PSR
    Evaluation of \_SB.PCI0.SBRG.H_EC.ADP1._PSR returned object 00000000dc08c187, external buffer length 18
     [Integer] = 0000000000000000
    
    that should be
    
     [Integer] = 0000000000000001
    
    Signed-off-by: Stefan Schaeckeler <schaecsn@xxxxxxx>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
index b0cb662233f1a..81aff651a0d49 100644
--- a/drivers/acpi/ac.c
+++ b/drivers/acpi/ac.c
@@ -61,6 +61,7 @@ static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
 
 static int ac_sleep_before_get_state_ms;
 static int ac_check_pmic = 1;
+static int ac_only;
 
 static struct acpi_driver acpi_ac_driver = {
 	.name = "ac",
@@ -93,6 +94,11 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
 	if (!ac)
 		return -EINVAL;
 
+	if (ac_only) {
+		ac->state = 1;
+		return 0;
+	}
+
 	status = acpi_evaluate_integer(ac->device->handle, "_PSR", NULL,
 				       &ac->state);
 	if (ACPI_FAILURE(status)) {
@@ -200,6 +206,12 @@ static int __init ac_do_not_check_pmic_quirk(const struct dmi_system_id *d)
 	return 0;
 }
 
+static int __init ac_only_quirk(const struct dmi_system_id *d)
+{
+	ac_only = 1;
+	return 0;
+}
+
 /* Please keep this list alphabetically sorted */
 static const struct dmi_system_id ac_dmi_table[]  __initconst = {
 	{
@@ -209,6 +221,13 @@ static const struct dmi_system_id ac_dmi_table[]  __initconst = {
 			DMI_MATCH(DMI_PRODUCT_NAME, "EF20EA"),
 		},
 	},
+	{
+		/* Kodlix GK45 returning incorrect state */
+		.callback = ac_only_quirk,
+		.matches = {
+			DMI_MATCH(DMI_PRODUCT_NAME, "GK45"),
+		},
+	},
 	{
 		/* Lenovo Ideapad Miix 320, AXP288 PMIC, separate fuel-gauge */
 		.callback = ac_do_not_check_pmic_quirk,



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux