Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ACPI: PM: Do not turn of unused power resources on the Toshiba Click Mini

The CPR3 power resource on the Toshiba Click Mini toggles a GPIO
which is called SISP (for SIS touchscreen power?) on/off.

This CPR3 power resource is not listed in any _PR? lists, let alone
in a _PR0 list for the SIS0817 touchscreen ACPI device which needs it.

Before commit a1224f34d72a ("ACPI: PM: Check states of power resources
during initialization") this was not an issue because since nothing
referenced the CPR3 power resource its state was always
ACPI_POWER_RESOURCE_STATE_UNKNOWN and power resources with this state
get ignored by acpi_turn_off_unused_power_resources().

This clearly is a bug in the DSDT of this device. Add a DMI quirk
to make acpi_turn_off_unused_power_resources() a no-op on this
model to fix the touchscreen no longer working since kernel 5.16 .

This quirk also causes 2 other power resources to not get turned
off, but the _OFF method on these already was a no-op, so this makes
no difference for the other 2 power resources.

Fixes: a1224f34d72a ("ACPI: PM: Check states of power resources during initialization")
Reported-by: Gé Koerkamp <ge.koerkamp@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216946
Link: https://lore.kernel.org/regressions/32a14a8a-9795-4c8c-7e00-da9012f548f8@leemhuis.info/
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Hans de Goede and committed by
Rafael J. Wysocki
9b04d997 793582ff

+19
+19
drivers/acpi/power.c
··· 23 23 24 24 #define pr_fmt(fmt) "ACPI: PM: " fmt 25 25 26 + #include <linux/dmi.h> 26 27 #include <linux/kernel.h> 27 28 #include <linux/module.h> 28 29 #include <linux/init.h> ··· 1023 1022 } 1024 1023 #endif 1025 1024 1025 + static const struct dmi_system_id dmi_leave_unused_power_resources_on[] = { 1026 + { 1027 + /* 1028 + * The Toshiba Click Mini has a CPR3 power-resource which must 1029 + * be on for the touchscreen to work, but which is not in any 1030 + * _PR? lists. The other 2 affected power-resources are no-ops. 1031 + */ 1032 + .matches = { 1033 + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), 1034 + DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE Click Mini L9W-B"), 1035 + }, 1036 + }, 1037 + {} 1038 + }; 1039 + 1026 1040 /** 1027 1041 * acpi_turn_off_unused_power_resources - Turn off power resources not in use. 1028 1042 */ 1029 1043 void acpi_turn_off_unused_power_resources(void) 1030 1044 { 1031 1045 struct acpi_power_resource *resource; 1046 + 1047 + if (dmi_check_system(dmi_leave_unused_power_resources_on)) 1048 + return; 1032 1049 1033 1050 mutex_lock(&power_resource_list_lock); 1034 1051