^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Asus PC WMI hotkey driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright(C) 2010 Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright(C) 2010-2011 Corentin Chary <corentin.chary@gmail.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Portions based on wistron_btns.c:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 2005 Miloslav Trmac <mitr@volny.cz>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Copyright (C) 2005 Bernhard Rosenkraenzer <bero@arklinux.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * Copyright (C) 2005 Dmitry Torokhov <dtor@mail.ru>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #ifndef _ASUS_WMI_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define _ASUS_WMI_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/i8042.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define ASUS_WMI_KEY_IGNORE (-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define ASUS_WMI_BRN_DOWN 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define ASUS_WMI_BRN_UP 0x2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct module;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct key_entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct asus_wmi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct quirk_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) bool hotplug_wireless;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) bool scalar_panel_brightness;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) bool store_backlight_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) bool wmi_backlight_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) bool wmi_backlight_native;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) bool wmi_backlight_set_devstate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) bool wmi_force_als_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) bool use_kbd_dock_devid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) int wapf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * For machines with AMD graphic chips, it will send out WMI event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * and ACPI interrupt at the same time while hitting the hotkey.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * To simplify the problem, we just have to ignore the WMI event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * and let the ACPI interrupt to send out the key event.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) int no_display_toggle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) u32 xusb2pr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) bool (*i8042_filter)(unsigned char data, unsigned char str,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct serio *serio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct asus_wmi_driver {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) int brightness;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) int panel_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) int wlan_ctrl_by_user;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct module *owner;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) const char *event_guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) const struct key_entry *keymap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) const char *input_name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) const char *input_phys;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct quirk_entry *quirks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* Returns new code, value, and autorelease values in arguments.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) * Return ASUS_WMI_KEY_IGNORE in code if event should be ignored. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) void (*key_filter) (struct asus_wmi_driver *driver, int *code,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) unsigned int *value, bool *autorelease);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) int (*probe) (struct platform_device *device);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) void (*detect_quirks) (struct asus_wmi_driver *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct platform_driver platform_driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) struct platform_device *platform_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) int asus_wmi_register_driver(struct asus_wmi_driver *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) void asus_wmi_unregister_driver(struct asus_wmi_driver *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #endif /* !_ASUS_WMI_H_ */