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