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_ 123