Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Device support for Delta 15 A5EFK #41

Closed
sheepguard opened this issue May 23, 2023 · 14 comments
Closed

Device support for Delta 15 A5EFK #41

sheepguard opened this issue May 23, 2023 · 14 comments
Labels
New firmware Request for a new firmware unimplemented features There are features that aren't implemented in the driver yet

Comments

@sheepguard
Copy link

Hello, I did the dump with teackot's debug branch. Cooler boost, some thermal readings and shift mode did work on some older msi_ec version last year, at least cooler boost is probably generic. The backlight is rgb (can be changed with the msi software), and always on (backlight button doesn't do anything on linux, isn't even recognised by libinput unlike other function buttons).

I'll do analysis on windows later. I'll have to check my ec and bios versions as well, but i'm pretty sure the ec at least is 15CKEMS1.108.

ec_dump.txt

@DL302
Copy link

DL302 commented Jun 5, 2023

Hi, I also have a Delta 15 and want to help add support for it.

I saw from another disussion that OpenRGB supports the Mystic Light version on the Delta 15 and I can confirm it works, so at least you can fully control the RGB lighting on Linux with software.

For other EC addresses and values, I could help verify by checking on my own. I'm not sure how to read these EC dump files.

@mutchiko
Copy link
Contributor

mutchiko commented Jun 5, 2023

I see that it's not very different from my laptop, still it wouldn't hurt to check things with windows, so here is what you need to get things running:

