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_super_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_super_swap_conf fn_super_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