18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci#include <linux/module.h> 38c2ecf20Sopenharmony_ci#include <linux/sched/signal.h> 48c2ecf20Sopenharmony_ci#include <linux/acpi.h> 58c2ecf20Sopenharmony_ci#include <acpi/button.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ciMODULE_AUTHOR("Josh Triplett"); 88c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ACPI Tiny Power Button Driver"); 98c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic int power_signal __read_mostly = CONFIG_ACPI_TINY_POWER_BUTTON_SIGNAL; 128c2ecf20Sopenharmony_cimodule_param(power_signal, int, 0644); 138c2ecf20Sopenharmony_ciMODULE_PARM_DESC(power_signal, "Power button sends this signal to init"); 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistatic const struct acpi_device_id tiny_power_button_device_ids[] = { 168c2ecf20Sopenharmony_ci { ACPI_BUTTON_HID_POWER, 0 }, 178c2ecf20Sopenharmony_ci { ACPI_BUTTON_HID_POWERF, 0 }, 188c2ecf20Sopenharmony_ci { "", 0 }, 198c2ecf20Sopenharmony_ci}; 208c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(acpi, tiny_power_button_device_ids); 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic int acpi_noop_add_remove(struct acpi_device *device) 238c2ecf20Sopenharmony_ci{ 248c2ecf20Sopenharmony_ci return 0; 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic void acpi_tiny_power_button_notify(struct acpi_device *device, u32 event) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci kill_cad_pid(power_signal, 1); 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic struct acpi_driver acpi_tiny_power_button_driver = { 338c2ecf20Sopenharmony_ci .name = "tiny-power-button", 348c2ecf20Sopenharmony_ci .class = "tiny-power-button", 358c2ecf20Sopenharmony_ci .ids = tiny_power_button_device_ids, 368c2ecf20Sopenharmony_ci .ops = { 378c2ecf20Sopenharmony_ci .add = acpi_noop_add_remove, 388c2ecf20Sopenharmony_ci .remove = acpi_noop_add_remove, 398c2ecf20Sopenharmony_ci .notify = acpi_tiny_power_button_notify, 408c2ecf20Sopenharmony_ci }, 418c2ecf20Sopenharmony_ci}; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cimodule_driver(acpi_tiny_power_button_driver, 448c2ecf20Sopenharmony_ci acpi_bus_register_driver, 458c2ecf20Sopenharmony_ci acpi_bus_unregister_driver); 46