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