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)