From d97cb61b50812c9a1ea68cf96cfdbbbb87f228e1 Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Sun, 23 Nov 2025 18:10:35 -0600 Subject: [PATCH] ec/google/chromeec: Add CFR option for RGB keyboard boot color Add ec_rgb_kb_color CFR option to select RGB keyboard color at boot. Suppress regular keyboard backlight option when RGB keyboard is present, as they are mutually exclusive. TEST=build/boot google/mithrax, verify RGB keyboard option enabled, all colors able to be set at boot. Change-Id: I55848931248a70023c49b98190105679f2999ad9 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/90160 Tested-by: build bot (Jenkins) Reviewed-by: Sean Rhodes --- src/ec/google/chromeec/cfr.h | 28 +++++++++++++++++++++++++++- src/ec/google/chromeec/ec.c | 4 ++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/ec/google/chromeec/cfr.h b/src/ec/google/chromeec/cfr.h index 93b5bd0d78..2972bd5424 100644 --- a/src/ec/google/chromeec/cfr.h +++ b/src/ec/google/chromeec/cfr.h @@ -40,7 +40,7 @@ static const struct sm_enum_value ec_backlight_values[] = { static void update_kb_backlight(struct sm_object *new) { - if (!google_chromeec_has_kbbacklight()) { + if (!google_chromeec_has_kbbacklight() || google_chromeec_has_rgbkbd()) { new->sm_bool.flags = CFR_OPTFLAG_SUPPRESS; new->sm_bool.default_value = -1; } @@ -55,4 +55,30 @@ static const struct sm_object ec_kb_backlight = SM_DECLARE_ENUM({ .values = ec_backlight_values, }, WITH_CALLBACK(update_kb_backlight)); +static const struct sm_enum_value ec_rgb_backlight_values[] = { + { "Off", GOOGLE_CHROMEEC_RGBKBD_COLOR_OFF }, + { "Red", GOOGLE_CHROMEEC_RGBKBD_COLOR_RED }, + { "Green", GOOGLE_CHROMEEC_RGBKBD_COLOR_GREEN }, + { "Blue", GOOGLE_CHROMEEC_RGBKBD_COLOR_BLUE }, + { "Yellow", GOOGLE_CHROMEEC_RGBKBD_COLOR_YELLOW }, + { "White", GOOGLE_CHROMEEC_RGBKBD_COLOR_WHITE }, + SM_ENUM_VALUE_END, +}; + +static void update_rgb_kb_backlight(struct sm_object *new) +{ + if (!google_chromeec_has_rgbkbd()) { + new->sm_bool.flags = CFR_OPTFLAG_SUPPRESS; + new->sm_bool.default_value = GOOGLE_CHROMEEC_RGBKBD_COLOR_OFF; + } +} + +static const struct sm_object ec_rgb_kb_color = SM_DECLARE_ENUM({ + .opt_name = "ec_rgb_kb_color", + .ui_name = "RGB Keyboard Color At Boot", + .ui_helptext = "Select the static color applied to the RGB keyboard at boot.", + .default_value = GOOGLE_CHROMEEC_RGBKBD_COLOR_OFF, + .values = ec_rgb_backlight_values, +}, WITH_CALLBACK(update_rgb_kb_backlight)); + #endif /* _CHROMEEC_CFR_H_ */ diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c index daf39975dd..b881fa47dc 100644 --- a/src/ec/google/chromeec/ec.c +++ b/src/ec/google/chromeec/ec.c @@ -1454,6 +1454,10 @@ void google_chromeec_init(void) int backlight_level = get_uint_option("ec_kb_backlight", -1); if (backlight_level != -1 && !acpi_is_wakeup_s3() && google_chromeec_has_kbbacklight()) google_chromeec_kbbacklight(backlight_level); + + int rgb_color = get_uint_option("ec_rgb_kb_color", -1); + if (rgb_color != -1 && !acpi_is_wakeup_s3() && google_chromeec_has_rgbkbd()) + google_chromeec_rgbkbd_set_color((enum google_chromeec_rgbkbd_color)rgb_color); } int google_ec_running_ro(void)