mirror of
https://github.com/hirschmann/nbfc.git
synced 2026-04-25 16:45:53 +03:00
[GH-ISSUE #419] Lenovo 510-15ISK #377
Labels
No labels
Stale
bug
config
discussion
duplicate
enhancement
experimental
feature
help-wanted
info
invalid
invalid
pull-request
question
up-for-grabs
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/nbfc-hirschmann#377
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Ex3mS1ze on GitHub (Jan 6, 2018).
Original GitHub issue: https://github.com/hirschmann/nbfc/issues/419
I tried the recommended models. The configuration from the LENOVO Ideapad 510s shows a true speed, but I can't adjust the speed. I looked through the DSDT and tried to change write register.
After observing the change in the values of the registers, 176 is very similar to the one searched. But the speed doesn't change. There is also an AUTO parameter, but can't change it.
ReadRegister=6
WriteRegister=?
@danielstuart14 commented on GitHub (Jan 22, 2018):
310-15isk has the same bios as 510-15isk. I'm also trying to find the writeregister, but still no success.
@Ex3mS1ze commented on GitHub (Feb 3, 2018):
There is progress?
@doiiido commented on GitHub (Apr 24, 2018):
I was wondering if any of you know the config for the 310-14isk.
--Editted
It´s the same bios as the 510-XXisk and the 310-XXisk
@bjQrnen commented on GitHub (Apr 30, 2018):
I have spent hours trying to find the correct write register for the Ideapad 310-15isk. I have given up at this point, but please reach out if anyone comes up with a config that works for either the Ideapad 510 or 310
@doiiido commented on GitHub (May 6, 2018):
I have found a power management app version that has an anti-dust function.
It actually speed the fan up, stop it, reverse it and then stop it.
But I can´t manage to look at the EC registers in real time.
this is the link:
https://support.lenovo.com/br/pt/downloads/ds040484
@danielstuart14 commented on GitHub (May 18, 2018):
Seems like all new lenovo laptops have an EC that controls low-level PM stuff.
I found this linux program, that is aimed at yoga 13: https://github.com/blan4/lenovo-yoga-fan-control
Lenovo calls their EC as "MCU" (microcontroller?), and its fw can be updated along bios. Our cn43 bios had an mcu update included. https://download.lenovo.com/consumer/mobiles/0xcn43ww.txt
So, afaik, there are three approaches we can take:
@bastrou commented on GitHub (May 18, 2018):
Have you tried any of these?
For the time being I am using tornado ThrottleStop and I only disable Turbo function.
@danielstuart14 commented on GitHub (Jul 4, 2018):
I finally got some time to check this topic again. I monitored the EC while doing the fan cleaning procedure from the lenovo app @doiiido has linked. The results were:

The first red line is the exact moment I started the cleaning procedure, the second one is when I stopped it. I also increased the ec-probe pool rate to 1 second (default is 5).
As you can see, first the 0x01 register (VDAT) is set to 0x01, then 0xAB (MODE) is set to 0x08, followed by 0x01 being set to 0x03 and then the fan speed (0x06, known as FANS) got high.
BUT, I tried many ways to write to 0x06, even trying to write to it while the cleaning procedure was being done, but none worked. My guess is that the register for writing the fan speed is in another memory address that isn't the EC one.
I don't have the time nor the skills to reverse engineer the energy manager app, but if someone is willing to do it, I'd be more than happy to send a donation.
Also, @hirschmann do you have any idea of what is going on?
@GeographicCone commented on GitHub (Jul 4, 2018):
I've also been looking into this recently. My laptop is an Y700-ISK but it's all similar enough. (For the record, there are two fans and their speed can be read from
0x06for fan #1, and0xFEfor fan #2, while the range seems to be from0x00to0x30, i.e. 48).It appears on many models fans can be controlled by writing to
0xB0. Although technically this is not setting fan speed but faking CPU temperature, it seems to have worked as a solution for many people (I looked into all the profiles for Lenovo laptops posted in the GitHub repo).The proper way, however, is to reverse engineer the Energy Management utility as stated above. I suggest starting with this version of it, which is newer, yet the file is half the size: https://support.lenovo.com/us/en/downloads/ds030145
I posted an extracted, minimal version of this utility here (unpacked, twice, with InnoExtract/InnoUnp and WinRAR, then just kept the necessary files and deleted the rest; hopefully this saves some time for anyone else who wants to investigate it too): https://forums.lenovo.com/t5/Gaming-Laptops/Reducing-fans-noise-on-Lenovo-Legion-laptops/m-p/4125653/#M17900
As @danielstuart14 observed, running the app has the effect of changing the state of many EC registers, although in fact it's often just setting particular flags (bits) within these registers, so the resulting value the EC register is set to will depend on what its "usual" value is. For example, on my laptop
0xABchanges from0xA4to0xACwhen the "dust extraction" is running but:0xA4= 0b101001000xAC= 0b10101100So this is equivalent to just setting bit 3 (counting from the right-hand side, starting from 0).
Fortunately, on my laptop at least, the meaning behind many of those seems to be somewhat documented in DSDT. I created an RwEverything information file, also readable in plain text, that lists all the information obtained from DSDT on my laptop. The file is linked to the post here: https://forums.lenovo.com/t5/Gaming-Laptops/Reducing-fans-noise-on-Lenovo-Legion-laptops/m-p/4125651#M17899
For example, for
0xABit says: (\rreplaced with newlines for clarity)So we can observe that this particular change is equivalent to setting the
INITflag.However, the "dust extraction" routine seems to be doing more than just modifying EC registers. I haven't had the chance to fully look investigate it yet but here's what I've found out so far: alongside the .NET utility, there is a DLL
LenovoEmExpandedAPI.dll, which includes many low-level hardware functions. In particular, in relation to the fans, there areSetCleanDust,GetCleanDustStatusandSupportCleanDust, all called in the following manner:Then, there are some lower-level
CAtmThermalControlandCAtmDriverLibrarymethods, which appear very promising as it seems the fan speed can be controlled completely:Finally, at the lowest level there is
DeviceIoControlitself:And it appears to be writing to
\\.\EnergyDrvto make actual changes. The only other mention of this I was able to find is a page here: http://itachi.pl/lenovo-bluetooth-i-windows-8-1/It's not in English but the gist of it appears to be that somebody found a way to switch Bluetooth on/off in a laptop that lacks a hardware switch for that. The code for this was also posted on GitHub: https://github.com/ITachiLab/bluedentist/
The website link gives an example how the DLL exports can be called from Python. Separately, it appears somebody else was doing it from VB, in the following manner:
As I've mentioned, I haven't had the time to look at all of this in detail myself but it seems all the information necessary to control the fans on these laptops is contained within that Energy Management utility, so it's just a matter of getting it out one way or another, and repurposing it.
@danielstuart14 commented on GitHub (Jul 4, 2018):
Unfortunately this version of Lenovo's utility doesn't work with my ideapad 310. Also, I tried bluedentist and it doesn't seem to work either. I think LenovoEmExpandedAPI is incompatible with my laptop's EC.
And even worse, seems like the older power manager utility (which is target to windows 8.1, so, yeah, idk why it's older) doesn't have a DLL that it externaly calls to when doing any interaction with the hardware. Seems like all the functions we want to expose are built in the app, which makes it quite hard to reverse engineer, as the functions aren't public.
@danielstuart14 commented on GitHub (Jul 4, 2018):
For anyone thirsty for a better cooling: select the Yoga 510 config, then change the Write Register to 189.
At least you can set the fan to 100% now.
It isn't the best way to do it, as it only fakes the cpu temp. But for now it's good enough.
@Ex3mS1ze commented on GitHub (Jul 31, 2018):
Lenovo Energy Management version 7.0.3.9 (15.01.2016) works on Win 10.
The dust cleaning function (maximum fan speed) is working. Maybe this will somehow help.
@github-actions[bot] commented on GitHub (Dec 4, 2019):
This issue is stale because it has been open more than 180 days with no activity. If nobody comments within 7 days, this issue will be closed
@badmaan commented on GitHub (Jul 28, 2020):
Here is a config I made, it can trigger cleaning mode speed on Lenovo V310-15IKB 80T3.
Lenovo V310-15IKB 80T3.zip
@mrspence commented on GitHub (Sep 20, 2021):
I was curious about setting up my lenovo 310 laptop with 100% fan speed, following your advice - it worked well!
I have to say, I don't think I've ever heard my laptop work at 100% fan speed prior to this - holy hell 😂
Thank you for the trick, this will be useful 👍