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
29struct 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
37struct msi_ec_webcam_conf {
38 int address;
39 int block_address;
40 int bit;
41};
42
43struct msi_ec_fn_win_swap_conf {
44 int address;
45 int bit;
46};
47
48struct msi_ec_cooler_boost_conf {
49 int address;
50 int bit;
51};
52
53#define MSI_EC_MODE_NULL { NULL, 0 }
54struct msi_ec_mode {
55 const char *name;
56 int value;
57};
58
59struct msi_ec_shift_mode_conf {
60 int address;
61 struct msi_ec_mode modes[5]; // fixed size for easier hard coding
62};
63
64struct msi_ec_super_battery_conf {
65 int address;
66 int mask;
67};
68
69struct msi_ec_fan_mode_conf {
70 int address;
71 struct msi_ec_mode modes[5]; // fixed size for easier hard coding
72};
73
74struct 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
84struct msi_ec_gpu_conf {
85 int rt_temp_address;
86 int rt_fan_speed_address; // realtime
87};
88
89struct 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
96struct 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
106struct 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_
123

source code of linux/drivers/platform/x86/msi-ec.h