- Joined
- Jul 22, 2018
- Messages
- 8,153
- Motherboard
- Supermicro X11SPA-T
- CPU
- Intel Xeon W-3275 28 Core
- Graphics
- 2xAMD RX 580 8GB
- OS X/macOS
- 13.x
- Bootloader
- OpenCore (UEFI)
- Mac
- Mac mini
- MacBook Pro
- Mobile Phone
- Android
- iOS
How to Enable Backlight Control on Laptops [Clover/OpenCore]
This guide describes the implementation of backlight control on Laptops and AIO using Clover and OpenCore bootloader. By following this guide, you'll be able to enable backlight control on your Laptop and AIO. In addition, this will enable a brightness slider in the System Preferences>Displays.
Overview
With using a laptop or AIO computer, a backlight control is necessary to make it suitable for the user using different control levels and aim to save the battery. Depending on the user, some may require to have a full backlight and some may want to have a medium or low backlight level. Without a backlight function, normally the display is usually in full brightness mode which consumes way more battery than the normal mode.
Over the period of time,
Requirements
STEP 1: Fix Graphics
Before you can have a working backlight function, it's important to fix your graphics with acceleration. To fix your Graphics, refer to the guide linked below.
elitemacx86.com
PWM Brightness
STEP 2: Add Required SSDT
The next step is to add the required SSDT.
1. Download SSDT-PNLF from the downloads section of this forum.
2. Mount your ESP.
For Clover:
If you're using Clover, copy
For OpenCore:
If you're using OpenCore, copy
STEP 3: Add Required Kexts
The next step is to add the required kexts to enable the backlight. WhateverGreen doesn't work standalone. WhateverGreen and Lilu are needed together to work in conjunction in order to enable the backlight.
1. Download WhateverGreen and Lilu from the downloads section of this forum.
2. Mount your ESP.
For Clover:
If you're using Clover, copy both the kexts to
For OpenCore:
If you're using OpenCore, copy both the kexts to
STEP 4: Fix Backlight registers
Few KBL, CFL, and ICL Laptops need fixing of backlight registers otherwise such devices will end in a black screen when booting to macOS. To fix this issue, you'll need to use the
1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)
4. If you don't want to inject the property using Device Properties, you can use the same patch using
5. Once added, save your config.plist.
If you're using a CFL based Laptop, you may have noticed that the Backlight Register Fix (BLR), to fix the 3-minute black screen issue using (
Please note that this alternative fix is only applicable to users having CFL Laptops running macOS Ventura (13.4) or later. To fix this issue, you'll need to use enable-backlight-registers-alternative-fix property on IGPU. To add the enable-backlight-registers-alternative-fix property, follow the steps below.
1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)
4. If you don't want to inject the property using Device Properties, you can use the same patch using
5. Once added, save your config.plist.
You'll also need to remove the boot argument -igfxblr and/or the device property enable-backlight-registers-fix. If you wish to use the Backlight Smoother on macOS 13.4 or later, you need to add both -igfxblt and -igfxbls to the boot arguments.
Please note that Ice Lake platforms are not affected because
Please note this has been fixed by Apple in 13.5 and
STEP 5: Restart your System
After performing all the above steps, restart your system for the applied changes to take effect.
You should have an operational brightness slider in System Preferences>Displays. Note that Keyboard control for the backlight is a separate issue.
Native ACPI Brightness
Although, most of the systems will have a backlight control using the above method, however, a few old (legacy) systems may have the ACPI Brightness implementation. With such implementation, the above method will not work and WhateverGreen's backlight implementation will not work.
STEP: Add Required Kext
STEP: Replace Framework
Due to the fact, ACPIBacklight was broken in OS X El Capitan and then a newer method IntelBacklight was introduced which also got broken since macOS Sierra 10.12, replacing only IntelBacklight.kext will not work. If the brightness keys are mapped, you may even have the sun icon when the brightness keys are pressed but it will not have any effect at all.
OLED Displays
Display ID dependencies and EDID
Some Product/Display-IDs present in the original EDID can be problematic. Although the patches will accomplish the correct FxxTxxxx profile selection in AppleBacklight.kext, certain IDs have special case code (somewhere) that can cause the backlight to not work. So, if you have done all the above and the backlight does not work, this can be one of the causes. To fix this issue, you must inject a patched EDID.
Ambient Light Sensor
Starting with macOS 10.15 Ambient Light Sensor presence is required for backlight functioning. For some systems, you may need a Fake ALS device and the appropriate version of FakeSMC/VirtualSMC. You can simply use
Some Laptops have the Ambient Light Sensor device defined in DSDT. This will interfere with backlight restore on reboots as they don't tend to be compatible with macOS/OS X ambient light sensor drivers (those drivers have Mac SMC dependencies). Such devices should be disabled by causing _STA to return zero. You can check your DSDT for an ambient light sensor (could be in an SSDT too) by looking for its _HID identifier: ACPI0008.
For example:
You can edit the _STA method so it returns zero:
This can be also achieved by using
Please note that this will only add Auto Brightness in the System Preferences>Display. However, the ALS will not function, even if your laptop is equipped with one.
Backlight Smoothness
To make the backlight transitions smoother on Intel Ivy Bridge and later, you can add enable-backlight-smoother property to IGPU or use the -igfxbls boot argument to improve your experience.
The graphics driver adjusts the panel brightness by writing values to related registers. Brightness Smoother (BLS) intercepts these write operations and gradually changes the register value. You may think of the graphics driver changing the brightness like climbing the stairs while BLS works like taking the escalator.
BLS uses a simple algorithm: it reads the register value SRC that represents the current brightness level and calculates the distance D to the register value DST requested by the graphics driver. It then moves toward the target value in N steps, each of which takes T milliseconds. By default, N is 35 and T is 7, but you may change their values by adding the properties backlight-smoother-steps and backlight-smoother-interval. It is recommended to keep T less than 10 milliseconds and the total amount of time N * T less than 350 milliseconds.
Besides, you may use the property backlight-smoother-threshold to ask BLS to skip the smoother process if the distance D falls below the threshold. In other words, BLS will write DST to the register directly. The default threshold value is 0.
If you want to prevent the built-in display from going black at the lowest brightness level, you may use the property backlight-smoother-lowerbound to specify the minimum register value that corresponds to the new, lowest brightness level. Similarly, backlight-smoother-upperbound can be used to specify the maximum value instead. See the example below. If these two properties are not present, BLS uses the default range [0, 2^32-1].
Saving and restoring the backlight levels
The
For more info on fixing NVRAM, refer to the guide linked below.
elitemacx86.com
Brightness Hotkeys
After enabling the backlight control, the brightness will be controlled but the brightness hotkeys may not work. To fix this, follow the guide linked below
www.elitemacx86.com
Problem Reporting
Details:
This guide describes the implementation of backlight control on Laptops and AIO using Clover and OpenCore bootloader. By following this guide, you'll be able to enable backlight control on your Laptop and AIO. In addition, this will enable a brightness slider in the System Preferences>Displays.
Overview
With using a laptop or AIO computer, a backlight control is necessary to make it suitable for the user using different control levels and aim to save the battery. Depending on the user, some may require to have a full backlight and some may want to have a medium or low backlight level. Without a backlight function, normally the display is usually in full brightness mode which consumes way more battery than the normal mode.
Over the period of time,
ACPIBacklight.kext
or IntelBacklight.kext
was used to serve this purpose. But with the release of the Sierra 10.12.4 update, these methods were broken and are no longer used. Another method that was in use was the AppleBacklightInjector. But a new method is introduced, called AppleBacklightFixup. As of now, AppleBacklightFixup is depreciated and the functionality has been integrated into WEG itself. With this new implementation in WEG, you no longer need to use any additional kext for the backlight function.QUICK INFO:
- This guide is still required if you need to map your brightness keys. After you have working brightness via System Preferences>Displays, refer to the Brightness Hotkeys Guide for activating the brightness keys.
- This guide is not meant for discrete graphics such as NVIDIA or AMD, regardless of Mobile or Desktop. For laptops with AMD and NVIDIA Graphics, Backlight control requires additional ACPI patching.
Requirements
Graphics | Supported Intel Graphics |
Display | Internal Display Panel |
Intel CPU Generation | Arrandale and Later |
macOS version | macOS Sierra or Later |
GPU rename | GFX0 to IGPU and VID to IGPU |
QUICK NOTE:
|
STEP 1: Fix Graphics
Before you can have a working backlight function, it's important to fix your graphics with acceleration. To fix your Graphics, refer to the guide linked below.
![elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_400.png)
GUIDE - How to Enable Intel HD and UHD Graphics on macOS - Intel Framebuffer Patching Guide
How to Enable Intel HD and UHD Graphics on macOS - Intel Framebuffer Patching Guide An EliteMacx86 Exclusive Guide - This guide covers fixing Intel HD and UHD Graphics on macOS. By following this guide, you'll be able to enable Intel Graphics with acceleration on macOS with full QE/CI on your...
![elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_32.png)
PWM Brightness
STEP 2: Add Required SSDT
The next step is to add the required SSDT.
1. Download SSDT-PNLF from the downloads section of this forum.
2. Mount your ESP.
For Clover:
If you're using Clover, copy
SSDT-PNLF.aml
to EFI/Clover/ACPI/patched
directory.For OpenCore:
If you're using OpenCore, copy
SSDT-PNLF.aml
to EFI/OC/ACPI
directory. You'll also need to add the SSDT-PNLF entry in ACPI>Add
section of your config.plistNOTE:
|
STEP 3: Add Required Kexts
The next step is to add the required kexts to enable the backlight. WhateverGreen doesn't work standalone. WhateverGreen and Lilu are needed together to work in conjunction in order to enable the backlight.
1. Download WhateverGreen and Lilu from the downloads section of this forum.
2. Mount your ESP.
For Clover:
If you're using Clover, copy both the kexts to
EFI/Clover/Kext/Others
directoryFor OpenCore:
If you're using OpenCore, copy both the kexts to
EFI/OC/Kexts
directory. You'll also need to add the kext entries in the Kernel section of your config.plist.NOTES:
|
STEP 4: Fix Backlight registers
Few KBL, CFL, and ICL Laptops need fixing of backlight registers otherwise such devices will end in a black screen when booting to macOS. To fix this issue, you'll need to use the
enable-backlight-registers-fix
property to IGPU. To add the enable-backlight-registers-fix
property, follow the steps below.1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)
Devices | Key | Value | Type | Notes |
---|---|---|---|---|
PciRoot(0x0)/Pci(0x2,0x0) | enable-backlight-registers-fix | 01000000 | DATA |
|
4. If you don't want to inject the property using Device Properties, you can use the same patch using
-igfxblr
boot-arg in your config.plist.5. Once added, save your config.plist.
If you're using a CFL based Laptop, you may have noticed that the Backlight Register Fix (BLR), to fix the 3-minute black screen issue using (
-igfxblr
) property in boot args or (enable-backlight-registers-fix
) in Device Property, no longer works on macOS Ventura (13.4) and later. This is because Apple has simplified the implementation of the functions (ReadRegister32
and WriteRegister32
), in Coffee Lake's framebuffer driver shipped in macOS Ventura (13.4), so the compiler chose to inline invocations of those functions as many as possible. As a result, the WriteRegister32
hooks registered by the Backlight Registers Fix (BLR) and the Backlight Smoother (BLS) submodules no longer work. Starting from v1.6.5, WEG can revert the optimizations done by the compiler in backlight related functions, providing an alternative to BLR and making BLS work properly on macOS 13.4 or later.Please note that this alternative fix is only applicable to users having CFL Laptops running macOS Ventura (13.4) or later. To fix this issue, you'll need to use enable-backlight-registers-alternative-fix property on IGPU. To add the enable-backlight-registers-alternative-fix property, follow the steps below.
1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)
Devices | Key | Value | Type | Notes |
---|---|---|---|---|
PciRoot(0x0)/Pci(0x2,0x0) | enable-backlight-registers-alternative-fix | 01000000 | DATA |
|
4. If you don't want to inject the property using Device Properties, you can use the same patch using
-igfxblt
boot-arg in your config.plist.5. Once added, save your config.plist.
You'll also need to remove the boot argument -igfxblr and/or the device property enable-backlight-registers-fix. If you wish to use the Backlight Smoother on macOS 13.4 or later, you need to add both -igfxblt and -igfxbls to the boot arguments.
Please note that Ice Lake platforms are not affected because
WriteRegister32
is not inlined in backlight related functions, while Kaby Lake platforms may be affected but are not supported by this new fix at this moment, because it is hard to fix the write operation on the register 0xC8250
due to the space limit.Please note this has been fixed by Apple in 13.5 and
enable-backlight-registers-alternative-fix
or -igfxblt
is no longer required on macOS Ventura 13.5 and later!STEP 5: Restart your System
After performing all the above steps, restart your system for the applied changes to take effect.
You should have an operational brightness slider in System Preferences>Displays. Note that Keyboard control for the backlight is a separate issue.
Native ACPI Brightness
Although, most of the systems will have a backlight control using the above method, however, a few old (legacy) systems may have the ACPI Brightness implementation. With such implementation, the above method will not work and WhateverGreen's backlight implementation will not work.
STEP: Add Required Kext
STEP: Replace Framework
Due to the fact, ACPIBacklight was broken in OS X El Capitan and then a newer method IntelBacklight was introduced which also got broken since macOS Sierra 10.12, replacing only IntelBacklight.kext will not work. If the brightness keys are mapped, you may even have the sun icon when the brightness keys are pressed but it will not have any effect at all.
OLED Displays
Display ID dependencies and EDID
Some Product/Display-IDs present in the original EDID can be problematic. Although the patches will accomplish the correct FxxTxxxx profile selection in AppleBacklight.kext, certain IDs have special case code (somewhere) that can cause the backlight to not work. So, if you have done all the above and the backlight does not work, this can be one of the causes. To fix this issue, you must inject a patched EDID.
Ambient Light Sensor
Starting with macOS 10.15 Ambient Light Sensor presence is required for backlight functioning. For some systems, you may need a Fake ALS device and the appropriate version of FakeSMC/VirtualSMC. You can simply use
SSDT-ALS0.aml
to create an Ambient Light Sensor ACPI Device, which can be used by SMCLightSensor.kext to report either dummy (when no device is present) or valid values through the SMC interface.Some Laptops have the Ambient Light Sensor device defined in DSDT. This will interfere with backlight restore on reboots as they don't tend to be compatible with macOS/OS X ambient light sensor drivers (those drivers have Mac SMC dependencies). Such devices should be disabled by causing _STA to return zero. You can check your DSDT for an ambient light sensor (could be in an SSDT too) by looking for its _HID identifier: ACPI0008.
For example:
Code:
Device (ALSD)
{
Name (_HID, "ACPI0008") // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If ((ALSE == 0x02))
{
Return (0x0B)
}
Return (Zero)
}
You can edit the _STA method so it returns zero:
Code:
Device (ALSD)
{
Name (_HID, "ACPI0008") // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0)
}
This can be also achieved by using
SSDT-ALS0.aml
with Clover or OpenCore. See for more info.Please note that this will only add Auto Brightness in the System Preferences>Display. However, the ALS will not function, even if your laptop is equipped with one.
Backlight Smoothness
To make the backlight transitions smoother on Intel Ivy Bridge and later, you can add enable-backlight-smoother property to IGPU or use the -igfxbls boot argument to improve your experience.
The graphics driver adjusts the panel brightness by writing values to related registers. Brightness Smoother (BLS) intercepts these write operations and gradually changes the register value. You may think of the graphics driver changing the brightness like climbing the stairs while BLS works like taking the escalator.
BLS uses a simple algorithm: it reads the register value SRC that represents the current brightness level and calculates the distance D to the register value DST requested by the graphics driver. It then moves toward the target value in N steps, each of which takes T milliseconds. By default, N is 35 and T is 7, but you may change their values by adding the properties backlight-smoother-steps and backlight-smoother-interval. It is recommended to keep T less than 10 milliseconds and the total amount of time N * T less than 350 milliseconds.
Besides, you may use the property backlight-smoother-threshold to ask BLS to skip the smoother process if the distance D falls below the threshold. In other words, BLS will write DST to the register directly. The default threshold value is 0.
If you want to prevent the built-in display from going black at the lowest brightness level, you may use the property backlight-smoother-lowerbound to specify the minimum register value that corresponds to the new, lowest brightness level. Similarly, backlight-smoother-upperbound can be used to specify the maximum value instead. See the example below. If these two properties are not present, BLS uses the default range [0, 2^32-1].
Saving and restoring the backlight levels
The
AppleBacklight.kext
stores the current brightness level in NVRAM and uses the same value across reboots. It stores the value in the NVRAM variable 'backlight-level'. For saving and restoring the backlight levels, a working NVRAM is required. On some of the Laptops, the native NVRAM does not work and you need to use Emulated NVRAM, regardless of Clover or OpenCore bootloader. Without the emulated NVRAM, native NVRAM is used and with Emulated NVRAM, nvram.plist
is used which is saved to your disk at shutdown, and loaded at startup. Also, make sure no Backlight Level value exists in the System Parameters>Backlight Level
section of your config.plist (Clover).For more info on fixing NVRAM, refer to the guide linked below.
![elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_400.png)
GUIDE - How to Fix NVRAM on macOS [Clover/OpenCore]
How to Fix NVRAM on macOS [Clover/OpenCore] This guide covers the fixing of NVRAM on macOS for Clover or OpenCore Bootloader. By following this guide, you'll be able to fix NVRAM on macOS for Clover or OpenCore Bootloader and also setup an Emulated NVRAM for systems where the Native NVRAM does...
![elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_32.png)
Brightness Hotkeys
After enabling the backlight control, the brightness will be controlled but the brightness hotkeys may not work. To fix this, follow the guide linked below
![www.elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_400.png)
GUIDE - How to Remap Brightness Hotkeys on Laptops
How to Remap Brightness Hotkeys on Laptops An EliteMacx86 Exclusive Guide - This guide covers the mapping of Brightness Hotkeys on Laptops I. Overview After enabling the backlight which results in adding a slider in SysPrefs->Displays, the brightness hotkeys will not work. This guide will...
![www.elitemacx86.com](https://elitemacx86.com/data/assets/logo/Elite_32.png)
Problem Reporting
Details:
- macOS version
- Copy of IOReg
- Kextcache output
- DPCIManager/Status
- About This Mac
- System Information/Graphics/Displays
- For Clover, compress EFI/Clover, exclude the themes folder.
- For OpenCore, compress EFI/OC.
- Do not include the complete EFI folder.
- Put all files in a folder with your name, compress files as Zip and attach files using site attachments only.
- Do not use any external links.
Last edited: