diff mbox series

[v2,3/3] platform/x86: msi-ec: Add more EC configs

Message ID 20231006175352.1753017-9-teackot@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series platform/x86: msi-ec: add and fix EC configs | expand

Commit Message

Nikita Kravets Oct. 6, 2023, 5:53 p.m. UTC
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>
---
 drivers/platform/x86/msi-ec.c | 467 ++++++++++++++++++++++++++++++++++
 1 file changed, 467 insertions(+)

Comments

Ilpo Järvinen Oct. 9, 2023, 11:40 a.m. UTC | #1
On Fri, 6 Oct 2023, Nikita Kravets wrote:

> 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>
> ---
>  drivers/platform/x86/msi-ec.c | 467 ++++++++++++++++++++++++++++++++++
>  1 file changed, 467 insertions(+)
> 
> diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c
> index 3074aee878c1..f19504dbf164 100644
> --- a/drivers/platform/x86/msi-ec.c
> +++ b/drivers/platform/x86/msi-ec.c
> @@ -667,6 +667,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

I only too patch 2/3 becase there seems to be some configuration option 
which causes // comments to trigger warning (that can be made errors 
with another config option) so please use only /* */ comments.
Hans de Goede Oct. 9, 2023, 11:57 a.m. UTC | #2
Hi Ilpo,

On 10/9/23 13:40, Ilpo Järvinen wrote:
> On Fri, 6 Oct 2023, Nikita Kravets wrote:
> 
>> 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>
>> ---
>>  drivers/platform/x86/msi-ec.c | 467 ++++++++++++++++++++++++++++++++++
>>  1 file changed, 467 insertions(+)
>>
>> diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c
>> index 3074aee878c1..f19504dbf164 100644
>> --- a/drivers/platform/x86/msi-ec.c
>> +++ b/drivers/platform/x86/msi-ec.c
>> @@ -667,6 +667,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
> 
> I only too patch 2/3 becase there seems to be some configuration option 
> which causes // comments to trigger warning (that can be made errors 
> with another config option) so please use only /* */ comments.

Hmm, that is very weird all the:

// SPDX-License-Identifier ...

comments at the top of many of our .c files are c++ style comments.

Regards,

Hans
Ilpo Järvinen Oct. 9, 2023, 12:34 p.m. UTC | #3
On Mon, 9 Oct 2023, Hans de Goede wrote:
> On 10/9/23 13:40, Ilpo Järvinen wrote:
> > On Fri, 6 Oct 2023, Nikita Kravets wrote:
> > 
> >> 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>
> >> ---
> >>  drivers/platform/x86/msi-ec.c | 467 ++++++++++++++++++++++++++++++++++
> >>  1 file changed, 467 insertions(+)
> >>
> >> diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c
> >> index 3074aee878c1..f19504dbf164 100644
> >> --- a/drivers/platform/x86/msi-ec.c
> >> +++ b/drivers/platform/x86/msi-ec.c
> >> @@ -667,6 +667,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
> > 
> > I only too patch 2/3 becase there seems to be some configuration option 
> > which causes // comments to trigger warning (that can be made errors 
> > with another config option) so please use only /* */ comments.
> 
> Hmm, that is very weird all the:
> 
> // SPDX-License-Identifier ...
> 
> comments at the top of many of our .c files are c++ style comments.

I know there are those already which is why I didn't think there would 
have been any problem with them until I got burned.

If // comments are okay, what's the explanation for this then:

  https://lore.kernel.org/oe-kbuild-all/202309270535.g9nOUvFb-lkp@intel.com/

It's from randconfig build so it's a bit hard to know from the report 
itself which CONFIG combination exactly triggers the issue.

I can think of two potential ones:
  a) Only problems for changed lines are reported by LKP
  b) Header files have different rules than .c files (uapi ones in 
     particular, I'd guess, if that's the case)

Any ideas?
Hans de Goede Oct. 9, 2023, 12:57 p.m. UTC | #4
Hi,

