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