Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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_