--- a/board/mediatek/mt7622/mt7622_rfb.c +++ b/board/mediatek/mt7622/mt7622_rfb.c @@ -6,9 +6,16 @@ #include #include +#include +#include #include #include #include +#include + +#ifndef CONFIG_RESET_BUTTON_LABEL +#define CONFIG_RESET_BUTTON_LABEL "reset" +#endif #include #include @@ -25,7 +32,22 @@ int board_init(void) int board_late_init(void) { - gd->env_valid = 1; //to load environment variable from persistent store + struct udevice *dev; + + if (!button_get_by_label(CONFIG_RESET_BUTTON_LABEL, &dev)) { + puts("reset button found\n"); +#ifdef CONFIG_RESET_BUTTON_SETTLE_DELAY + if (CONFIG_RESET_BUTTON_SETTLE_DELAY > 0) { + button_get_state(dev); + mdelay(CONFIG_RESET_BUTTON_SETTLE_DELAY); + } +#endif + if (button_get_state(dev) == BUTTON_ON) { + puts("button pushed, resetting environment\n"); + gd->env_valid = ENV_INVALID; + } + } + env_relocate(); return 0; } --- a/arch/arm/mach-mediatek/Kconfig +++ b/arch/arm/mach-mediatek/Kconfig @@ -140,4 +140,11 @@ config MTK_BROM_HEADER_INFO source "board/mediatek/mt7629/Kconfig" +config RESET_BUTTON_LABEL + string "Button to trigger factory reset" + default "reset" + +config RESET_BUTTON_SETTLE_DELAY + int "Delay to wait for button to settle" + default 0 endif