diff --git a/common/led_common.c b/common/led_common.c index a894e305db..24c8dfe814 100644 --- a/common/led_common.c +++ b/common/led_common.c @@ -71,3 +71,12 @@ static int led_command_control(struct host_cmd_handler_args *args) return EC_RES_SUCCESS; } DECLARE_HOST_COMMAND(EC_CMD_LED_CONTROL, led_command_control, EC_VER_MASK(1)); + +__attribute__((weak)) +void led_control(enum ec_led_id led_id, enum ec_led_state state) +{ + /* + * Default weak implementation that does not affect the state of + * LED. Boards can provide their own implementation. + */ +} diff --git a/include/ec_commands.h b/include/ec_commands.h index b837c6dc75..92d25945e4 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -1720,6 +1720,8 @@ enum ec_led_id { EC_LED_ID_LEFT_LED, /* LED to indicate right side */ EC_LED_ID_RIGHT_LED, + /* LED to indicate recovery mode with HW_REINIT */ + EC_LED_ID_RECOVERY_HW_REINIT_LED, EC_LED_ID_COUNT }; diff --git a/include/led_common.h b/include/led_common.h index 964ad3bf02..e86ed5b39c 100644 --- a/include/led_common.h +++ b/include/led_common.h @@ -67,4 +67,20 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness); * */ void led_enable(int enable); + +enum ec_led_state { + LED_STATE_OFF = 0, + LED_STATE_ON = 1, + LED_STATE_RESET = 2, +}; + +/** + * Control state of LED. + * + * @param led_id ID of LED to control + * @param state 0=off, 1=on, 2=reset to default + * + */ +void led_control(enum ec_led_id id, enum ec_led_state state); + #endif /* __CROS_EC_LED_COMMON_H */ diff --git a/util/ectool.c b/util/ectool.c index 758a54d3c7..b7cde903ec 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -254,7 +254,7 @@ BUILD_ASSERT(ARRAY_SIZE(led_color_names) == EC_LED_COLOR_COUNT); /* Note: depends on enum ec_led_id */ static const char * const led_names[] = { - "battery", "power", "adapter", "left", "right"}; + "battery", "power", "adapter", "left", "right", "recovery_hwreinit"}; BUILD_ASSERT(ARRAY_SIZE(led_names) == EC_LED_ID_COUNT); /* Check SBS numerical value range */