162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Asus PC WMI hotkey driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright(C) 2010 Intel Corporation. 662306a36Sopenharmony_ci * Copyright(C) 2010-2011 Corentin Chary <corentin.chary@gmail.com> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Portions based on wistron_btns.c: 962306a36Sopenharmony_ci * Copyright (C) 2005 Miloslav Trmac <mitr@volny.cz> 1062306a36Sopenharmony_ci * Copyright (C) 2005 Bernhard Rosenkraenzer <bero@arklinux.org> 1162306a36Sopenharmony_ci * Copyright (C) 2005 Dmitry Torokhov <dtor@mail.ru> 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef _ASUS_WMI_H_ 1562306a36Sopenharmony_ci#define _ASUS_WMI_H_ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include <linux/platform_device.h> 1862306a36Sopenharmony_ci#include <linux/i8042.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define ASUS_WMI_KEY_IGNORE (-1) 2162306a36Sopenharmony_ci#define ASUS_WMI_BRN_DOWN 0x2e 2262306a36Sopenharmony_ci#define ASUS_WMI_BRN_UP 0x2f 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistruct module; 2562306a36Sopenharmony_cistruct key_entry; 2662306a36Sopenharmony_cistruct asus_wmi; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cienum asus_wmi_tablet_switch_mode { 2962306a36Sopenharmony_ci asus_wmi_no_tablet_switch, 3062306a36Sopenharmony_ci asus_wmi_kbd_dock_devid, 3162306a36Sopenharmony_ci asus_wmi_lid_flip_devid, 3262306a36Sopenharmony_ci asus_wmi_lid_flip_rog_devid, 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct quirk_entry { 3662306a36Sopenharmony_ci bool hotplug_wireless; 3762306a36Sopenharmony_ci bool scalar_panel_brightness; 3862306a36Sopenharmony_ci bool store_backlight_power; 3962306a36Sopenharmony_ci bool wmi_backlight_set_devstate; 4062306a36Sopenharmony_ci bool wmi_force_als_set; 4162306a36Sopenharmony_ci bool wmi_ignore_fan; 4262306a36Sopenharmony_ci enum asus_wmi_tablet_switch_mode tablet_switch_mode; 4362306a36Sopenharmony_ci int wapf; 4462306a36Sopenharmony_ci /* 4562306a36Sopenharmony_ci * For machines with AMD graphic chips, it will send out WMI event 4662306a36Sopenharmony_ci * and ACPI interrupt at the same time while hitting the hotkey. 4762306a36Sopenharmony_ci * To simplify the problem, we just have to ignore the WMI event, 4862306a36Sopenharmony_ci * and let the ACPI interrupt to send out the key event. 4962306a36Sopenharmony_ci */ 5062306a36Sopenharmony_ci int no_display_toggle; 5162306a36Sopenharmony_ci u32 xusb2pr; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci bool (*i8042_filter)(unsigned char data, unsigned char str, 5462306a36Sopenharmony_ci struct serio *serio); 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct asus_wmi_driver { 5862306a36Sopenharmony_ci int brightness; 5962306a36Sopenharmony_ci int panel_power; 6062306a36Sopenharmony_ci int wlan_ctrl_by_user; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci const char *name; 6362306a36Sopenharmony_ci struct module *owner; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci const char *event_guid; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci const struct key_entry *keymap; 6862306a36Sopenharmony_ci const char *input_name; 6962306a36Sopenharmony_ci const char *input_phys; 7062306a36Sopenharmony_ci struct quirk_entry *quirks; 7162306a36Sopenharmony_ci /* Returns new code, value, and autorelease values in arguments. 7262306a36Sopenharmony_ci * Return ASUS_WMI_KEY_IGNORE in code if event should be ignored. */ 7362306a36Sopenharmony_ci void (*key_filter) (struct asus_wmi_driver *driver, int *code, 7462306a36Sopenharmony_ci unsigned int *value, bool *autorelease); 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci int (*probe) (struct platform_device *device); 7762306a36Sopenharmony_ci void (*detect_quirks) (struct asus_wmi_driver *driver); 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci struct platform_driver platform_driver; 8062306a36Sopenharmony_ci struct platform_device *platform_device; 8162306a36Sopenharmony_ci}; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciint asus_wmi_register_driver(struct asus_wmi_driver *driver); 8462306a36Sopenharmony_civoid asus_wmi_unregister_driver(struct asus_wmi_driver *driver); 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci#endif /* !_ASUS_WMI_H_ */ 87