Skip to content

Control keyboard backlight and fan policy for Clevo Hackintosh

License

Notifications You must be signed in to change notification settings

okiookio/ClevoControl

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ClevoControl

Control keyboard backlight and fan policy for Clevo Hackintosh This project only supports clevo laptops with full-color backlight support. However, you can easily modify it to fit in 8-color backlight keyboards. I have only tested it on my Clevo P650RS so I won't promise it will work, but it should.

How to use

Directly calling WMBB method in WMI device will lead to a kernel panic. I have no idea about why it's happening, so you should add following code into your DSDT:

Device (SMCD)
{
    Name (_HID, EisaId ("PNP0C02")
    Name (_CID, "MON00000")
    Mathod (WMIB, 3, Serialized)
    {
        \_SB.WMI.WMBB(Arg0, Arg1, Arg2)
    }
}

You may already have SMCD device in your DSDT, then please ensure one of your _HID or _CID is "MON0000" or "MON00000" and add WMIB method into it.

After you edit your DSDT, install ClevoControl.kext to /L/E (injecting it using Clover cause kernel panic) and use ClevoKBFanControl (a small command-line program) to control settings.

Show usage by ClevoKBFanControl -h.

This project uses args for parsing command-line arguments. And the WMI operate codes used in this project comes from clover-xsm-wmi and reverse engineering Clevo Control Center by myself.

Some Extra information

Fan Speed

Edit DSDT, for my laptop with 3 fans, add these to SMCD device (it uses B1B2 method, add it if you don't have it in your DSDT):

Name (TACH, Package (0x06)
    {
        "CPU Fan", "FAN0",
        "GPU Fan #1", "FAN1",
        "GPU Fan #2", "FAN2"
    }) // Define fan names

Method (FAN0, 0, Serialized)
{
    If (\_SB.PCI0.LPCB.EC.ECOK)
    {
        Local0 = B1B2(\_SB.PCI0.LPCB.EC.FC01, \_SB.PCI0.LPCB.EC.FC00)
        If (Local0 <= 0)
        {
            Return (0)
        }
        Local0 = 2156220 / Local0
        Return (Local0)
    }
    Return (0)
}

Method (FAN1, 0, Serialized)
{
    If (\_SB.PCI0.LPCB.EC.ECOK)
    {
        Local0 = B1B2(\_SB.PCI0.LPCB.EC.FG01, \_SB.PCI0.LPCB.EC.FG00)
        If (Local0 <= 0)
        {
            Return (0)
        }
        Local0 = 2156220 / Local0
        Return (Local0)
    }
    Return (0)
}

Method (FAN2, 0, Serialized)
{
    If (\_SB.PCI0.LPCB.EC.ECOK)
    {
        Local0 = B1B2(\_SB.PCI0.LPCB.EC.FG11, \_SB.PCI0.LPCB.EC.FG10)
        If (Local0 <= 0)
        {
            Return (0)
        }
        Local0 = 2156220 / Local0
        Return (Local0)
    }
    Return (0)
}

If you only have 2 or 1 fan, delete FAN2 or FAN2 & FAN1, respectively.

Then find for EmbeddedControl Field in your DSDT, search for EmbeddedControl in your DSDT and you will see something like this:

OperationRegion (EC81, EmbeddedControl, Zero, 0xFF)
Field (EC81, ByteAcc, Lock, Preserve)
{
...
}

Add these in the Field, as mentioned above delete extra values. e.g. delete FG10 and FG11 if you don't have two GPU fans.

Offset (0xD0),
FC00,   8,
FC01,   8,    // CPU Fan Speed
FG00,   8,
FG01,   8,    // GPU Fan0 Speed
FG10,   8,
FG11,   8,    // GPU Fan1 Speed

Last, edit FakeSMC.kext/Contents/Info.plist, change the data in FNum from 00 to number of your fans.

About

Control keyboard backlight and fan policy for Clevo Hackintosh

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 99.7%
  • C 0.3%