* [PATCH v4 0/2] platform/x86: uniwill-laptop: Prepare for extending keyboard backlight support @ 2026-07-20 13:26 Armin Wolf 2026-07-20 13:26 ` [PATCH v4 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() Armin Wolf 2026-07-20 13:26 ` [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Armin Wolf 0 siblings, 2 replies; 5+ messages in thread From: Armin Wolf @ 2026-07-20 13:26 UTC (permalink / raw) To: hansg, ilpo.jarvinen, wse; +Cc: platform-driver-x86, linux-kernel This patch series contains a couple of changes suggested by Werner Sembach from Tuxedo that are necessary for eventually enabling keyboard backlight support for Tuxedo devices. The first patch simply cleans up uniwill_kbd_led_init(), while the remaining two patches make two key properties (single color vs RGB, max intensity) configurable using the existing device descriptor infrastructure. Tested on a Tuxedo InfinityBook Pro 15 Gen 10 AMD. Changes since v3: - add Reviewed-by tag - fix spelling issue - reword comment in second patch Changes since v2: - drop 3rd patch - add Reviewed-by tag - reword commit description of 2nd patch Changes since v1: - add Suggested-by tags Armin Wolf (2): platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() platform/x86: uniwill-laptop: Remove single color keyboard detection drivers/platform/x86/uniwill/uniwill-acpi.c | 119 +++++++++++--------- 1 file changed, 63 insertions(+), 56 deletions(-) -- 2.39.5 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() 2026-07-20 13:26 [PATCH v4 0/2] platform/x86: uniwill-laptop: Prepare for extending keyboard backlight support Armin Wolf @ 2026-07-20 13:26 ` Armin Wolf 2026-07-20 13:26 ` [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Armin Wolf 1 sibling, 0 replies; 5+ messages in thread From: Armin Wolf @ 2026-07-20 13:26 UTC (permalink / raw) To: hansg, ilpo.jarvinen, wse; +Cc: platform-driver-x86, linux-kernel The function uniwill_kbd_led_init() is quite large and doing multiple things at once: - general hardware initialisation - single color keyboard backlight registration - RGB keyboard backlight registration Move the last two things into separate functions to increase the maintainability of uniwill_kbd_led_init(). Suggested-by: Werner Sembach <wse@tuxedocomputers.com> Reviewed-by: Werner Sembach <wse@tuxedocomputers.com> Signed-off-by: Armin Wolf <W_Armin@gmx.de> --- drivers/platform/x86/uniwill/uniwill-acpi.c | 123 +++++++++++--------- 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c index 310445583832..d27f316800f6 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -1733,7 +1733,24 @@ static enum led_brightness uniwill_kbd_led_mc_brightness_get(struct led_classdev return uniwill_kbd_led_read_brightness(data); } -static int uniwill_kbd_led_init(struct uniwill_data *data) +static int uniwill_white_kbd_led_init(struct uniwill_data *data) +{ + struct led_init_data init_data = { + .default_label = "white:" LED_FUNCTION_KBD_BACKLIGHT, + .devicename = DRIVER_NAME, + .devname_mandatory = true, + }; + + data->kbd_led_cdev.max_brightness = data->kbd_led_max_brightness; + data->kbd_led_cdev.color = LED_COLOR_ID_WHITE; + data->kbd_led_cdev.flags = LED_BRIGHT_HW_CHANGED | LED_REJECT_NAME_CONFLICT; + data->kbd_led_cdev.brightness_set_blocking = uniwill_kbd_led_brightness_set; + data->kbd_led_cdev.brightness_get = uniwill_kbd_led_brightness_get; + + return devm_led_classdev_register_ext(data->dev, &data->kbd_led_cdev, &init_data); +} + +static int uniwill_rgb_kbd_led_init(struct uniwill_data *data) { unsigned int color_indices[KBD_LED_CHANNELS] = { LED_COLOR_ID_RED, @@ -1741,6 +1758,7 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) LED_COLOR_ID_BLUE, }; struct led_init_data init_data = { + .default_label = "multicolor:" LED_FUNCTION_KBD_BACKLIGHT, .devicename = DRIVER_NAME, .devname_mandatory = true, }; @@ -1749,57 +1767,6 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) unsigned int regval; int ret; - if (!uniwill_device_supports(data, UNIWILL_FEATURE_KEYBOARD_BACKLIGHT)) - return 0; - - ret = regmap_read(data->regmap, EC_ADDR_SUPPORT_2, ®val); - if (ret < 0) - return ret; - - if (!(regval & CHINA_MODE)) { - ret = regmap_set_bits(data->regmap, EC_ADDR_BIOS_OEM_2, ENABLE_CHINA_MODE); - if (ret < 0) - return ret; - } - - ret = regmap_read(data->regmap, EC_ADDR_KBD_STATUS, ®val); - if (ret < 0) - return ret; - - regval |= KBD_APPLY; - regval &= ~KBD_POWER_OFF; - ret = regmap_write(data->regmap, EC_ADDR_KBD_STATUS, regval); - if (ret < 0) - return ret; - - switch (data->project_id) { - case PROJECT_ID_PF: - case PROJECT_ID_PF4MU_PF4MN_PF5MU: - case PROJECT_ID_PH4TRX1: - case PROJECT_ID_PH4TUX1: - case PROJECT_ID_PH4TQX1: - case PROJECT_ID_PH6TRX1: - case PROJECT_ID_PH6TQXX: - case PROJECT_ID_PHXAXXX: - case PROJECT_ID_PHXPXXX: - data->single_color_kbd = true; - break; - default: - data->single_color_kbd = regval & KBD_WHITE_ONLY; - break; - } - - if (data->single_color_kbd) { - init_data.default_label = "white:" LED_FUNCTION_KBD_BACKLIGHT; - data->kbd_led_cdev.max_brightness = data->kbd_led_max_brightness; - data->kbd_led_cdev.color = LED_COLOR_ID_WHITE; - data->kbd_led_cdev.flags = LED_BRIGHT_HW_CHANGED | LED_REJECT_NAME_CONFLICT; - data->kbd_led_cdev.brightness_set_blocking = uniwill_kbd_led_brightness_set; - data->kbd_led_cdev.brightness_get = uniwill_kbd_led_brightness_get; - - return devm_led_classdev_register_ext(data->dev, &data->kbd_led_cdev, &init_data); - } - for (int i = 0; i < KBD_LED_CHANNELS; i++) { data->kbd_led_mc_subled_info[i].color_index = color_indices[i]; @@ -1851,7 +1818,6 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) if (ret < 0) return ret; - init_data.default_label = "multicolor:" LED_FUNCTION_KBD_BACKLIGHT; data->kbd_led_mc_cdev.led_cdev.max_brightness = data->kbd_led_max_brightness; data->kbd_led_mc_cdev.led_cdev.color = LED_COLOR_ID_MULTI; data->kbd_led_mc_cdev.led_cdev.flags = LED_BRIGHT_HW_CHANGED | LED_REJECT_NAME_CONFLICT; @@ -1864,6 +1830,57 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) &init_data); } +static int uniwill_kbd_led_init(struct uniwill_data *data) +{ + unsigned int regval; + int ret; + + if (!uniwill_device_supports(data, UNIWILL_FEATURE_KEYBOARD_BACKLIGHT)) + return 0; + + ret = regmap_read(data->regmap, EC_ADDR_SUPPORT_2, ®val); + if (ret < 0) + return ret; + + if (!(regval & CHINA_MODE)) { + ret = regmap_set_bits(data->regmap, EC_ADDR_BIOS_OEM_2, ENABLE_CHINA_MODE); + if (ret < 0) + return ret; + } + + ret = regmap_read(data->regmap, EC_ADDR_KBD_STATUS, ®val); + if (ret < 0) + return ret; + + regval |= KBD_APPLY; + regval &= ~KBD_POWER_OFF; + ret = regmap_write(data->regmap, EC_ADDR_KBD_STATUS, regval); + if (ret < 0) + return ret; + + switch (data->project_id) { + case PROJECT_ID_PF: + case PROJECT_ID_PF4MU_PF4MN_PF5MU: + case PROJECT_ID_PH4TRX1: + case PROJECT_ID_PH4TUX1: + case PROJECT_ID_PH4TQX1: + case PROJECT_ID_PH6TRX1: + case PROJECT_ID_PH6TQXX: + case PROJECT_ID_PHXAXXX: + case PROJECT_ID_PHXPXXX: + data->single_color_kbd = true; + break; + default: + data->single_color_kbd = regval & KBD_WHITE_ONLY; + break; + } + + if (data->single_color_kbd) + return uniwill_white_kbd_led_init(data); + + return uniwill_rgb_kbd_led_init(data); +} + static unsigned int uniwill_sanitize_battery_threshold(unsigned int value) { /* 0 means "charging threshold not active" */ -- 2.39.5 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection 2026-07-20 13:26 [PATCH v4 0/2] platform/x86: uniwill-laptop: Prepare for extending keyboard backlight support Armin Wolf 2026-07-20 13:26 ` [PATCH v4 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() Armin Wolf @ 2026-07-20 13:26 ` Armin Wolf 2026-07-21 8:44 ` Ilpo Järvinen 1 sibling, 1 reply; 5+ messages in thread From: Armin Wolf @ 2026-07-20 13:26 UTC (permalink / raw) To: hansg, ilpo.jarvinen, wse; +Cc: platform-driver-x86, linux-kernel Having a ad-hoc device whitelist inside uniwill_kbd_led_init() to work around unreliable KBD_WHITE_ONLY values conflicts with the idea of the device descriptor infrastructure. Remove the ad-hoc device whitelist and use the device descriptor infrastructure instead. Suggested-by: Werner Sembach <wse@tuxedocomputers.com> Reviewed-by: Werner Sembach <wse@tuxedocomputers.com> Signed-off-by: Armin Wolf <W_Armin@gmx.de> --- drivers/platform/x86/uniwill/uniwill-acpi.c | 32 +++++++-------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c index d27f316800f6..7a2eeaec4c96 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -255,6 +255,7 @@ #define FAN_CURVE_LENGTH 5 #define EC_ADDR_KBD_STATUS 0x078C +/* Unreliable on some models, use the device descriptor instead. */ #define KBD_WHITE_ONLY BIT(0) #define KBD_POWER_OFF BIT(1) #define KBD_TURBO_LEVEL_MASK GENMASK(3, 2) @@ -400,7 +401,7 @@ struct uniwill_data { u8 lightbar_max_brightness; struct led_classdev_mc led_mc_cdev; struct mc_subled led_mc_subled_info[LED_CHANNELS]; - bool single_color_kbd; + bool kbd_led_single_color; u8 kbd_led_max_brightness; unsigned int last_kbd_status; union { @@ -426,6 +427,7 @@ struct uniwill_battery_entry { struct uniwill_device_descriptor { unsigned int features; + bool kbd_led_single_color; u8 kbd_led_max_brightness; u8 lightbar_max_brightness; /* Executed during driver probing */ @@ -1629,7 +1631,7 @@ static int uniwill_notify_kbd_led(struct uniwill_data *data, int brightness) struct led_classdev *led_cdev; int ret; - if (data->single_color_kbd) + if (data->kbd_led_single_color) led_cdev = &data->kbd_led_cdev; else led_cdev = &data->kbd_led_mc_cdev.led_cdev; @@ -1858,24 +1860,7 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) if (ret < 0) return ret; - switch (data->project_id) { - case PROJECT_ID_PF: - case PROJECT_ID_PF4MU_PF4MN_PF5MU: - case PROJECT_ID_PH4TRX1: - case PROJECT_ID_PH4TUX1: - case PROJECT_ID_PH4TQX1: - case PROJECT_ID_PH6TRX1: - case PROJECT_ID_PH6TQXX: - case PROJECT_ID_PHXAXXX: - case PROJECT_ID_PHXPXXX: - data->single_color_kbd = true; - break; - default: - data->single_color_kbd = regval & KBD_WHITE_ONLY; - break; - } - - if (data->single_color_kbd) + if (data->kbd_led_single_color) return uniwill_white_kbd_led_init(data); return uniwill_rgb_kbd_led_init(data); @@ -2351,6 +2336,7 @@ static int uniwill_probe(struct platform_device *pdev) return ret; data->features = device_descriptor.features; + data->kbd_led_single_color = device_descriptor.kbd_led_single_color; data->kbd_led_max_brightness = device_descriptor.kbd_led_max_brightness; data->lightbar_max_brightness = device_descriptor.lightbar_max_brightness; @@ -2580,7 +2566,7 @@ static int uniwill_resume_kbd_led(struct uniwill_data *data) if (ret < 0) return ret; - if (data->single_color_kbd) + if (data->kbd_led_single_color) return 0; return regmap_write_bits(data->regmap, EC_ADDR_TRIGGER, RGB_APPLY_COLOR, RGB_APPLY_COLOR); @@ -2687,6 +2673,7 @@ static struct uniwill_device_descriptor machenike_l16p_descriptor __initdata = { UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | UNIWILL_FEATURE_AC_AUTO_BOOT | UNIWILL_FEATURE_USB_POWERSHARE, + .kbd_led_single_color = false, .kbd_led_max_brightness = 4, }; @@ -2869,6 +2856,7 @@ static struct uniwill_device_descriptor x4sp4nal_descriptor __initdata = { UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | UNIWILL_FEATURE_AC_AUTO_BOOT | UNIWILL_FEATURE_USB_POWERSHARE, + .kbd_led_single_color = true, .kbd_led_max_brightness = 2, }; @@ -3363,6 +3351,8 @@ static int __init uniwill_init(void) if (force) { /* Assume that the device supports all features except the charge limit */ device_descriptor.features = UINT_MAX & ~UNIWILL_FEATURE_BATTERY_CHARGE_LIMIT; + /* Some models only have a (white) single color keyboard backlight */ + device_descriptor.kbd_led_single_color = false; /* Some models only support 3 brightness levels */ device_descriptor.kbd_led_max_brightness = 4; /* Some models only support 36 brightness levels per color component */ -- 2.39.5 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection 2026-07-20 13:26 ` [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Armin Wolf @ 2026-07-21 8:44 ` Ilpo Järvinen 2026-07-25 20:08 ` Armin Wolf 0 siblings, 1 reply; 5+ messages in thread From: Ilpo Järvinen @ 2026-07-21 8:44 UTC (permalink / raw) To: Armin Wolf; +Cc: Hans de Goede, wse, platform-driver-x86, LKML On Mon, 20 Jul 2026, Armin Wolf wrote: > Having a ad-hoc device whitelist inside uniwill_kbd_led_init() > to work around unreliable KBD_WHITE_ONLY values conflicts with > the idea of the device descriptor infrastructure. > > Remove the ad-hoc device whitelist and use the device descriptor > infrastructure instead. > > Suggested-by: Werner Sembach <wse@tuxedocomputers.com> > Reviewed-by: Werner Sembach <wse@tuxedocomputers.com> > Signed-off-by: Armin Wolf <W_Armin@gmx.de> > --- > drivers/platform/x86/uniwill/uniwill-acpi.c | 32 +++++++-------------- > 1 file changed, 11 insertions(+), 21 deletions(-) > > diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c > index d27f316800f6..7a2eeaec4c96 100644 > --- a/drivers/platform/x86/uniwill/uniwill-acpi.c > +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c > @@ -255,6 +255,7 @@ > #define FAN_CURVE_LENGTH 5 > > #define EC_ADDR_KBD_STATUS 0x078C > +/* Unreliable on some models, use the device descriptor instead. */ > #define KBD_WHITE_ONLY BIT(0) > #define KBD_POWER_OFF BIT(1) > #define KBD_TURBO_LEVEL_MASK GENMASK(3, 2) > @@ -400,7 +401,7 @@ struct uniwill_data { > u8 lightbar_max_brightness; > struct led_classdev_mc led_mc_cdev; > struct mc_subled led_mc_subled_info[LED_CHANNELS]; > - bool single_color_kbd; > + bool kbd_led_single_color; > u8 kbd_led_max_brightness; > unsigned int last_kbd_status; > union { > @@ -426,6 +427,7 @@ struct uniwill_battery_entry { > > struct uniwill_device_descriptor { > unsigned int features; > + bool kbd_led_single_color; > u8 kbd_led_max_brightness; > u8 lightbar_max_brightness; > /* Executed during driver probing */ > @@ -1629,7 +1631,7 @@ static int uniwill_notify_kbd_led(struct uniwill_data *data, int brightness) > struct led_classdev *led_cdev; > int ret; > > - if (data->single_color_kbd) > + if (data->kbd_led_single_color) > led_cdev = &data->kbd_led_cdev; > else > led_cdev = &data->kbd_led_mc_cdev.led_cdev; > @@ -1858,24 +1860,7 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) > if (ret < 0) > return ret; > > - switch (data->project_id) { > - case PROJECT_ID_PF: > - case PROJECT_ID_PF4MU_PF4MN_PF5MU: > - case PROJECT_ID_PH4TRX1: > - case PROJECT_ID_PH4TUX1: > - case PROJECT_ID_PH4TQX1: > - case PROJECT_ID_PH6TRX1: > - case PROJECT_ID_PH6TQXX: > - case PROJECT_ID_PHXAXXX: > - case PROJECT_ID_PHXPXXX: > - data->single_color_kbd = true; > - break; > - default: > - data->single_color_kbd = regval & KBD_WHITE_ONLY; > - break; > - } > - > - if (data->single_color_kbd) > + if (data->kbd_led_single_color) > return uniwill_white_kbd_led_init(data); > > return uniwill_rgb_kbd_led_init(data); > @@ -2351,6 +2336,7 @@ static int uniwill_probe(struct platform_device *pdev) > return ret; > > data->features = device_descriptor.features; > + data->kbd_led_single_color = device_descriptor.kbd_led_single_color; > data->kbd_led_max_brightness = device_descriptor.kbd_led_max_brightness; > data->lightbar_max_brightness = device_descriptor.lightbar_max_brightness; > > @@ -2580,7 +2566,7 @@ static int uniwill_resume_kbd_led(struct uniwill_data *data) > if (ret < 0) > return ret; > > - if (data->single_color_kbd) > + if (data->kbd_led_single_color) > return 0; > > return regmap_write_bits(data->regmap, EC_ADDR_TRIGGER, RGB_APPLY_COLOR, RGB_APPLY_COLOR); > @@ -2687,6 +2673,7 @@ static struct uniwill_device_descriptor machenike_l16p_descriptor __initdata = { > UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | > UNIWILL_FEATURE_AC_AUTO_BOOT | > UNIWILL_FEATURE_USB_POWERSHARE, > + .kbd_led_single_color = false, > .kbd_led_max_brightness = 4, > }; > > @@ -2869,6 +2856,7 @@ static struct uniwill_device_descriptor x4sp4nal_descriptor __initdata = { > UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | > UNIWILL_FEATURE_AC_AUTO_BOOT | > UNIWILL_FEATURE_USB_POWERSHARE, > + .kbd_led_single_color = true, > .kbd_led_max_brightness = 2, > }; > > @@ -3363,6 +3351,8 @@ static int __init uniwill_init(void) > if (force) { > /* Assume that the device supports all features except the charge limit */ > device_descriptor.features = UINT_MAX & ~UNIWILL_FEATURE_BATTERY_CHARGE_LIMIT; > + /* Some models only have a (white) single color keyboard backlight */ > + device_descriptor.kbd_led_single_color = false; > /* Some models only support 3 brightness levels */ > device_descriptor.kbd_led_max_brightness = 4; > /* Some models only support 36 brightness levels per color component */ > Hi Armin, I've applied this series now to the review-ilpo-next branch. You may want to check if you still need/want to store project_id (sashiko mentioned it's no longer used). If you want it gone, just send another patch. -- i. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection 2026-07-21 8:44 ` Ilpo Järvinen @ 2026-07-25 20:08 ` Armin Wolf 0 siblings, 0 replies; 5+ messages in thread From: Armin Wolf @ 2026-07-25 20:08 UTC (permalink / raw) To: Ilpo Järvinen; +Cc: Hans de Goede, wse, platform-driver-x86, LKML Am 21.07.26 um 10:44 schrieb Ilpo Järvinen: > On Mon, 20 Jul 2026, Armin Wolf wrote: > >> Having a ad-hoc device whitelist inside uniwill_kbd_led_init() >> to work around unreliable KBD_WHITE_ONLY values conflicts with >> the idea of the device descriptor infrastructure. >> >> Remove the ad-hoc device whitelist and use the device descriptor >> infrastructure instead. >> >> Suggested-by: Werner Sembach <wse@tuxedocomputers.com> >> Reviewed-by: Werner Sembach <wse@tuxedocomputers.com> >> Signed-off-by: Armin Wolf <W_Armin@gmx.de> >> --- >> drivers/platform/x86/uniwill/uniwill-acpi.c | 32 +++++++-------------- >> 1 file changed, 11 insertions(+), 21 deletions(-) >> >> diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c >> index d27f316800f6..7a2eeaec4c96 100644 >> --- a/drivers/platform/x86/uniwill/uniwill-acpi.c >> +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c >> @@ -255,6 +255,7 @@ >> #define FAN_CURVE_LENGTH 5 >> >> #define EC_ADDR_KBD_STATUS 0x078C >> +/* Unreliable on some models, use the device descriptor instead. */ >> #define KBD_WHITE_ONLY BIT(0) >> #define KBD_POWER_OFF BIT(1) >> #define KBD_TURBO_LEVEL_MASK GENMASK(3, 2) >> @@ -400,7 +401,7 @@ struct uniwill_data { >> u8 lightbar_max_brightness; >> struct led_classdev_mc led_mc_cdev; >> struct mc_subled led_mc_subled_info[LED_CHANNELS]; >> - bool single_color_kbd; >> + bool kbd_led_single_color; >> u8 kbd_led_max_brightness; >> unsigned int last_kbd_status; >> union { >> @@ -426,6 +427,7 @@ struct uniwill_battery_entry { >> >> struct uniwill_device_descriptor { >> unsigned int features; >> + bool kbd_led_single_color; >> u8 kbd_led_max_brightness; >> u8 lightbar_max_brightness; >> /* Executed during driver probing */ >> @@ -1629,7 +1631,7 @@ static int uniwill_notify_kbd_led(struct uniwill_data *data, int brightness) >> struct led_classdev *led_cdev; >> int ret; >> >> - if (data->single_color_kbd) >> + if (data->kbd_led_single_color) >> led_cdev = &data->kbd_led_cdev; >> else >> led_cdev = &data->kbd_led_mc_cdev.led_cdev; >> @@ -1858,24 +1860,7 @@ static int uniwill_kbd_led_init(struct uniwill_data *data) >> if (ret < 0) >> return ret; >> >> - switch (data->project_id) { >> - case PROJECT_ID_PF: >> - case PROJECT_ID_PF4MU_PF4MN_PF5MU: >> - case PROJECT_ID_PH4TRX1: >> - case PROJECT_ID_PH4TUX1: >> - case PROJECT_ID_PH4TQX1: >> - case PROJECT_ID_PH6TRX1: >> - case PROJECT_ID_PH6TQXX: >> - case PROJECT_ID_PHXAXXX: >> - case PROJECT_ID_PHXPXXX: >> - data->single_color_kbd = true; >> - break; >> - default: >> - data->single_color_kbd = regval & KBD_WHITE_ONLY; >> - break; >> - } >> - >> - if (data->single_color_kbd) >> + if (data->kbd_led_single_color) >> return uniwill_white_kbd_led_init(data); >> >> return uniwill_rgb_kbd_led_init(data); >> @@ -2351,6 +2336,7 @@ static int uniwill_probe(struct platform_device *pdev) >> return ret; >> >> data->features = device_descriptor.features; >> + data->kbd_led_single_color = device_descriptor.kbd_led_single_color; >> data->kbd_led_max_brightness = device_descriptor.kbd_led_max_brightness; >> data->lightbar_max_brightness = device_descriptor.lightbar_max_brightness; >> >> @@ -2580,7 +2566,7 @@ static int uniwill_resume_kbd_led(struct uniwill_data *data) >> if (ret < 0) >> return ret; >> >> - if (data->single_color_kbd) >> + if (data->kbd_led_single_color) >> return 0; >> >> return regmap_write_bits(data->regmap, EC_ADDR_TRIGGER, RGB_APPLY_COLOR, RGB_APPLY_COLOR); >> @@ -2687,6 +2673,7 @@ static struct uniwill_device_descriptor machenike_l16p_descriptor __initdata = { >> UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | >> UNIWILL_FEATURE_AC_AUTO_BOOT | >> UNIWILL_FEATURE_USB_POWERSHARE, >> + .kbd_led_single_color = false, >> .kbd_led_max_brightness = 4, >> }; >> >> @@ -2869,6 +2856,7 @@ static struct uniwill_device_descriptor x4sp4nal_descriptor __initdata = { >> UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | >> UNIWILL_FEATURE_AC_AUTO_BOOT | >> UNIWILL_FEATURE_USB_POWERSHARE, >> + .kbd_led_single_color = true, >> .kbd_led_max_brightness = 2, >> }; >> >> @@ -3363,6 +3351,8 @@ static int __init uniwill_init(void) >> if (force) { >> /* Assume that the device supports all features except the charge limit */ >> device_descriptor.features = UINT_MAX & ~UNIWILL_FEATURE_BATTERY_CHARGE_LIMIT; >> + /* Some models only have a (white) single color keyboard backlight */ >> + device_descriptor.kbd_led_single_color = false; >> /* Some models only support 3 brightness levels */ >> device_descriptor.kbd_led_max_brightness = 4; >> /* Some models only support 36 brightness levels per color component */ >> > Hi Armin, > > I've applied this series now to the review-ilpo-next branch. > > You may want to check if you still need/want to store project_id (sashiko > mentioned it's no longer used). If you want it gone, just send another > patch. Thanks, i will continue to utilize this field in the future. Armin Wolf ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-25 20:09 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-07-20 13:26 [PATCH v4 0/2] platform/x86: uniwill-laptop: Prepare for extending keyboard backlight support Armin Wolf 2026-07-20 13:26 ` [PATCH v4 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() Armin Wolf 2026-07-20 13:26 ` [PATCH v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Armin Wolf 2026-07-21 8:44 ` Ilpo Järvinen 2026-07-25 20:08 ` Armin Wolf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®