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