diff --git a/src/drivers/i2c/ww_ring/Kconfig b/src/drivers/i2c/ww_ring/Kconfig index 67a12eb50b..c671871031 100644 --- a/src/drivers/i2c/ww_ring/Kconfig +++ b/src/drivers/i2c/ww_ring/Kconfig @@ -1,3 +1,2 @@ config DRIVERS_I2C_WW_RING bool - depends on CHROMEOS diff --git a/src/drivers/i2c/ww_ring/ww_ring.c b/src/drivers/i2c/ww_ring/ww_ring.c index e1f255a858..243543a021 100644 --- a/src/drivers/i2c/ww_ring/ww_ring.c +++ b/src/drivers/i2c/ww_ring/ww_ring.c @@ -114,7 +114,7 @@ typedef struct { /* A structure to bind controller programs to a vboot state. */ typedef struct { - enum VbScreenType_t vb_screen; + enum display_pattern led_pattern; const TiLp55231Program * programs[WW_RING_NUM_LED_CONTROLLERS]; } WwRingStateProg; @@ -143,8 +143,7 @@ static const WwRingStateProg state_programs[] = { * for test purposes the blank screen program is set to blinking, will * be changed soon. */ - {VB_SCREEN_BLANK, {&led_blink_program, &led_blink_program} }, - /* Other vboot state programs are coming. */ + {WWR_ALL_OFF, {&led_blink_program, &led_blink_program} }, }; /* */ /****************************************************************/ @@ -388,7 +387,7 @@ static int ledc_init_validate(TiLp55231 *ledc) * Find a program matching screen type, and run it on both controllers, if * found. */ -int ww_ring_display_pattern(unsigned i2c_bus, enum VbScreenType_t screen_type) +int ww_ring_display_pattern(unsigned i2c_bus, enum display_pattern pattern) { int i; static int initted; @@ -399,7 +398,7 @@ int ww_ring_display_pattern(unsigned i2c_bus, enum VbScreenType_t screen_type) } for (i = 0; i < ARRAY_SIZE(state_programs); i++) - if (state_programs[i].vb_screen == screen_type) { + if (state_programs[i].led_pattern == pattern) { int j; for (j = 0; j < WW_RING_NUM_LED_CONTROLLERS; j++) { @@ -411,8 +410,8 @@ int ww_ring_display_pattern(unsigned i2c_bus, enum VbScreenType_t screen_type) return 0; } - printk(BIOS_WARNING, "%s: did not find program for screen %d\n", - __func__, screen_type); + printk(BIOS_WARNING, "%s: did not find program for pattern %d\n", + __func__, pattern); return -1; } diff --git a/src/drivers/i2c/ww_ring/ww_ring.h b/src/drivers/i2c/ww_ring/ww_ring.h index 628cd6c504..d2804ed46e 100644 --- a/src/drivers/i2c/ww_ring/ww_ring.h +++ b/src/drivers/i2c/ww_ring/ww_ring.h @@ -14,17 +14,21 @@ #ifndef __SRC_DRIVERS_VIDEO_WW_RING__H__ #define __SRC_DRIVERS_VIDEO_WW_RING__H__ -#if IS_ENABLED(CONFIG_CHROMEOS) -#include - +/* + * Different types of display patterns to be shown by the LED ring while + * contrlled by coreboot. + */ +enum display_pattern { + WWR_ALL_OFF, /* Turn the LEDs off. */ + WWR_RECOVERY_PUSHED, /* Recovery button push detected on start up. */ + WWR_WIPEOUT_REQUEST, /* Held long enough for wipout request. */ + WWR_RECOVERY_REQUEST, /* Held long enough for recovery request. */ +}; /* * ww_ring_display_pattern * * Display pattern on the ring LEDs. */ -int ww_ring_display_pattern(unsigned i2c_bus, enum VbScreenType_t screen_type); +int ww_ring_display_pattern(unsigned i2c_bus, enum display_pattern pattern); -#else -static inline int ww_ring_display_pattern(unsigned i2c_bus, int screen_type) { return 0;} -#endif #endif diff --git a/src/mainboard/google/storm/chromeos.c b/src/mainboard/google/storm/chromeos.c index d424f30842..044820640d 100644 --- a/src/mainboard/google/storm/chromeos.c +++ b/src/mainboard/google/storm/chromeos.c @@ -84,6 +84,12 @@ enum switch_state { wipeout_req }; +static void display_pattern(int pattern) +{ + if (board_id() == BOARD_ID_WHIRLWIND_SP5) + ww_ring_display_pattern(GSBI_ID_7, pattern); +} + #define WIPEOUT_MODE_DELAY_MS (8 * 1000) #define RECOVERY_MODE_EXTRA_DELAY_MS (8 * 1000) @@ -103,7 +109,9 @@ static enum switch_state get_switch_state(void) return saved_state; } + display_pattern(WWR_RECOVERY_PUSHED); printk(BIOS_INFO, "recovery button pressed\n"); + stopwatch_init_msecs_expire(&sw, WIPEOUT_MODE_DELAY_MS); do { @@ -113,9 +121,7 @@ static enum switch_state get_switch_state(void) } while (!stopwatch_expired(&sw)); if (sampled_value) { - if (board_id() == BOARD_ID_WHIRLWIND_SP5) - ww_ring_display_pattern(GSBI_ID_7, 0); - + display_pattern(WWR_WIPEOUT_REQUEST); printk(BIOS_INFO, "wipeout requested, checking recovery\n"); stopwatch_init_msecs_expire(&sw, RECOVERY_MODE_EXTRA_DELAY_MS); do { @@ -126,12 +132,14 @@ static enum switch_state get_switch_state(void) if (sampled_value) { saved_state = recovery_req; + display_pattern(WWR_RECOVERY_REQUEST); printk(BIOS_INFO, "recovery requested\n"); } else { saved_state = wipeout_req; } } else { saved_state = no_req; + display_pattern(WWR_ALL_OFF); } return saved_state;