Linux 6.10-rc1
[sfrench/cifs-2.6.git] / drivers / platform / x86 / msi-ec.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4  * msi-ec: MSI laptops' embedded controller driver.
5  *
6  * Copyright (C) 2023 Jose Angel Pastrana <japp0005@red.ujaen.es>
7  * Copyright (C) 2023 Aakash Singh <mail@singhaakash.dev>
8  * Copyright (C) 2023 Nikita Kravets <teackot@gmail.com>
9  */
10
11 #ifndef _MSI_EC_H_
12 #define _MSI_EC_H_
13
14 #include <linux/types.h>
15
16 #define MSI_EC_DRIVER_NAME "msi-ec"
17
18 #define MSI_EC_ADDR_UNKNOWN 0xff01 // unknown address
19 #define MSI_EC_ADDR_UNSUPP  0xff01 // unsupported parameter
20
21 // Firmware info addresses are universal
22 #define MSI_EC_FW_VERSION_ADDRESS 0xa0
23 #define MSI_EC_FW_DATE_ADDRESS    0xac
24 #define MSI_EC_FW_TIME_ADDRESS    0xb4
25 #define MSI_EC_FW_VERSION_LENGTH  12
26 #define MSI_EC_FW_DATE_LENGTH     8
27 #define MSI_EC_FW_TIME_LENGTH     8
28
29 struct msi_ec_charge_control_conf {
30         int address;
31         int offset_start;
32         int offset_end;
33         int range_min;
34         int range_max;
35 };
36
37 struct msi_ec_webcam_conf {
38         int address;
39         int block_address;
40         int bit;
41 };
42
43 struct msi_ec_fn_win_swap_conf {
44         int address;
45         int bit;
46 };
47
48 struct msi_ec_cooler_boost_conf {
49         int address;
50         int bit;
51 };
52
53 #define MSI_EC_MODE_NULL { NULL, 0 }
54 struct msi_ec_mode {
55         const char *name;
56         int value;
57 };
58
59 struct msi_ec_shift_mode_conf {
60         int address;
61         struct msi_ec_mode modes[5]; // fixed size for easier hard coding
62 };
63
64 struct msi_ec_super_battery_conf {
65         int address;
66         int mask;
67 };
68
69 struct msi_ec_fan_mode_conf {
70         int address;
71         struct msi_ec_mode modes[5]; // fixed size for easier hard coding
72 };
73
74 struct msi_ec_cpu_conf {
75         int rt_temp_address;
76         int rt_fan_speed_address; // realtime
77         int rt_fan_speed_base_min;
78         int rt_fan_speed_base_max;
79         int bs_fan_speed_address; // basic
80         int bs_fan_speed_base_min;
81         int bs_fan_speed_base_max;
82 };
83
84 struct msi_ec_gpu_conf {
85         int rt_temp_address;
86         int rt_fan_speed_address; // realtime
87 };
88
89 struct msi_ec_led_conf {
90         int micmute_led_address;
91         int mute_led_address;
92         int bit;
93 };
94
95 #define MSI_EC_KBD_BL_STATE_MASK 0x3
96 struct msi_ec_kbd_bl_conf {
97         int bl_mode_address;
98         int bl_modes[2];
99         int max_mode;
100
101         int bl_state_address;
102         int state_base_value;
103         int max_state;
104 };
105
106 struct msi_ec_conf {
107         const char * const *allowed_fw;
108
109         struct msi_ec_charge_control_conf charge_control;
110         struct msi_ec_webcam_conf         webcam;
111         struct msi_ec_fn_win_swap_conf    fn_win_swap;
112         struct msi_ec_cooler_boost_conf   cooler_boost;
113         struct msi_ec_shift_mode_conf     shift_mode;
114         struct msi_ec_super_battery_conf  super_battery;
115         struct msi_ec_fan_mode_conf       fan_mode;
116         struct msi_ec_cpu_conf            cpu;
117         struct msi_ec_gpu_conf            gpu;
118         struct msi_ec_led_conf            leds;
119         struct msi_ec_kbd_bl_conf         kbd_bl;
120 };
121
122 #endif // _MSI_EC_H_