On 10/9/23 14:34, Ilpo Järvinen wrote:
> On Mon, 9 Oct 2023, Hans de Goede wrote:
>> On 10/9/23 13:40, Ilpo Järvinen wrote:
>>> On Fri, 6 Oct 2023, Nikita Kravets wrote:
>>>
>>>> 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>
>>>> ---
>>>>  drivers/platform/x86/msi-ec.c | 467 ++++++++++++++++++++++++++++++++++
>>>>  1 file changed, 467 insertions(+)
>>>>
>>>> diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c
>>>> index 3074aee878c1..f19504dbf164 100644
>>>> --- a/drivers/platform/x86/msi-ec.c
>>>> +++ b/drivers/platform/x86/msi-ec.c
>>>> @@ -667,6 +667,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
>>>
>>> I only too patch 2/3 becase there seems to be some configuration option 
>>> which causes // comments to trigger warning (that can be made errors 
>>> with another config option) so please use only /* */ comments.
>>
>> Hmm, that is very weird all the:
>>
>> // SPDX-License-Identifier ...
>>
>> comments at the top of many of our .c files are c++ style comments.
> 
> I know there are those already which is why I didn't think there would 
> have been any problem with them until I got burned.
> 
> If // comments are okay, what's the explanation for this then:
> 
>   https://lore.kernel.org/oe-kbuild-all/202309270535.g9nOUvFb-lkp@intel.com/
> 
> It's from randconfig build so it's a bit hard to know from the report 
> itself which CONFIG combination exactly triggers the issue.
> 
> I can think of two potential ones:
>   a) Only problems for changed lines are reported by LKP
>   b) Header files have different rules than .c files (uapi ones in 
>      particular, I'd guess, if that's the case)

Yes I think that the error you point at is caused by the file in question
being a uapi header. It makes some sense to avoid C++ style comments there
to e.g. avoid problems when userspace code is build with -ansi .

So I think that uapi headers are the exception to the rule that
c++ style comments are ok.

Regards,

Hans
Ilpo Järvinen Oct. 9, 2023, 1:10 p.m. UTC | #5
On Mon, 9 Oct 2023, Hans de Goede wrote:
> On 10/9/23 14:34, Ilpo Järvinen wrote:
> > On Mon, 9 Oct 2023, Hans de Goede wrote:
> >> On 10/9/23 13:40, Ilpo Järvinen wrote:
> >>> On Fri, 6 Oct 2023, Nikita Kravets wrote:
> >>>
> >>>> 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>

> >>>> +		.bl_state_address = MSI_EC_ADDR_UNSUPP, // not functional
> >>>
> >>> I only too patch 2/3 becase there seems to be some configuration option 
> >>> which causes // comments to trigger warning (that can be made errors 
> >>> with another config option) so please use only /* */ comments.
> >>
> >> Hmm, that is very weird all the:
> >>
> >> // SPDX-License-Identifier ...
> >>
> >> comments at the top of many of our .c files are c++ style comments.
> > 
> > I know there are those already which is why I didn't think there would 
> > have been any problem with them until I got burned.
> > 
> > If // comments are okay, what's the explanation for this then:
> > 
> >   https://lore.kernel.org/oe-kbuild-all/202309270535.g9nOUvFb-lkp@intel.com/
> > 
> > It's from randconfig build so it's a bit hard to know from the report 
> > itself which CONFIG combination exactly triggers the issue.
> > 
> > I can think of two potential ones:
> >   a) Only problems for changed lines are reported by LKP
> >   b) Header files have different rules than .c files (uapi ones in 
> >      particular, I'd guess, if that's the case)
> 
> Yes I think that the error you point at is caused by the file in question
> being a uapi header. It makes some sense to avoid C++ style comments there
> to e.g. avoid problems when userspace code is build with -ansi .
> 
> So I think that uapi headers are the exception to the rule that
> c++ style comments are ok.

Okay, if that's the case, I took this patch into review-ilpo now.

Thank you Nikita for the patch (2 and 3 are now in the review-ilpo 
branch).
diff mbox series

Patch

diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c
index 3074aee878c1..f19504dbf164 100644
--- a/drivers/platform/x86/msi-ec.c
+++ b/drivers/platform/x86/msi-ec.c
@@ -667,6 +667,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,
@@ -676,6 +1137,12 @@  static struct msi_ec_conf *CONFIGS[] __initdata = {
 	&CONF5,
 	&CONF6,
 	&CONF7,
+	&CONF8,
+	&CONF9,
+	&CONF10,
+	&CONF11,
+	&CONF12,
+	&CONF13,
 	NULL
 };