Skip to content

Fix user mode ignores advanced fan mode#303

Open
Jiogo18 wants to merge 4 commits intodmitry-s93:mainfrom
Jiogo18:advanced-fan-mode
Open

Fix user mode ignores advanced fan mode#303
Jiogo18 wants to merge 4 commits intodmitry-s93:mainfrom
Jiogo18:advanced-fan-mode

Conversation

@Jiogo18
Copy link
Contributor

@Jiogo18 Jiogo18 commented Mar 18, 2026

Fan mode was always auto or silent after changing user mode or starting the application.

Fixes #246

As discussed in #274, fans have different behaviours in eco mode.
However, it's already possible to do it by checking eco, then unchecking and checking again advanced fan mode.

@mutchiko how does it behaves for you?
If it's too weird, fanMode = fan_mode::advanced_fan_mode can be moved under performance and/or balanced.

Fan mode was always auto or silent after changing user mode or starting the application.

Fixes dmitry-s93#246
@mutchiko
Copy link
Collaborator

Your fix works as it should. unfortunately my laptop only applies the custom curve if its in performance mode.

I don't know if my laptop is the exception. but if its not, then i can't imagine the amount of people complaining about the custom curve not applying, so we definitely need more testers.

As for the fix itself, would the regular Settings::getValue(const QString &key) normally return false? why does it need a default value?

@Jiogo18
Copy link
Contributor Author

Jiogo18 commented Mar 21, 2026

The issue is that it resets to auto as soon as MCC is restarted, even when using performance (and when changing shift mode, but it's less impactful).
I think it's better to have a feature that doesn't apply than a feature that resets all the time.

If it's confirmed that we have two behaviours, we don't have to enforce fan mode here.
The laptop specific case can be handled by msi-ec to set to a "good" fan mode when setting shift mode.

why does it need a default value?

Oups, I was in an enum mindset.

Fun fact: since I have the issue with shift mode unknown after booting my laptop, setUserMode returns before overriding fan mode. So I have to set a valid shift mode, then I can restart MCC to reproduce the reset issue.

@Jiogo18
Copy link
Contributor Author

Jiogo18 commented Mar 21, 2026

I tried multiple configurations on windows and linux, advanced vs auto fan mode makes more sense now.

at 0xf4 (fan mode):

  • MSI Center performance+auto set 0x0d (and any other mode, I don't have "silent" anymore)
  • MSI Center performance+advanced set 0x8d
  • On Linux, the 0x10 bit turns off the fans (e.g. 0x1d, 0xfd..)
  • On Linux, when waking from sleep: 0x1d and 0x3d stay. 0x8d reset to 0x0d, 0xbd reset to 0x3d.
  • I don't see any difference between 0x0d and 0x8d, it could be a "follow strict" flag that should only be used in performance+advanced.

fan curve:
When I set performance+auto, balanced, eco or ai in MSI Center, it in fact changes the fan curve to a default one.
Enabling performance+advanced restores the custom curve.
On Linux, when my laptop wakes up, it's the same default fan curve values.
So I think my laptop (at least since I updated the bios/MSI Center) always uses the fan curve set by MSI Center.

Default curves in MCC
  1. Enable advanced mode
  2. Put the laptop to sleep
  3. click on Cancel changes

CPU
MCC default CPU curve
GPU
MCC default GPU curve

isw -cp MSI_ADDRESS_DEFAULT
-----------CPU-----------        -----------GPU-----------
Value       set @ address        Value       set @ address
0x37(55°C)  0x6a(byte106)        0x37(55°C)  0x82(byte130)
0x40(64°C)  0x6b(byte107)        0x3d(61°C)  0x83(byte131)
0x49(73°C)  0x6c(byte108)        0x43(67°C)  0x84(byte132)
0x4c(76°C)  0x6d(byte109)        0x49(73°C)  0x85(byte133)
0x52(82°C)  0x6e(byte110)        0x4f(79°C)  0x86(byte134)
0x58(88°C)  0x6f(byte111)        0x54(84°C)  0x87(byte135)

0x26(38%)   0x72(byte114)        0x0(0%)     0x8a(byte138)
0x2b(43%)   0x73(byte115)        0x2b(43%)   0x8b(byte139)
0x30(48%)   0x74(byte116)        0x30(48%)   0x8c(byte140)
0x36(54%)   0x75(byte117)        0x36(54%)   0x8d(byte141)
0x3c(60%)   0x76(byte118)        0x3c(60%)   0x8e(byte142)
0x46(70%)   0x77(byte119)        0x46(70%)   0x8f(byte143)
0x55(85%)   0x78(byte120)        0x55(85%)   0x90(byte144)

In summary, when my laptop wakes up (even on a clean install without MCC), curves are set to a default curve.
Changing fan_mode doesn't affect the fan speed (except for the silent bit), they always follow the fan curves.

@mutchiko what does the curve look like when your laptop wakes up?

I am ok to only use performance+advanced (the flag 0x8d, not the use of custom curve), since it's what MSI Center does.
Next improvement could be to add multiple fan curves support, first to reset the default fan curve without having to go to sleep.

@Jiogo18
Copy link
Contributor Author

Jiogo18 commented Mar 21, 2026

Reproduce with MCC:

  1. Turn on "advanced fan mode"
  2. Set curve values to 100%, you can check what is applied sudo isw -cp MSI_ADDRESS_DEFAULT
  3. Turn off "advanced fan mode"
  4. (Optional: Turn on/off cooler boost briefly to speed up the fans instantly)
  5. Set silent mode
  6. (Same as 4., cooler boost will stop the fans instantly)
  7. Set eco mode
  8. (Same as 4. to go back to 6000 rpm)
  9. Turn on "advanced fan mode" and click on "Reset changes", or check the curve with isw, same curve, fans still at 6000 rpm
  10. Set your laptop to sleep, then wake it up
  11. Change a value and click on "Reset changes", or check the curve with isw, it's now the default curve and the fans are at a normal rpm.

I am curious which steps work differently.

@mutchiko
Copy link
Collaborator

Next improvement could be to add multiple fan curves support, first to reset the default fan curve without having to go to sleep.

I need you to slow down a bit here, we have chores to do in Operate, like checking with QVector first. and much more

Here is the default fan curve after sleep:

CPU
Screenshot_20260322_132347

GPU
Screenshot_20260322_153921

The curve only resets after sleep, changing modes doesn't reset it, however its not applied unless on performance mode.

I think by now you know that there is a default fan curve in ROM that gets applied after wake up.

We can get help about this topic from the real ones, though we better just follow how MSI does it in their apps, so we have to add some popups in the UI, and handle the case when MCC follows system profile

But for now i want to focus on UPower integration first since its a very requested feature, then i will start doing a list of fixes i prepared over the past months

@Jiogo18
Copy link
Contributor Author

Jiogo18 commented Mar 22, 2026

"Advanced" will only show when using performance mode.
That should be the behaviour you have when using MSI Center.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fan Mode resets to Auto on Restart and Performance Mode Change

2 participants