1- find any recent ISO of windows 10 (don't even bother to activate it).

2- install it then update it using windows update.

3- download the AMD adrenaline software thing (it should install the right drivers for the CPU/GPU).

4- download the MSI dragon center (it won't work if your drivers aren't installed correctly).

5- now you have two ways to start learning your EC behaviour, either use MsiEcRamEditor (which didn't work for me) Or use RWEverything.

Note: cut off the Internet connection after the last step because windows updates might mess up your drivers.

@GeoffreyCoulaud
Copy link

Hello!

I have a MSI Delta 15 A5EFK laptop with firmware E15CKAMS.108

I spent some time getting a lot of dumps from Linux and wrote a small python script to replace the changing characters with an underscore. My idea is that those changing values are probably sensor readings.

Here are my results for a little over 70k dumps on Linux, where nothing is changed from the default

00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 88 e0 06 5b 0b
03 0_ 01 0d 51 0a 05 00 a0 14 60 3b 10 02 e0 00
00 00 6_ 00 __ 0f 00 00 __ 0e __ 3f 1_ 0c 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 __ 00 41 46 4d 50 53 58
78 __ 00 23 23 41 41 50 64 00 07 03 03 03 03 03
4_ 00 41 46 4d 50 53 58 00 __ 00 23 23 3c 3c 4b
64 00 07 03 03 03 03 03 02 00 73 00 00 66 00 00
31 35 43 4b 45 4d 53 31 2e 31 30 38 30 39 30 32
32 30 32 31 31 37 3a 30 39 3a 33 34 4c 0f 00 68
00 07 23 3_ _0 9e c0 00 _0 __ 00 __ 00 __ 14 00
00 00 00 0_ 7f a1 00 00 __ _0 __ 80 00 00 00 00
e2 02 00 01 10 00 00 00 00 00 4_ _0 00 9a 00 e4
00 00 c1 82 8c 00 0_ 00 00 00 00 00 00 00 00 00

Then I dumped from Windows. I used RWEveryting as @mutchiko suggested. I did way fewer dumps because the process is manual.

So here are the parts that stayed the same in 18 dumps in User mode, High perf, Cooler boost:

00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 88 e0 07 5b 0b
03 09 01 0d 51 0a 05 00 a0 14 60 3b 10 02 e0 00
00 00 64 00 fd 0f 00 00 fd 0f 1_ 40 __ 0b 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 3_ 00 37 3c 46 4e 55 5a
78 3c 00 2d 3c 46 4b 50 50 00 07 03 03 03 03 03
2_ 00 37 3c 46 50 52 57 00 00 00 46 03 46 4b 50
50 00 07 03 03 03 03 03 82 00 73 00 00 66 00 00
31 35 43 4b 45 4d 53 31 2e 31 30 38 30 39 30 32
32 30 32 31 31 37 3a 30 39 3a 33 34 fd 0f 00 68
00 07 23 2_ _0 9e c0 00 00 5_ 00 4_ 00 4_ 14 00
00 00 00 00 7f a0 00 00 2_ _0 3_ 80 00 17 06 1e
e2 02 00 01 10 00 00 00 00 00 2_ _0 00 a0 00 d0
00 00 c0 82 07 00 05 00 00 00 00 00 00 00 00 00

and the ones in User mode, High perf, auto fans

00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 88 e0 07 5b 0b
03 09 0_ 0d 51 0a 05 00 a0 14 60 3b 10 02 e0 00
00 00 64 00 fd 0f 00 00 fd 0f 1_ 40 e_ 0b 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 __ 00 37 3c 46 4e 55 5a
78 __ 00 2d 3c 46 4b 50 50 00 07 03 03 03 03 03
__ 00 37 3c 46 50 52 57 00 00 00 37 41 46 4b 50
50 00 07 03 03 03 03 03 02 00 73 00 00 66 00 00
31 35 43 4b 45 4d 53 31 2e 31 30 38 30 39 30 32
32 30 32 31 31 37 3a 30 39 3a 33 34 fd 0f 00 68
00 01 24 2_ _0 9e c0 00 _0 __ 00 __ 00 __ 14 00
00 00 00 00 7f a0 00 00 2_ _0 __ 80 00 00 6d 00
e2 02 00 01 10 00 00 00 00 00 __ _0 00 9a 00 d0
00 00 c0 82 07 00 05 00 00 00 00 00 00 00 00 00

I won't attach my Linux dumps because it's reproducible easily, and because it would be too big.
But here are the original windows dumps that I made, both in binary and a hex representation:
windows-dumps.zip

@teackot teackot added the New firmware Request for a new firmware label Aug 23, 2023
@quartz270
Copy link

quartz270 commented Oct 18, 2023

I checked a few values using RWEverything for Delta 15, this is what I could find. Will be testing more soon.

Mic LED - 0x2B Bit-2
Webcam - 0x2E Bit-1
Mute Sound LED - 0x2C Bit-2
Win-Fn Toggle - 0xBF Bit-4

Keyboard Backlight Mode Addr - 0xF3 Bit - 0,1 - {80,81,82,83 ?...}

User Scenarios - Addr 0xD5, Values -

  • Extreme - A0

  • Balanced - A1

  • Silent - A4

  • Super Battery - A5

  • Cooler Boost - 0x98 Bit-7

@sheepguard sheepguard reopened this Nov 3, 2023
@sheepguard
Copy link
Author

sheepguard commented Nov 3, 2023

Hi, I kind of forgot about this thread and got back to looking at it. (and fumbled with github controls apparently...)
I'll try this on linux later today, but here's some initial findings: It does look like 0xD5 is used for performance, like quartz posted, but so is 0xF2. In user mode in the dragon center, Performance level maps to these as such:
Perf - 0xD5 0xF2
High - A0 C0
Medium - A1 C1
Low - A5 C2

I also found that the fan curves can be controlled with these addresses:
cpu: 6 addresses from 0x72 to 0x77
gpu: 6 addresses from 0x8A to 0x8F

Each column is a stem in the fan curve screen in dragon center, but there isn't any temperature scale so they are just from cold to hot. (0x72 coldest, 0x77 hottest and same for gpu; 0x8A coldest, 0x8F hottest).

@sheepguard
Copy link
Author

sheepguard commented Nov 3, 2023

It would seem like 0xED is changed along with 0xD5 when changing performance level in user mode. So the same A0 = high, A1 = medium and A5 = low applies. And both 0xD5 and 0xED are changed to A4 in silent mode, like quartz posted. And now looking at the code, 0xf2 seems to be the shift mode. I can't say easily what super battery changes, but at least it puts the performance mode to low and shift mode to eco.

More about fan control: each stem goes from 0 to 150%, and each related address goes from 0 to 96, so it's just the percentage value in hex. It would also seem like 0x71 is related to the fan control mode, in "advanced" (manual) mode, it is always 0, but in auto fan control mode it can be something else such as 3C, 46, 4B, 50 or 64. (60, 70, 75, 80, 100 % maybe?) (edit) 0x71 actually seems to be the currentcpu fan target speed%. It's 3000rpm @ 50%, 6000rpm @ 100% and around 6857 @ 150% according to dragon center. Even if 0x71 reads 64 (100%), the fans don't really change speed that fast (especially going up past 5000 is quite slow).

These seem like in other models, but here goes anyways:
Cooler boost is bit 7 in 0x98
Win-fn toggle is bit 4 in 0xBF
Cpu temp (celcius in hex) is 0x68
Mic mute led is bit 2 in 0x2B
Mute led is bit 2 in 0x2C

@sheepguard
Copy link
Author

More stuff:
Webcam is 0x2E and webcam block is 0x2F, both bit 1.
Fan mode is 0xF4; 0D is "auto", 1D is silent and 8D is "advanced" (manual). The scenarios/modes "Extreme performance", "Balanced" and "Super Battery" all have it at 0D.
Charge control seems to be 0xEF like in some models instead of 0xD7 like some others.

I can't seem to find anything related to the keyboard backlight, but it can be controlled with openrgb so that's not a problem.

The whole row 0xA# and addresses 0xB0 to 0xBB are used for the name, version and date of the firmware.

It seems like "advanced" fan control mode isn't truly manual, the fan speed is independent of the targets you set. Even if the target fan speed is 0 at all temps, the actual fan speed can be high. For example, the fan speed (both fans or just gpu) is sometimes hovering at 4173 rpm at idle (user-controlled mode and performance level high) even if I've set it to 0% at all temperatures with dragon center (0x71=0 and 0x89=0). But if I first set it to 100% (so higher than the 69% at idle) and then to 0%, it goes to 0 rpm and stays there for like 10 seconds before ramping up again. The gpu temperature should be 54 and cpu 57 according to msi, so it's weird why it wants to have the fan on. If the performance level is low or medium, the gpu fan stays off like it should, but the cpu fan still runs at 2400 rpm even if it should be 0. And sometimes it just decides to drop both speeds to 0. It goes the other way as well, setting the user scenario to super battery changes the fan control to auto, so that 0x89 (fan 2 target speed) reads 41 (65%), but the actual speed is 0 rpm.

So I suppose that the "advanced" mode can't shut the fans off completely but it can boost them up to the set value.

@sheepguard
Copy link
Author

sheepguard commented Nov 4, 2023

While 0xF4 changes when changing fan mode in the dragon center, changing the value manually doesn't do anything. It's more like "auto" mode is just a preset in the dragon center app and then with "advanced" you can actually change the target values. Changing them directly with rweverything does change the fans' target speed% and their actual speed in most cases (just like using advanced mode in the dragon center), irrespective of the settings in dragon center or the value in 0xF4.

TLDR:

  • The actual fan speed is sometimes higher than target speed but seems to always follow if the target is higher than actual
  • The "Auto" fan mode is just a preset*, and "Advanced" is manual control over the target speeds
  • You can manually set the fan target speed addresses to anything you like whenever you like and the target speed follows them

*So the actual fan speed is always automatic but can be controlled upwards with the curve. Also, the same preset curve that's used when you set the "fan speed" to auto in user controlled mode, is used in all other "user scenario" modes: extreme performance, balanced, silent and super battery, but then the secret sauce of the always automatic fans is altered so that it's more silent in silent and super battery modes (and performance is also dropped to achieve that of course).

CPU fan preset curve:

     00 01 02 03 04 05 06 07
70 | -- -- 00 2D 3C 46 4B 50

GPU fan preset curve:

     09 0A 0B 0C 0D 0E 0F
80 | -- 00 37 41 46 4B 50

I don't think there's any benefit to using these, there's no real "automatic" mode and the curves are quite bad. I had my laptop shut down a couple times because it got too hot under load in a warm room (before I got cooler boost working and started properly cleaning the fans), partly because the fans weren't blowing enough as the fastest they get with the default is 80%. I've also been looking into thermal paste or good thermal pads for a set-and-forget thermal solution.

To have proper support for the delta 15, I think at least the fan curves would be really great to have, and the performance levels should be looked into (as in, if changing 0xD5 and/or 0xED actually changes something). I also wonder if the actual cpu/gpu fan speed is readable from the ec somehow, I couldn't find any correlating values. The keyboard backlight is another one I couldn't find, but it can be controlled with openrgb. Everything else should be mentioned in this thread, and I could make a pull request at some point but not very soon.

@sheepguard
Copy link
Author

Another testable thing would be the exact temperature points for both cpu and gpu where they change which part of the curve is controlling the fan speed. That'd take a while to measure, though.

@GeoffreyCoulaud
Copy link

GeoffreyCoulaud commented Nov 4, 2023

I had my laptop shut down a couple times because it got too hot under load in a warm room

I've had exactly the same issue, that's why I'm following this thread. It's basically impossible to play
games, I've had coutless ranked matches lost because I forgot to set cooler boost on.

I'd gladly help testing a draft PR and report performance metrics on the different modes.

@GeoffreyCoulaud
Copy link

GeoffreyCoulaud commented Nov 4, 2023

Ok, I looked into the keyboard RGB. From https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues/2003 it seems that the controller is MSI Mystic Lights MS-1562 and so the values can be extracted from the OpenRGB controller MSIMysticLight64Controller.

I'm also currently trying to compile the knowledge in this thread into a patch to then be tested.

@GeoffreyCoulaud
Copy link

GeoffreyCoulaud commented Nov 4, 2023

Ok, this is untested, but heavily commented.
Note that I'm not a big C developer, nor am I familiar with this project's inner workings.
I do think this could be useful and a base to work on later :)

static const char *ALLOWED_FW_14[] __initconst = {
	"E15CKAMS.108", // MSI Delta 15 A5EFK
	NULL
};

static struct msi_ec_conf CONF14 __initdata = {
	.allowed_fw = ALLOWED_FW_14,
	.charge_control = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1793228355
		.address      = 0xef,
		.offset_start = 0x8a, // TODO What is that ? 
		.offset_end   = 0x80, // TODO What is that ?
		.range_min    = 0x8a, // TODO What is that ?
		.range_max    = 0xe4, // TODO What is that ?
	},
	.webcam = {
		// Confirmed by quartz270 
		// see https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		.address       = 0x2e, 
		.block_address = 0x2f,
		.bit           = 1,
	},
	.fn_win_swap = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.address = 0xbf,
		.bit     = 4,
	},
	.cooler_boost = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.address = 0x98,
		.bit     = 7,
	},
	.shift_mode = {
		// TODO confirm - Reported by Quartz270 & Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792916704
		.address = 0xf2, 
		.modes = {
			{ SM_ECO_NAME,     0xa5 }, // super battery
			{ SM_COMFORT_NAME, 0xa1 }, // balanced
			{ SM_TURBO_NAME,   0xa0 }, // extreme
			MSI_EC_MODE_NULL
		},
	},
	.super_battery = {
		// TODO Support super battery
		// Note: MControlCenter doesn't seem to get it working
		.address = MSI_EC_ADDR_UNKNOWN
		.mask    = 0x0f,
	},
	.fan_mode = {
		// Values reported by Sheepguard 
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1793228355
		.address = 0xf4, 
		.modes = {
			{ FM_AUTO_NAME,     0x0d },
			{ FM_SILENT_NAME,   0x1d },
			{ FM_ADVANCED_NAME, 0x8d },
			MSI_EC_MODE_NULL
		},
	},
	.cpu = {
		.rt_temp_address       = 0x68, // Confirmed by Sheepguard
		.rt_fan_speed_address  = 0xc9, // From https://github.com/dmitry-s93/MControlCenter/
		// RT fan speed min & max Confirmed by sheepguard 
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.rt_fan_speed_base_min = 0x00,
		.rt_fan_speed_base_max = 0x96,
		.bs_fan_speed_address  = 0xcd, // From https://github.com/dmitry-s93/MControlCenter/
		// TODO confirm basic fan speed min & max
		.bs_fan_speed_base_min = 0x00,
		.bs_fan_speed_base_max = 0x0f,
	},
	.gpu = {
		.rt_temp_address      = 0x80, // From https://github.com/dmitry-s93/MControlCenter 
		.rt_fan_speed_address = 0xcb, // From https://github.com/dmitry-s93/MControlCenter
	},
	.leds = {
		// Confirmed by quartz270 & Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.micmute_led_address = 0x2b,
		.mute_led_address    = 0x2d,
		.bit                 = 2,
	},
	.kbd_bl = {
		// Delta 15 uses the "MSI Mystic Lights MS-1562" controller
		// See https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues/2003
		// Using OpenRGB MSIMysticLight64Controller
		// TODO Keyboard backlight control (Supported in openrgb)
		.bl_mode_address  = MSI_EC_ADDR_UNKNOWN,
		.bl_modes         = { 0x00, 0x01 },
		.max_mode         = 1,
		.bl_state_address = MSI_EC_ADDR_UNKNOWN,
		.state_base_value = 0x80,
		.max_state        = 3,
	},
};

Edit: I don't plan on working more on this, I don't really have the required knowledge for it. However, I'd happily help testing a draft PR, as said before.

@peterwolf4
Copy link
Contributor

@GeoffreyCoulaud Thanks for your code basis; I was able to get msi-ec running on my MSI Delta 15 as well!
There was only one typo; and my Bios version is different since I manually updated a couple of month ago.
Just as you, I have nothing to do with C nor EC nor kernel modules; So to everyone considering using msi-ec for a Delta 15 laptop with Linux: test only if your desire to have proper laptop support is stronger than the urge to have guaranteed running software. It works flawless on my end but I do not take any responsibility regarding security nor completeness of this code.

Changes to code posted above:

  1. Included my own bios version at ALLOWED_FW_14
  2. Changed typo in super_battery section of msi_ec_conf CONF14 (comma behind now behind .address = MSI_EC_ADDR_UNKNOWN and not
    .mask = 0x0f ) to remove make and make install error
  3. Included the whole msi-ec.c file code with added CONF14 in msi_ec_conf which we manually defined above to make it even more easy for beginners to get it running & description for which changes were made for Delta 15 support

-> For MSI Delta 15 support on bios versions:

  • E15CKAMS.108
  • E15CKAMS.10C (My newly added version)
  • ... Likely your own if you dare adding it to the ALLOWED_FW_14 section of the msi-ec.c script

Install by replacing msi-ec.c :
Download msi-ec_Delta15.zip
and replace your original msi-ec.c file with the version from the .zip archive attached (may be outdated in the future, please check dates and version!).
Then continue with usual install: make & sudo make install

OR

Install by manually repeating 3 simple changes:

  1. Copy and paste following code, ADD it to your msi-ec.c
static const char *ALLOWED_FW_14[] __initconst = {
	"E15CKAMS.108", // MSI Delta 15 A5EFK
	"E15CKAMS.10C",
	NULL
};

static struct msi_ec_conf CONF14 __initdata = {
	.allowed_fw = ALLOWED_FW_14,
	.charge_control = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1793228355
		.address      = 0xef,
		.offset_start = 0x8a, // TODO What is that ? 
		.offset_end   = 0x80, // TODO What is that ?
		.range_min    = 0x8a, // TODO What is that ?
		.range_max    = 0xe4, // TODO What is that ?
	},
	.webcam = {
		// Confirmed by quartz270 
		// see https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		.address       = 0x2e, 
		.block_address = 0x2f,
		.bit           = 1,
	},
	.fn_win_swap = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.address = 0xbf,
		.bit     = 4,
	},
	.cooler_boost = {
		// Confirmed by Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.address = 0x98,
		.bit     = 7,
	},
	.shift_mode = {
		// TODO confirm - Reported by Quartz270 & Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792916704
		.address = 0xf2, 
		.modes = {
			{ SM_ECO_NAME,     0xa5 }, // super battery
			{ SM_COMFORT_NAME, 0xa1 }, // balanced
			{ SM_TURBO_NAME,   0xa0 }, // extreme
			MSI_EC_MODE_NULL
		},
	},
	.super_battery = {
		// TODO Support super battery
		// Note: MControlCenter doesn't seem to get it working
		.address = MSI_EC_ADDR_UNKNOWN,
		.mask    = 0x0f
	},
	.fan_mode = {
		// Values reported by Sheepguard 
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1793228355
		.address = 0xf4, 
		.modes = {
			{ FM_AUTO_NAME,     0x0d },
			{ FM_SILENT_NAME,   0x1d },
			{ FM_ADVANCED_NAME, 0x8d },
			MSI_EC_MODE_NULL
		},
	},
	.cpu = {
		.rt_temp_address       = 0x68, // Confirmed by Sheepguard
		.rt_fan_speed_address  = 0xc9, // From https://github.com/dmitry-s93/MControlCenter/
		// RT fan speed min & max Confirmed by sheepguard 
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.rt_fan_speed_base_min = 0x00,
		.rt_fan_speed_base_max = 0x96,
		.bs_fan_speed_address  = 0xcd, // From https://github.com/dmitry-s93/MControlCenter/
		// TODO confirm basic fan speed min & max
		.bs_fan_speed_base_min = 0x00,
		.bs_fan_speed_base_max = 0x0f,
	},
	.gpu = {
		.rt_temp_address      = 0x80, // From https://github.com/dmitry-s93/MControlCenter 
		.rt_fan_speed_address = 0xcb, // From https://github.com/dmitry-s93/MControlCenter
	},
	.leds = {
		// Confirmed by quartz270 & Sheepguard
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1767657001
		// See https://github.com/BeardOverflow/msi-ec/issues/41#issuecomment-1792990497
		.micmute_led_address = 0x2b,
		.mute_led_address    = 0x2d,
		.bit                 = 2,
	},
	.kbd_bl = {
		// Delta 15 uses the "MSI Mystic Lights MS-1562" controller
		// See https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues/2003
		// Using OpenRGB MSIMysticLight64Controller
		// TODO Keyboard backlight control (Supported in openrgb)
		.bl_mode_address  = MSI_EC_ADDR_UNKNOWN,
		.bl_modes         = { 0x00, 0x01 },
		.max_mode         = 1,
		.bl_state_address = MSI_EC_ADDR_UNKNOWN,
		.state_base_value = 0x80,
		.max_state        = 3,
	},
};
  1. Search your msi-ec.c for static struct msi_ec_conf
  2. Manually add &CONF14, to the end of your msi_ec_conf section; OR; Replace static struct msi_ec_conf definitions with:
static struct msi_ec_conf *CONFIGURATIONS[] __initdata = {
	&CONF0,
	&CONF1,
	&CONF2,
	&CONF3,
	&CONF4,
	&CONF5,
	&CONF6,
	&CONF7,
	&CONF8,
	&CONF9,
	&CONF10,
	&CONF11,
	&CONF12,
	&CONF13,
	&CONF14,
	NULL
};

Tested for 1 week, no unusual performance or bugs noticed so far.
Enjoy!

@teackot
Copy link
Collaborator

teackot commented May 4, 2024

Thanks everyone!

Closing since the support was merged. Adding a label to come back here when we implement fan curves and "super battery"

@teackot teackot closed this as completed May 4, 2024
@teackot teackot added the unimplemented features There are features that aren't implemented in the driver yet label May 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
New firmware Request for a new firmware unimplemented features There are features that aren't implemented in the driver yet
Projects
None yet
Development

No branches or pull requests

7 participants