fix: Y-Logo LED GET/SET byte mismatch and IO-Port init on Gen 10#402
Open
alstergee wants to merge 1 commit intojohnfanv2:mainfrom
Open
fix: Y-Logo LED GET/SET byte mismatch and IO-Port init on Gen 10#402alstergee wants to merge 1 commit intojohnfanv2:mainfrom
alstergee wants to merge 1 commit intojohnfanv2:mainfrom
Conversation
The DSDT WMAF method uses different byte positions for the Y-Logo LED
(LIGHT_ID_YLOGO = 0x03) compared to the keyboard backlight:
Y-Logo GET: state is in result[0] (LCST), result[1] (LCBL) is always 0
Y-Logo SET: DSDT checks byte 1 (SCST) for on/off, ignores byte 2 (SCBL)
EC convention: SCST=1 means ON, SCST=2 means OFF
The driver previously treated all lights the same as the keyboard
backlight (value in byte 2, read from byte 1), causing Y-Logo GET
to always return 0 and SET to always send SCST=1 (always ON).
Also fixes IO-Port LED (LIGHT_ID_IOPORT = 0x05) init failure on
BIOS Q7CN45WW where DSDT returns 0 for unhandled light IDs.
Changed lower_limit from 1 to 0 so the validation check passes.
Tested on Lenovo Legion Pro 7 16IAX10H (83F5) with BIOS Q7CN45WW.
Note: On Spectrum-equipped Gen 10 models, the physical lid logo LED
is actually controlled by the ITE 8258 USB HID controller (048d:c197),
not the WMI/ACPI path. The Y-Logo WMI interface may only be relevant
for non-Spectrum models. The IO-Port LED WMI interface (SLID=5) is
not handled by the DSDT WMAF method at all on this model.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ChaoticSi1ence
added a commit
to ChaoticSi1ence/legion-pro-7-16iax10h-linux
that referenced
this pull request
Mar 1, 2026
DSDT uses different byte positions for Y-Logo (LIGHT_ID_YLOGO = 0x03) vs keyboard backlight: GET: Y-Logo state is in result[0] (LCST), not result[1] (LCBL) SET: DSDT checks byte 1 (SCST) for on/off, EC convention 1=ON 2=OFF The driver treated all lights like keyboard backlight (value in byte 2, read from byte 1), causing Y-Logo GET to always return 0 and SET to never actually turn it off. Based on alstergee's DSDT analysis from upstream PR johnfanv2#402. IO-Port lower_limit fix was already applied in 62ffe9c.
|
Thanks for the thorough DSDT analysis and clean fix, @alstergee. The Y-Logo GET/SET byte mismatch is a real bug — the driver was treating all light IDs like the keyboard backlight. I've picked up your Y-Logo fixes in my fork (ChaoticSi1ence/LenovoLegionLinux@3788257). The IO-Port Nice catch on the Spectrum vs WMI distinction for the lid LED too — good to have that documented. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
result[0](LCST) forLIGHT_ID_YLOGO, but driver readsresult[1](LCBL) which is hardcoded to 0. Fixed by readingresult[0]whenlight_id == LIGHT_ID_YLOGO.byte[1] = 0x01and puts the brightness inbyte[2](SCBL). Fixed by placing the on/off value in byte 1 with EC convention (1=ON, 2=OFF).LIGHT_ID_IOPORT(0x05) — GET returns 0 from the default GLCS buffer. Thelower_limit=1validation rejects 0, failing init. Changed tolower_limit=0.DSDT Analysis (Q7CN45WW)
The WMAF method handles light IDs differently:
The driver previously treated all light IDs the same as the keyboard backlight.
Hardware note
On Spectrum-equipped Gen 10 models (like the 16IAX10H / 83F5), the physical lid logo LED is controlled by the ITE 8258 USB HID controller (048d:c197) via the Spectrum protocol (
OP_LOGO_STATUS), not the WMI/ACPI path. The WMI Y-Logo interface may only be relevant for non-Spectrum models.Test plan
echo 1 > /sys/class/leds/platform::ylogo/brightness— writes without error, reads back 1echo 0 > /sys/class/leds/platform::ylogo/brightness— writes without error, reads back 0