diff options
author | Shohei Sakamoto <sakamotos@casio.co.jp> | 2015-12-08 22:15:51 +0900 |
---|---|---|
committer | Shohei Sakamoto <sakamotos@casio.co.jp> | 2015-12-10 11:14:07 +0900 |
commit | 11025bcb995a46418cfb3d960b417157933b175e (patch) | |
tree | 7c60bbc5c6f2fbb14ab5501dd4031af708bb94dd | |
parent | a4242697392ceeb27bbe652099575eea455be212 (diff) | |
download | koi-uboot-11025bcb995a46418cfb3d960b417157933b175e.tar.gz |
Add UI for select recovery mode
Added fastboot/recovery selector.
Fixed "fastboot flash kernel/ramdisk" fails when entering
fastboot-mode by pressing VOLUME-UP key.
Change-Id: Ibb35cd4630f7a16812da2032dd88185c61ae2e94
Signed-off-by: Shohei Sakamoto <sakamotos@casio.co.jp>
-rw-r--r-- | board/samsung/koi/koi.c | 222 | ||||
-rw-r--r-- | common/cmd_lcd.c | 2 | ||||
-rw-r--r-- | include/configs/koi.h | 3 |
3 files changed, 68 insertions, 159 deletions
diff --git a/board/samsung/koi/koi.c b/board/samsung/koi/koi.c index beb27f1d8..4a5073b94 100644 --- a/board/samsung/koi/koi.c +++ b/board/samsung/koi/koi.c @@ -306,7 +306,7 @@ unsigned int check_key(void) unsigned int pwr, home, back; - /* GPX1_7 : Volume Down (F1) Key */ + /* GPX1_7 : Volume Up */ s5p_gpio_direction_input(&gpio2->x1, 7); s5p_gpio_set_pull(&gpio2->x1, 7, GPIO_PULL_UP); @@ -314,7 +314,7 @@ unsigned int check_key(void) s5p_gpio_direction_input(&gpio2->x2, 7); s5p_gpio_set_pull(&gpio2->x2, 7, GPIO_PULL_UP); - /* GPX0_0 : Volume Up (F2) Key */ + /* GPX0_0 : Volume Down */ s5p_gpio_direction_input(&gpio2->x0, 0); s5p_gpio_set_pull(&gpio2->x0, 0, GPIO_PULL_UP); @@ -351,112 +351,10 @@ unsigned int check_key(void) } } - return cur_key_val; + return cur_key_val ^ 7; /* low->high active */ } #endif -#ifdef CONFIG_EMERGENCY_MODE -#define RECOVERY_MENU_CNT 3 -char func_name[RECOVERY_MENU_CNT][30] = {"Reset", "Wipe", "Update"}; - -int menu_select(int i) -{ - switch(i) { - case 0: - setenv("bootcmd", "reset"); - break; - case 1: -#ifdef CONFIG_CMD_LCD - run_command("lcd 0", 0); - run_command("lcd 2", 0); -#endif -#ifdef CONFIG_CMD_LCDTEXT - run_command("lcdtext 0 30 \"Formatting ...\"", 0); -#endif - run_command(CONFIG_FACTORY_RESET_COMMAND, 0); - break; - case 2: - setenv("bootcmd", CONFIG_BOOTCOMMAND_VIA_SCRIPT); - break; - } - return 0; -} - -int menu_up(int i) -{ - int ret; - - if (i <= 0) - ret = RECOVERY_MENU_CNT - 1; - else - ret = i - 1; - - return ret; -} - -int menu_down(int i) -{ - int ret; - - if (i >= RECOVERY_MENU_CNT - 1) - ret = 0; - else - ret = i + 1; - - return ret; -} - -int recovery_mode(void) -{ - int i = 0, init = 1; - unsigned int cur_key_val = 0, old_key_val = 7, temp_key_val = 0; - -#ifdef CONFIG_CMD_LCD - run_command("lcd 0", 0); - run_command("lcd 2", 0); -#endif - while (1) { - temp_key_val = check_key(); - if (temp_key_val != 0x7 || init) { - init = 0; - old_key_val = cur_key_val; - cur_key_val = temp_key_val; -#ifdef CONFIG_CMD_LCD - run_command("lcd 2", 0); -#endif - switch(cur_key_val) { - case 0x3: // Power Key Pressed : Select - menu_select(i); - return 0; - case 0x5: // Home Key Pressed : Up - i = menu_up(i); - break; - case 0x6: // Back Key Pressed : Down - i = menu_down(i); - break; - } -#ifdef CONFIG_CMD_LCDTEXT - if (i == 0) - run_command("lcdtext 0 30 \"v Reset\"", 0); - else - run_command("lcdtext 0 30 \" Reset\"", 0); - - if (i == 1) - run_command("lcdtext \"v Wipe the partition\"", 0); - else - run_command("lcdtext \" Wipe the partition\"", 0); - - if (i == 2) - run_command("lcdtext \"v Update from SDcard\"", 0); - else - run_command("lcdtext \" Update from SDcard\"", 0); -#endif - printf("%s \n", func_name[i]); - } - } - return 0; -} -#endif static void set_dieid(char *buf) { @@ -712,6 +610,55 @@ int write_raw_kernel(unsigned char *buffer, unsigned size) return ret; } +static void show_selected(int num, int fin) +{ + if (num == 0) { + if (fin) + run_command("lcdtextcolor 255 0 0", 0); + else + run_command("lcdtextcolor 255 255 255", 0); + run_command("lcdtext 80 70 \"FASTBOOT MODE\"", 0); + run_command("lcdtextcolor 80 80 80", 0); + run_command("lcdtext \"RECOVERY MODE\"", 0); + } else { + run_command("lcdtextcolor 80 80 80", 0); + run_command("lcdtext 80 70 \"FASTBOOT MODE\"", 0); + if (fin) + run_command("lcdtextcolor 255 0 0", 0); + else + run_command("lcdtextcolor 255 255 255", 0); + run_command("lcdtext \"RECOVERY MODE\"", 0); + } +} + +static int select_mode(void) +{ + int i = 0, init = 1; + unsigned int key_val; + int num = 0; + + show_selected(num, 0); + + // wait for key release + while (1) { + key_val = check_key(); + if (key_val == 0) + break; + } + + while (1) { + key_val = check_key(); + if (key_val == 1 || // vol up + key_val == 2) { // vol down + num ^= 1; + show_selected(num, 0); + } else if(key_val == 4) {//power + break; + } + } + return num; +} + static char tmp_buf[512]; int board_late_init(void) @@ -744,52 +691,6 @@ int board_late_init(void) reason, VERSION_BOOTLOADER); strcat(tmp_buf, CONFIG_BOOTARGS); -#if defined(CONFIG_EMERGENCY_MODE) || defined(CONFIG_FASTBOOT_MODE) - pressed_key = check_key(); - switch(pressed_key) { -#ifdef CONFIG_EMERGENCY_MODE - case 0x1: - if ((om_status >> 1) == OM_1stSDMMC_2ndUSB) { - printf("RecoveryMode from microSD \n"); -#ifdef CONFIG_CMD_LCD - run_command("lcd 0", 0); - run_command("lcd 2", 0); -#endif -#ifdef CONFIG_CMD_LCDTEXT - run_command("lcdtext \"Copying Bootloaders\"", 0); - run_command("lcdtext \" from microSD to eMMC...\"", 0); -#endif - run_command(CONFIG_RECOVERYCOMMAND_1st_SDMMC, 0); -#ifdef CONFIG_CMD_LCDTEXT - run_command("lcdtext \"Done...\"", 0); -#endif - mdelay(1000); - setenv("bootcmd", " "); - setenv("bootdelay", "0"); -#ifdef CONFIG_CMD_LCDTEXT - run_command("lcd 1", 0); -#endif - } else { - printf("Recovery Mode \n"); - setenv("bootdelay", "0"); - recovery_mode(); - } - break; -#endif -#ifdef CONFIG_FASTBOOT_MODE - case 0x2: - printf("Download Mode \n"); -#ifdef CONFIG_CMD_LCD - run_command("lcd 0", 0); -#endif -#ifdef CONFIG_CMD_LCDTEXT - run_command("lcdtext \"Downlaod Mode\"", 0); -#endif - run_command("fastboot", 0); - break; -#endif - } -#endif #ifdef CONFIG_RECOVERY_MODE u32 second_boot_info = readl(CONFIG_SECONDARY_BOOT_INFORM_BASE); @@ -811,8 +712,24 @@ int board_late_init(void) } #endif #endif + run_command("lcd 0", 0); + run_command("lcd 2", 0); mode = readl(&pmu->inform4); + if (mode == 0) { + pressed_key = check_key(); + if (pressed_key & 1) { // Volume up + if (select_mode() == 0) + mode = CONFIG_FASTBOOT_MODE; + else + mode = CONFIG_FACTORY_RESET_MODE; + } + } + if (mode == CONFIG_FASTBOOT_MODE) { + show_selected(0, 1); + } else if (mode == CONFIG_FACTORY_RESET_MODE) { + show_selected(1, 1); + } #ifdef CONFIG_EFI_PARTITION if (OmPin == BOOT_MMCSD) { @@ -895,9 +812,6 @@ int board_late_init(void) if(mode == CONFIG_FASTBOOT_MODE) { writel(0x0, &pmu->inform4); printf("Download Mode \n"); -#ifdef CONFIG_CMD_LCD - run_command("lcd 0", 0); -#endif run_command("fastboot", 0); printf("board late init fastboot execute!!\n"); } diff --git a/common/cmd_lcd.c b/common/cmd_lcd.c index a83e22097..c6c925070 100644 --- a/common/cmd_lcd.c +++ b/common/cmd_lcd.c @@ -51,8 +51,6 @@ int do_lcd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) case 0: printf("turnon\n"); Display_Turnon(); - Lcd_read_bootlogo(); - s5p_lcd_draw_bootlogo(); mdelay(200); Backlight_Turnon(); break; diff --git a/include/configs/koi.h b/include/configs/koi.h index 0516b95cf..d712e22e3 100644 --- a/include/configs/koi.h +++ b/include/configs/koi.h @@ -394,9 +394,6 @@ /* Bootloader Recovery */ #undef CONFIG_RECOVERY_MODE -/* Emergency Mode */ -#define CONFIG_EMERGENCY_MODE - /* Boot configuration */ #define BOOT_ONENAND 0x1 #define BOOT_NAND 0x40000 |