diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c index acba0dfefb..fb8a014d0a 100644 --- a/src/ec/google/chromeec/ec.c +++ b/src/ec/google/chromeec/ec.c @@ -107,6 +107,31 @@ int google_chromeec_kbbacklight(int percent) return 0; } +bool google_chromeec_has_kbbacklight(void) +{ + /* Try the feature flag (most reliable for modern ECs) */ + int feature_check = google_chromeec_check_feature(EC_FEATURE_PWM_KEYB); + + if (feature_check > 0) { + printk(BIOS_DEBUG, "Chrome EC: Keyboard backlight detected (feature flag)\n"); + return true; + } else if (feature_check == 0) { + printk(BIOS_DEBUG, "Chrome EC: No keyboard backlight (feature flag)\n"); + return false; + } + + printk(BIOS_DEBUG, "Chrome EC: Feature flag unavailable, testing backlight read\n"); + struct ec_response_pwm_get_keyboard_backlight resp = {}; + + if (ec_cmd_pwm_get_keyboard_backlight(PLAT_EC, &resp) == 0) { + printk(BIOS_DEBUG, "Chrome EC: Keyboard backlight detected (read test)\n"); + return true; + } else { + printk(BIOS_DEBUG, "Chrome EC: No keyboard backlight (read test)\n"); + return false; + } +} + void google_chromeec_post(uint8_t postcode) { /* backlight is a percent. postcode is a uint8_t. diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h index febef6c1ab..3c77eeb459 100644 --- a/src/ec/google/chromeec/ec.h +++ b/src/ec/google/chromeec/ec.h @@ -80,6 +80,7 @@ int google_chromeec_set_sku_id(uint32_t skuid); uint64_t google_chromeec_get_events_b(void); int google_chromeec_clear_events_b(uint64_t mask); int google_chromeec_kbbacklight(int percent); +bool google_chromeec_has_kbbacklight(void); void google_chromeec_post(uint8_t postcode); uint8_t google_chromeec_get_switches(void); bool google_chromeec_get_ap_watchdog_flag(void);