Recovery mode: Use LEDs to provide visual feedback
Change-Id: Ibc9b6ca538123ff46ae237b45d5654b0c6d326a4
diff --git a/arch/arm/boards/optimus/optimus.c b/arch/arm/boards/optimus/optimus.c
index df19053..004fca8 100644
--- a/arch/arm/boards/optimus/optimus.c
+++ b/arch/arm/boards/optimus/optimus.c
@@ -319,6 +319,14 @@
uint32_t tpm_init(void);
#endif
+static void gpio_toggle(unsigned int gpiomask) {
+ if (comcerto_gpio_read(gpiomask)) {
+ comcerto_gpio_set_0(gpiomask);
+ } else {
+ comcerto_gpio_set_1(gpiomask);
+ }
+}
+
static int is_factory_reset_pressed(void) {
return !comcerto_gpio_read(GPIO_6);
}
@@ -331,6 +339,21 @@
return 0;
}
+ // Blink red LED slowly
+ if (i % 50 == 0) {
+ gpio_toggle(GPIO_RED_LED);
+ }
+
+ mdelay(10);
+ }
+
+ // Increase blinking frequency of the LED to indicate that the button can be
+ // released
+ for (i = 0; is_factory_reset_pressed(); i++) {
+ if (i % 20 == 0) {
+ gpio_toggle(GPIO_RED_LED);
+ }
+
mdelay(10);
}
@@ -516,6 +539,12 @@
printf("Factory reset button is pressed, checking for recovery mode ...\n");
recovery_mode = is_factory_reset_pressed_continuously(5000);
printf("Recovery mode is%s active\n", (recovery_mode? "" : " not"));
+
+ if (!recovery_mode) {
+ comcerto_gpio_set_1(GPIO_RED_LED);
+ } else {
+ comcerto_gpio_set_0(GPIO_RED_LED);
+ }
}
if (recovery_mode) {