summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-02-19 01:28:57 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2026-02-19 01:28:57 +0300
commit9a199794fd789c783d34281ac1acde011a7affa8 (patch)
treeccb057f57f43ccf3db0d8d06a939db4f565bd907 /drivers
parentc3c1e9853363d247270f9d500cbaa1df8f14d4f9 (diff)
parentb89d8be0dcf9d734583f10d88b85256ec67dd0dd (diff)
downloadlinux-9a199794fd789c783d34281ac1acde011a7affa8.tar.xz
Merge tag 'acpi-7.0-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull more ACPI support updates from Rafael J. Wysocki: "These are mostly fixes and cleanups on top of the ACPI support updates merged recently, including two new quirks, an ACPI CPPC library fix, and fixes and cleanups of a few core ACPI device drivers: - Add an unused power resource handling quirk for THUNDEROBOT ZERO (Zhai Can) - Fix remaining for_each_possible_cpu() in the ACPI CPPC library to use online CPUs (Sean V Kelley) - Drop redundant checks from the ACPI notify handler and the driver remove callback in the ACPI battery driver (Rafael Wysocki) - Move the creation of the wakeup source during the ACPI button driver probe to an earlier point to avoid missing a wakeup event due to a race and clean up system wakeup handling and remove callback in that driver (Rafael Wysocki) - Drop unnecessary driver_data pointer clearing from the ACPI EC and SMBUS HC drivers and make the ACPI backlight (video) driver clear the device's driver_data pointer on remove (Rafael Wysocki) - Force enabling of PWM2 on the Yogabook YB1-X90 tablets (Yauhen Kharuzhy)" * tag 'acpi-7.0-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI: PM: Add unused power resource quirk for THUNDEROBOT ZERO ACPI: driver: Drop driver_data pointer clearing from two drivers ACPI: video: Clear driver_data pointer on remove ACPI: button: Tweak acpi_button_remove() ACPI: button: Tweak system wakeup handling ACPI: battery: Drop redundant checks from acpi_battery_remove() ACPI: CPPC: Fix remaining for_each_possible_cpu() to use online CPUs ACPI: x86: Force enabling of PWM2 on the Yogabook YB1-X90 ACPI: button: Call device_init_wakeup() earlier during probe ACPI: battery: Drop redundant check from acpi_battery_notify()
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpi_video.c1
-rw-r--r--drivers/acpi/battery.c9
-rw-r--r--drivers/acpi/button.c20
-rw-r--r--drivers/acpi/cppc_acpi.c4
-rw-r--r--drivers/acpi/ec.c2
-rw-r--r--drivers/acpi/power.c13
-rw-r--r--drivers/acpi/sbshc.c2
-rw-r--r--drivers/acpi/x86/utils.c12
8 files changed, 41 insertions, 22 deletions
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index 69469757b965..3d6e7306f29a 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -2116,6 +2116,7 @@ static void acpi_video_bus_remove(struct platform_device *pdev)
kfree(video->attached_array);
kfree(video);
+ device->driver_data = NULL;
}
static int __init is_i740(struct pci_dev *dev)
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 3bbddd6f622c..8fbad8bc4650 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -1066,9 +1066,6 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data)
struct acpi_device *device = battery->device;
struct power_supply *old;
- if (!battery)
- return;
-
guard(mutex)(&battery->update_lock);
old = battery->bat;
@@ -1274,13 +1271,9 @@ fail:
static void acpi_battery_remove(struct platform_device *pdev)
{
- struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
struct acpi_battery *battery = platform_get_drvdata(pdev);
- if (!device || !battery)
- return;
-
- acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY,
+ acpi_dev_remove_notify_handler(battery->device, ACPI_ALL_NOTIFY,
acpi_battery_notify);
device_init_wakeup(&pdev->dev, false);
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index b899b8745fed..7a06194d078b 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -170,7 +170,7 @@ static struct platform_driver acpi_button_driver = {
struct acpi_button {
struct acpi_device *adev;
- struct platform_device *pdev;
+ struct device *dev; /* physical button device */
unsigned int type;
struct input_dev *input;
char phys[32]; /* for input device */
@@ -398,7 +398,7 @@ static int acpi_lid_update_state(struct acpi_button *button,
return state;
if (state && signal_wakeup)
- acpi_pm_wakeup_event(&button->pdev->dev);
+ acpi_pm_wakeup_event(button->dev);
return acpi_lid_notify_state(button, state);
}
@@ -455,7 +455,7 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data)
return;
}
- acpi_pm_wakeup_event(&button->pdev->dev);
+ acpi_pm_wakeup_event(button->dev);
if (button->suspended || event == ACPI_BUTTON_NOTIFY_WAKE)
return;
@@ -550,7 +550,7 @@ static int acpi_button_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, button);
- button->pdev = pdev;
+ button->dev = &pdev->dev;
button->adev = device;
button->input = input = input_allocate_device();
if (!input) {
@@ -625,6 +625,8 @@ static int acpi_button_probe(struct platform_device *pdev)
goto err_remove_fs;
}
+ device_init_wakeup(button->dev, true);
+
switch (device->device_type) {
case ACPI_BUS_TYPE_POWER_BUTTON:
status = acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
@@ -655,11 +657,11 @@ static int acpi_button_probe(struct platform_device *pdev)
lid_device = device;
}
- device_init_wakeup(&pdev->dev, true);
pr_info("%s [%s]\n", name, acpi_device_bid(device));
return 0;
err_input_unregister:
+ device_init_wakeup(button->dev, false);
input_unregister_device(input);
err_remove_fs:
acpi_button_remove_fs(button);
@@ -670,10 +672,10 @@ err_free_button:
static void acpi_button_remove(struct platform_device *pdev)
{
- struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
struct acpi_button *button = platform_get_drvdata(pdev);
+ struct acpi_device *adev = button->adev;
- switch (device->device_type) {
+ switch (adev->device_type) {
case ACPI_BUS_TYPE_POWER_BUTTON:
acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
acpi_button_event);
@@ -683,7 +685,7 @@ static void acpi_button_remove(struct platform_device *pdev)
acpi_button_event);
break;
default:
- acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
+ acpi_remove_notify_handler(adev->handle, ACPI_DEVICE_NOTIFY,
button->type == ACPI_BUTTON_TYPE_LID ?
acpi_lid_notify :
acpi_button_notify);
@@ -691,6 +693,8 @@ static void acpi_button_remove(struct platform_device *pdev)
}
acpi_os_wait_events_complete();
+ device_init_wakeup(button->dev, false);
+
acpi_button_remove_fs(button);
input_unregister_device(button->input);
kfree(button);
diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
index a09bdabaa804..0e6ffb188fe7 100644
--- a/drivers/acpi/cppc_acpi.c
+++ b/drivers/acpi/cppc_acpi.c
@@ -362,7 +362,7 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd)
end:
if (cmd == CMD_WRITE) {
if (unlikely(ret)) {
- for_each_possible_cpu(i) {
+ for_each_online_cpu(i) {
struct cpc_desc *desc = per_cpu(cpc_desc_ptr, i);
if (!desc)
@@ -524,7 +524,7 @@ int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data)
else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY)
cpu_data->shared_type = CPUFREQ_SHARED_TYPE_ANY;
- for_each_possible_cpu(i) {
+ for_each_online_cpu(i) {
if (i == cpu)
continue;
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 197970339edc..f7edc664e064 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1754,12 +1754,10 @@ err:
static void acpi_ec_remove(struct platform_device *pdev)
{
- struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
struct acpi_ec *ec = platform_get_drvdata(pdev);
release_region(ec->data_addr, 1);
release_region(ec->command_addr, 1);
- device->driver_data = NULL;
if (ec != boot_ec) {
ec_remove_handlers(ec);
acpi_ec_free(ec);
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
index 361a7721a6a8..7da5ae5594a7 100644
--- a/drivers/acpi/power.c
+++ b/drivers/acpi/power.c
@@ -1113,6 +1113,19 @@ static const struct dmi_system_id dmi_leave_unused_power_resources_on[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE Click Mini L9W-B"),
},
},
+ {
+ /*
+ * THUNDEROBOT ZERO laptop: Due to its SSDT table bug, power
+ * resource 'PXP' will be shut down on initialization, making
+ * the NVMe #2 and the NVIDIA dGPU both unavailable (they're
+ * both controlled by 'PXP').
+ */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "THUNDEROBOT"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "ZERO"),
+ }
+
+ },
{}
};
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
index 7fc8ae7396d3..cb60d1d52e3e 100644
--- a/drivers/acpi/sbshc.c
+++ b/drivers/acpi/sbshc.c
@@ -275,13 +275,11 @@ static int acpi_smbus_hc_probe(struct platform_device *pdev)
static void acpi_smbus_hc_remove(struct platform_device *pdev)
{
- struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
struct acpi_smb_hc *hc = platform_get_drvdata(pdev);
acpi_ec_remove_query_handler(hc->ec, hc->query_bit);
acpi_os_wait_events_complete();
kfree(hc);
- device->driver_data = NULL;
}
module_platform_driver(acpi_smb_hc_driver);
diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c
index 4ee30c2897a2..418951639f51 100644
--- a/drivers/acpi/x86/utils.c
+++ b/drivers/acpi/x86/utils.c
@@ -82,6 +82,18 @@ static const struct override_status_id override_status_ids[] = {
}),
/*
+ * Lenovo Yoga Book uses PWM2 for touch keyboard backlight control.
+ * It needs to be enabled only for the Android device version (YB1-X90*
+ * aka YETI-11); the Windows version (YB1-X91*) uses ACPI control
+ * methods.
+ */
+ PRESENT_ENTRY_HID("80862289", "2", INTEL_ATOM_AIRMONT, {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"),
+ }),
+
+ /*
* The INT0002 device is necessary to clear wakeup interrupt sources
* on Cherry Trail devices, without it we get nobody cared IRQ msgs.
*/