162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci/* 462306a36Sopenharmony_ci * msi-ec: MSI laptops' embedded controller driver. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2023 Jose Angel Pastrana <japp0005@red.ujaen.es> 762306a36Sopenharmony_ci * Copyright (C) 2023 Aakash Singh <mail@singhaakash.dev> 862306a36Sopenharmony_ci * Copyright (C) 2023 Nikita Kravets <teackot@gmail.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef _MSI_EC_H_ 1262306a36Sopenharmony_ci#define _MSI_EC_H_ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/types.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define MSI_EC_DRIVER_NAME "msi-ec" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define MSI_EC_ADDR_UNKNOWN 0xff01 // unknown address 1962306a36Sopenharmony_ci#define MSI_EC_ADDR_UNSUPP 0xff01 // unsupported parameter 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci// Firmware info addresses are universal 2262306a36Sopenharmony_ci#define MSI_EC_FW_VERSION_ADDRESS 0xa0 2362306a36Sopenharmony_ci#define MSI_EC_FW_DATE_ADDRESS 0xac 2462306a36Sopenharmony_ci#define MSI_EC_FW_TIME_ADDRESS 0xb4 2562306a36Sopenharmony_ci#define MSI_EC_FW_VERSION_LENGTH 12 2662306a36Sopenharmony_ci#define MSI_EC_FW_DATE_LENGTH 8 2762306a36Sopenharmony_ci#define MSI_EC_FW_TIME_LENGTH 8 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistruct msi_ec_charge_control_conf { 3062306a36Sopenharmony_ci int address; 3162306a36Sopenharmony_ci int offset_start; 3262306a36Sopenharmony_ci int offset_end; 3362306a36Sopenharmony_ci int range_min; 3462306a36Sopenharmony_ci int range_max; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct msi_ec_webcam_conf { 3862306a36Sopenharmony_ci int address; 3962306a36Sopenharmony_ci int block_address; 4062306a36Sopenharmony_ci int bit; 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct msi_ec_fn_super_swap_conf { 4462306a36Sopenharmony_ci int address; 4562306a36Sopenharmony_ci int bit; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistruct msi_ec_cooler_boost_conf { 4962306a36Sopenharmony_ci int address; 5062306a36Sopenharmony_ci int bit; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define MSI_EC_MODE_NULL { NULL, 0 } 5462306a36Sopenharmony_cistruct msi_ec_mode { 5562306a36Sopenharmony_ci const char *name; 5662306a36Sopenharmony_ci int value; 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cistruct msi_ec_shift_mode_conf { 6062306a36Sopenharmony_ci int address; 6162306a36Sopenharmony_ci struct msi_ec_mode modes[5]; // fixed size for easier hard coding 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct msi_ec_super_battery_conf { 6562306a36Sopenharmony_ci int address; 6662306a36Sopenharmony_ci int mask; 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistruct msi_ec_fan_mode_conf { 7062306a36Sopenharmony_ci int address; 7162306a36Sopenharmony_ci struct msi_ec_mode modes[5]; // fixed size for easier hard coding 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cistruct msi_ec_cpu_conf { 7562306a36Sopenharmony_ci int rt_temp_address; 7662306a36Sopenharmony_ci int rt_fan_speed_address; // realtime 7762306a36Sopenharmony_ci int rt_fan_speed_base_min; 7862306a36Sopenharmony_ci int rt_fan_speed_base_max; 7962306a36Sopenharmony_ci int bs_fan_speed_address; // basic 8062306a36Sopenharmony_ci int bs_fan_speed_base_min; 8162306a36Sopenharmony_ci int bs_fan_speed_base_max; 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistruct msi_ec_gpu_conf { 8562306a36Sopenharmony_ci int rt_temp_address; 8662306a36Sopenharmony_ci int rt_fan_speed_address; // realtime 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct msi_ec_led_conf { 9062306a36Sopenharmony_ci int micmute_led_address; 9162306a36Sopenharmony_ci int mute_led_address; 9262306a36Sopenharmony_ci int bit; 9362306a36Sopenharmony_ci}; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#define MSI_EC_KBD_BL_STATE_MASK 0x3 9662306a36Sopenharmony_cistruct msi_ec_kbd_bl_conf { 9762306a36Sopenharmony_ci int bl_mode_address; 9862306a36Sopenharmony_ci int bl_modes[2]; 9962306a36Sopenharmony_ci int max_mode; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci int bl_state_address; 10262306a36Sopenharmony_ci int state_base_value; 10362306a36Sopenharmony_ci int max_state; 10462306a36Sopenharmony_ci}; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cistruct msi_ec_conf { 10762306a36Sopenharmony_ci const char * const *allowed_fw; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci struct msi_ec_charge_control_conf charge_control; 11062306a36Sopenharmony_ci struct msi_ec_webcam_conf webcam; 11162306a36Sopenharmony_ci struct msi_ec_fn_super_swap_conf fn_super_swap; 11262306a36Sopenharmony_ci struct msi_ec_cooler_boost_conf cooler_boost; 11362306a36Sopenharmony_ci struct msi_ec_shift_mode_conf shift_mode; 11462306a36Sopenharmony_ci struct msi_ec_super_battery_conf super_battery; 11562306a36Sopenharmony_ci struct msi_ec_fan_mode_conf fan_mode; 11662306a36Sopenharmony_ci struct msi_ec_cpu_conf cpu; 11762306a36Sopenharmony_ci struct msi_ec_gpu_conf gpu; 11862306a36Sopenharmony_ci struct msi_ec_led_conf leds; 11962306a36Sopenharmony_ci struct msi_ec_kbd_bl_conf kbd_bl; 12062306a36Sopenharmony_ci}; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#endif // _MSI_EC_H_ 123