Hi, On 5/19/21 7:44 PM, Mario Limonciello wrote: > This driver was originally intended to support some HP laptops, but > later support was added for Xioami and AMD laptops. > > Rename it to make it clear that it supports a larger variety of > systems. > > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> Thank you for your patch, I've applied this patch to my review-hans branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans Note it will show up in my review-hans branch once I've pushed my local branch there, which might take a while. Once I've run some tests on this branch the patches there will be added to the platform-drivers-x86/for-next branch and eventually will be included in the pdx86 pull-request to Linus for the next merge-window. Regards, Hans > --- > drivers/platform/x86/Kconfig | 9 ++- > drivers/platform/x86/Makefile | 3 +- > drivers/platform/x86/hp-wireless.c | 102 ------------------------ > drivers/platform/x86/wireless-hotkey.c | 103 +++++++++++++++++++++++++ > 4 files changed, 109 insertions(+), 108 deletions(-) > delete mode 100644 drivers/platform/x86/hp-wireless.c > create mode 100644 drivers/platform/x86/wireless-hotkey.c > > diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig > index 60592fb88e7a..9a668dae2738 100644 > --- a/drivers/platform/x86/Kconfig > +++ b/drivers/platform/x86/Kconfig > @@ -415,16 +415,17 @@ config HP_ACCEL > To compile this driver as a module, choose M here: the module will > be called hp_accel. > > -config HP_WIRELESS > - tristate "HP wireless button" > +config WIRELESS_HOTKEY > + tristate "Wireless hotkey button" > depends on ACPI > depends on INPUT > help > - This driver provides supports for new HP wireless button for Windows 8. > + This driver provides supports for the wireless buttons found on some AMD, > + HP, & Xioami laptops. > On such systems the driver should load automatically (via ACPI alias). > > To compile this driver as a module, choose M here: the module will > - be called hp-wireless. > + be called wireless-hotkey. > > config HP_WMI > tristate "HP WMI extras" > diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile > index dcc8cdb95b4d..f4e7630186b0 100644 > --- a/drivers/platform/x86/Makefile > +++ b/drivers/platform/x86/Makefile > @@ -52,7 +52,6 @@ obj-$(CONFIG_GPD_POCKET_FAN) += gpd-pocket-fan.o > > # Hewlett Packard > obj-$(CONFIG_HP_ACCEL) += hp_accel.o > -obj-$(CONFIG_HP_WIRELESS) += hp-wireless.o > obj-$(CONFIG_HP_WMI) += hp-wmi.o > obj-$(CONFIG_TC1100_WMI) += tc1100-wmi.o > > @@ -115,7 +114,7 @@ obj-$(CONFIG_TOPSTAR_LAPTOP) += topstar-laptop.o > obj-$(CONFIG_I2C_MULTI_INSTANTIATE) += i2c-multi-instantiate.o > obj-$(CONFIG_MLX_PLATFORM) += mlx-platform.o > obj-$(CONFIG_TOUCHSCREEN_DMI) += touchscreen_dmi.o > - > +obj-$(CONFIG_WIRELESS_HOTKEY) += wireless-hotkey.o > # Intel uncore drivers > obj-$(CONFIG_INTEL_IPS) += intel_ips.o > obj-$(CONFIG_INTEL_RST) += intel-rst.o > diff --git a/drivers/platform/x86/hp-wireless.c b/drivers/platform/x86/hp-wireless.c > deleted file mode 100644 > index 0753ef18e721..000000000000 > --- a/drivers/platform/x86/hp-wireless.c > +++ /dev/null > @@ -1,102 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-or-later > -/* > - * Airplane mode button for HP & Xiaomi laptops > - * > - * Copyright (C) 2014-2017 Alex Hung <alex.hung@xxxxxxxxxxxxx> > - */ > - > -#include <linux/kernel.h> > -#include <linux/module.h> > -#include <linux/init.h> > -#include <linux/input.h> > -#include <linux/platform_device.h> > -#include <linux/acpi.h> > -#include <acpi/acpi_bus.h> > - > -MODULE_LICENSE("GPL"); > -MODULE_AUTHOR("Alex Hung"); > -MODULE_ALIAS("acpi*:HPQ6001:*"); > -MODULE_ALIAS("acpi*:WSTADEF:*"); > -MODULE_ALIAS("acpi*:AMDI0051:*"); > - > -static struct input_dev *hpwl_input_dev; > - > -static const struct acpi_device_id hpwl_ids[] = { > - {"HPQ6001", 0}, > - {"WSTADEF", 0}, > - {"AMDI0051", 0}, > - {"", 0}, > -}; > - > -static int hp_wireless_input_setup(void) > -{ > - int err; > - > - hpwl_input_dev = input_allocate_device(); > - if (!hpwl_input_dev) > - return -ENOMEM; > - > - hpwl_input_dev->name = "HP Wireless hotkeys"; > - hpwl_input_dev->phys = "hpq6001/input0"; > - hpwl_input_dev->id.bustype = BUS_HOST; > - hpwl_input_dev->evbit[0] = BIT(EV_KEY); > - set_bit(KEY_RFKILL, hpwl_input_dev->keybit); > - > - err = input_register_device(hpwl_input_dev); > - if (err) > - goto err_free_dev; > - > - return 0; > - > -err_free_dev: > - input_free_device(hpwl_input_dev); > - return err; > -} > - > -static void hp_wireless_input_destroy(void) > -{ > - input_unregister_device(hpwl_input_dev); > -} > - > -static void hpwl_notify(struct acpi_device *acpi_dev, u32 event) > -{ > - if (event != 0x80) { > - pr_info("Received unknown event (0x%x)\n", event); > - return; > - } > - > - input_report_key(hpwl_input_dev, KEY_RFKILL, 1); > - input_sync(hpwl_input_dev); > - input_report_key(hpwl_input_dev, KEY_RFKILL, 0); > - input_sync(hpwl_input_dev); > -} > - > -static int hpwl_add(struct acpi_device *device) > -{ > - int err; > - > - err = hp_wireless_input_setup(); > - if (err) > - pr_err("Failed to setup hp wireless hotkeys\n"); > - > - return err; > -} > - > -static int hpwl_remove(struct acpi_device *device) > -{ > - hp_wireless_input_destroy(); > - return 0; > -} > - > -static struct acpi_driver hpwl_driver = { > - .name = "hp-wireless", > - .owner = THIS_MODULE, > - .ids = hpwl_ids, > - .ops = { > - .add = hpwl_add, > - .remove = hpwl_remove, > - .notify = hpwl_notify, > - }, > -}; > - > -module_acpi_driver(hpwl_driver); > diff --git a/drivers/platform/x86/wireless-hotkey.c b/drivers/platform/x86/wireless-hotkey.c > new file mode 100644 > index 000000000000..b010e4ca3383 > --- /dev/null > +++ b/drivers/platform/x86/wireless-hotkey.c > @@ -0,0 +1,103 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Airplane mode button for AMD, HP & Xiaomi laptops > + * > + * Copyright (C) 2014-2017 Alex Hung <alex.hung@xxxxxxxxxxxxx> > + * Copyright (C) 2021 Advanced Micro Devices > + */ > + > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/input.h> > +#include <linux/platform_device.h> > +#include <linux/acpi.h> > +#include <acpi/acpi_bus.h> > + > +MODULE_LICENSE("GPL"); > +MODULE_AUTHOR("Alex Hung"); > +MODULE_ALIAS("acpi*:HPQ6001:*"); > +MODULE_ALIAS("acpi*:WSTADEF:*"); > +MODULE_ALIAS("acpi*:AMDI0051:*"); > + > +static struct input_dev *wl_input_dev; > + > +static const struct acpi_device_id wl_ids[] = { > + {"HPQ6001", 0}, > + {"WSTADEF", 0}, > + {"AMDI0051", 0}, > + {"", 0}, > +}; > + > +static int wireless_input_setup(void) > +{ > + int err; > + > + wl_input_dev = input_allocate_device(); > + if (!wl_input_dev) > + return -ENOMEM; > + > + wl_input_dev->name = "Wireless hotkeys"; > + wl_input_dev->phys = "hpq6001/input0"; > + wl_input_dev->id.bustype = BUS_HOST; > + wl_input_dev->evbit[0] = BIT(EV_KEY); > + set_bit(KEY_RFKILL, wl_input_dev->keybit); > + > + err = input_register_device(wl_input_dev); > + if (err) > + goto err_free_dev; > + > + return 0; > + > +err_free_dev: > + input_free_device(wl_input_dev); > + return err; > +} > + > +static void wireless_input_destroy(void) > +{ > + input_unregister_device(wl_input_dev); > +} > + > +static void wl_notify(struct acpi_device *acpi_dev, u32 event) > +{ > + if (event != 0x80) { > + pr_info("Received unknown event (0x%x)\n", event); > + return; > + } > + > + input_report_key(wl_input_dev, KEY_RFKILL, 1); > + input_sync(wl_input_dev); > + input_report_key(wl_input_dev, KEY_RFKILL, 0); > + input_sync(wl_input_dev); > +} > + > +static int wl_add(struct acpi_device *device) > +{ > + int err; > + > + err = wireless_input_setup(); > + if (err) > + pr_err("Failed to setup hp wireless hotkeys\n"); > + > + return err; > +} > + > +static int wl_remove(struct acpi_device *device) > +{ > + wireless_input_destroy(); > + return 0; > +} > + > +static struct acpi_driver wl_driver = { > + .name = "wireless-hotkey", > + .owner = THIS_MODULE, > + .ids = wl_ids, > + .ops = { > + .add = wl_add, > + .remove = wl_remove, > + .notify = wl_notify, > + }, > +}; > + > +module_acpi_driver(wl_driver); >