platform/x86: msi-ec: Add more EC configs
authorNikita Kravets <teackot@gmail.com>
Fri, 6 Oct 2023 17:53:57 +0000 (20:53 +0300)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 9 Oct 2023 13:06:42 +0000 (16:06 +0300)
This patch adds configurations for new EC firmware from the downstream
version of the driver.

Cc: Aakash Singh <mail@singhaakash.dev>
Cc: Jose Angel Pastrana <japp0005@red.ujaen.es>
Signed-off-by: Nikita Kravets <teackot@gmail.com>
Link: https://lore.kernel.org/r/20231006175352.1753017-9-teackot@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/msi-ec.c

index 48311d5a41ce60fe65531d01b4872ad05c1567ab..2be92ba4592656f4798210c70e015708f59c1394 100644 (file)
@@ -668,6 +668,467 @@ static struct msi_ec_conf CONF7 __initdata = {
        },
 };
 
+static const char * const ALLOWED_FW_8[] __initconst = {
+       "14F1EMS1.115",
+       NULL
+};
+
+static struct msi_ec_conf CONF8 __initdata = {
+       .allowed_fw = ALLOWED_FW_8,
+       .charge_control = {
+               .address      = 0xd7,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = MSI_EC_ADDR_UNSUPP,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = 0xe8,
+               .bit     = 4,
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xd2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 },
+                       { SM_COMFORT_NAME, 0xc1 },
+                       { SM_SPORT_NAME,   0xc0 },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = 0xeb,
+               .mask    = 0x0f,
+       },
+       .fan_mode = {
+               .address = 0xd4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_BASIC_NAME,    0x4d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = 0x71,
+               .rt_fan_speed_base_min = 0x19,
+               .rt_fan_speed_base_max = 0x37,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+               .bs_fan_speed_base_min = 0x00,
+               .bs_fan_speed_base_max = 0x0f,
+       },
+       .gpu = {
+               .rt_temp_address      = MSI_EC_ADDR_UNKNOWN,
+               .rt_fan_speed_address = MSI_EC_ADDR_UNKNOWN,
+       },
+       .leds = {
+               .micmute_led_address = MSI_EC_ADDR_UNSUPP,
+               .mute_led_address    = 0x2d,
+               .bit                 = 1,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = MSI_EC_ADDR_UNKNOWN, // ?
+               .bl_modes         = { 0x00, 0x08 }, // ?
+               .max_mode         = 1, // ?
+               .bl_state_address = MSI_EC_ADDR_UNSUPP, // not functional
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
+static const char * const ALLOWED_FW_9[] __initconst = {
+       "14JKEMS1.104",
+       NULL
+};
+
+static struct msi_ec_conf CONF9 __initdata = {
+       .allowed_fw = ALLOWED_FW_9,
+       .charge_control = {
+               .address      = 0xef,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = 0x2f,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = 0xbf,
+               .bit     = 4,
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xf2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 },
+                       { SM_COMFORT_NAME, 0xc1 },
+                       { SM_SPORT_NAME,   0xc0 },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = MSI_EC_ADDR_UNSUPP, // unsupported or enabled by ECO shift
+               .mask    = 0x0f,
+       },
+       .fan_mode = {
+               .address = 0xf4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_ADVANCED_NAME, 0x8d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = 0x71,
+               .rt_fan_speed_base_min = 0x00,
+               .rt_fan_speed_base_max = 0x96,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+               .bs_fan_speed_base_min = 0x00,
+               .bs_fan_speed_base_max = 0x0f,
+       },
+       .gpu = {
+               .rt_temp_address      = MSI_EC_ADDR_UNSUPP,
+               .rt_fan_speed_address = MSI_EC_ADDR_UNSUPP,
+       },
+       .leds = {
+               .micmute_led_address = 0x2b,
+               .mute_led_address    = 0x2c,
+               .bit                 = 2,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = MSI_EC_ADDR_UNSUPP, // not presented in MSI app
+               .bl_modes         = { 0x00, 0x08 },
+               .max_mode         = 1,
+               .bl_state_address = 0xf3,
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
+static const char * const ALLOWED_FW_10[] __initconst = {
+       "1582EMS1.107", // GF66 11UC
+       NULL
+};
+
+static struct msi_ec_conf CONF10 __initdata = {
+       .allowed_fw = ALLOWED_FW_10,
+       .charge_control = {
+               .address      = 0xd7,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = 0x2f,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = MSI_EC_ADDR_UNSUPP,
+               .bit     = 4,
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xd2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 },
+                       { SM_COMFORT_NAME, 0xc1 },
+                       { SM_SPORT_NAME,   0xc0 },
+                       { SM_TURBO_NAME,   0xc4 },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = 0xe5,
+               .mask    = 0x0f,
+       },
+       .fan_mode = {
+               .address = 0xd4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_ADVANCED_NAME, 0x8d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = 0x71, // ?
+               .rt_fan_speed_base_min = 0x19,
+               .rt_fan_speed_base_max = 0x37,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNKNOWN, // ?
+               .bs_fan_speed_base_min = 0x00,
+               .bs_fan_speed_base_max = 0x0f,
+       },
+       .gpu = {
+               .rt_temp_address      = 0x80,
+               .rt_fan_speed_address = 0x89,
+       },
+       .leds = {
+               .micmute_led_address = 0x2c,
+               .mute_led_address    = 0x2d,
+               .bit                 = 1,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = 0x2c,
+               .bl_modes         = { 0x00, 0x08 },
+               .max_mode         = 1,
+               .bl_state_address = 0xd3,
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
+static const char * const ALLOWED_FW_11[] __initconst = {
+       "16S6EMS1.111", // Prestige 15 a11scx
+       "1552EMS1.115", // Modern 15 a11m
+       NULL
+};
+
+static struct msi_ec_conf CONF11 __initdata = {
+       .allowed_fw = ALLOWED_FW_11,
+       .charge_control = {
+               .address      = 0xd7,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = MSI_EC_ADDR_UNKNOWN,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = 0xe8,
+               .bit     = 4,
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xd2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 },
+                       { SM_COMFORT_NAME, 0xc1 },
+                       { SM_SPORT_NAME,   0xc0 },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = 0xeb,
+               .mask = 0x0f,
+       },
+       .fan_mode = {
+               .address = 0xd4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_ADVANCED_NAME, 0x4d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+       },
+       .gpu = {
+               .rt_temp_address      = MSI_EC_ADDR_UNSUPP,
+               .rt_fan_speed_address = MSI_EC_ADDR_UNSUPP,
+       },
+       .leds = {
+               .micmute_led_address = 0x2c,
+               .mute_led_address    = 0x2d,
+               .bit                 = 1,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = MSI_EC_ADDR_UNKNOWN,
+               .bl_modes         = {}, // ?
+               .max_mode         = 1, // ?
+               .bl_state_address = 0xd3,
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
+static const char * const ALLOWED_FW_12[] __initconst = {
+       "16R6EMS1.104", // GF63 Thin 11UC
+       NULL
+};
+
+static struct msi_ec_conf CONF12 __initdata = {
+       .allowed_fw = ALLOWED_FW_12,
+       .charge_control = {
+               .address      = 0xd7,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = 0x2f,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = 0xe8,
+               .bit     = 4,
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xd2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 },
+                       { SM_COMFORT_NAME, 0xc1 },
+                       { SM_SPORT_NAME,   0xc0 },
+                       { SM_TURBO_NAME,   0xc4 },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = MSI_EC_ADDR_UNSUPP, // 0xeb
+               .mask    = 0x0f, // 00, 0f
+       },
+       .fan_mode = {
+               .address = 0xd4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_ADVANCED_NAME, 0x8d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = 0x71,
+               .rt_fan_speed_base_min = 0x19,
+               .rt_fan_speed_base_max = 0x37,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+               .bs_fan_speed_base_min = 0x00,
+               .bs_fan_speed_base_max = 0x0f,
+       },
+       .gpu = {
+               .rt_temp_address      = MSI_EC_ADDR_UNSUPP,
+               .rt_fan_speed_address = 0x89,
+       },
+       .leds = {
+               .micmute_led_address = MSI_EC_ADDR_UNSUPP,
+               .mute_led_address    = 0x2d,
+               .bit                 = 1,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = MSI_EC_ADDR_UNKNOWN,
+               .bl_modes         = { 0x00, 0x08 },
+               .max_mode         = 1,
+               .bl_state_address = 0xd3,
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
+static const char * const ALLOWED_FW_13[] __initconst = {
+       "1594EMS1.109", // MSI Prestige 16 Studio A13VE
+       NULL
+};
+
+static struct msi_ec_conf CONF13 __initdata = {
+       .allowed_fw = ALLOWED_FW_13,
+       .charge_control = {
+               .address      = 0xd7,
+               .offset_start = 0x8a,
+               .offset_end   = 0x80,
+               .range_min    = 0x8a,
+               .range_max    = 0xe4,
+       },
+       .webcam = {
+               .address       = 0x2e,
+               .block_address = 0x2f,
+               .bit           = 1,
+       },
+       .fn_win_swap = {
+               .address = 0xe8,
+               .bit     = 4, // 0x00-0x10
+       },
+       .cooler_boost = {
+               .address = 0x98,
+               .bit     = 7,
+       },
+       .shift_mode = {
+               .address = 0xd2,
+               .modes = {
+                       { SM_ECO_NAME,     0xc2 }, // super battery
+                       { SM_COMFORT_NAME, 0xc1 }, // balanced
+                       { SM_TURBO_NAME,   0xc4 }, // extreme
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .super_battery = {
+               .address = MSI_EC_ADDR_UNSUPP,
+               .mask    = 0x0f, // 00, 0f
+       },
+       .fan_mode = {
+               .address = 0xd4,
+               .modes = {
+                       { FM_AUTO_NAME,     0x0d },
+                       { FM_SILENT_NAME,   0x1d },
+                       { FM_ADVANCED_NAME, 0x8d },
+                       MSI_EC_MODE_NULL
+               },
+       },
+       .cpu = {
+               .rt_temp_address       = 0x68,
+               .rt_fan_speed_address  = 0x71, // 0x0-0x96
+               .rt_fan_speed_base_min = 0x00,
+               .rt_fan_speed_base_max = 0x96,
+               .bs_fan_speed_address  = MSI_EC_ADDR_UNSUPP,
+               .bs_fan_speed_base_min = 0x00,
+               .bs_fan_speed_base_max = 0x0f,
+       },
+       .gpu = {
+               .rt_temp_address      = 0x80,
+               .rt_fan_speed_address = 0x89,
+       },
+       .leds = {
+               .micmute_led_address = 0x2c,
+               .mute_led_address    = 0x2d,
+               .bit                 = 1,
+       },
+       .kbd_bl = {
+               .bl_mode_address  = 0x2c, // KB auto turn off
+               .bl_modes         = { 0x00, 0x08 }, // always on; off after 10 sec
+               .max_mode         = 1,
+               .bl_state_address = 0xd3,
+               .state_base_value = 0x80,
+               .max_state        = 3,
+       },
+};
+
 static struct msi_ec_conf *CONFIGS[] __initdata = {
        &CONF0,
        &CONF1,
@@ -677,6 +1138,12 @@ static struct msi_ec_conf *CONFIGS[] __initdata = {
        &CONF5,
        &CONF6,
        &CONF7,
+       &CONF8,
+       &CONF9,
+       &CONF10,
+       &CONF11,
+       &CONF12,
+       &CONF13,
        NULL
 };