BOOL boot_menu_key_trigger(void) { #if 1 //wait ulong begin = get_timer(0); dprintf(CRITICAL,"\n%s Check boot menu\n",MODULE_NAME); dprintf(CRITICAL,"%s Wait 50ms for special keys\n",MODULE_NAME); //let some case of recovery mode pass. if(unshield_recovery_detection()) { return TRUE; } while(get_timer(begin)<50) { if(mtk_detect_key(MT65XX_BOOT_MENU_KEY)) { mtk_wdt_disable(); boot_mode_menu_select(); mtk_wdt_init(); return TRUE; } } #endif return FALSE; }
BOOL boot_menu_key_trigger(void) { #if 1 //wait ulong begin = get_timer(0); printf("\n%s Check boot menu\n",MODULE_NAME); printf("%s Wait 50ms for special keys\n",MODULE_NAME); //let some case of recovery mode pass. if(unshield_recovery_detection()) { return TRUE; } while(get_timer(begin)<50) { //lingjinming modify for p210 you ni sen 2014 09 19 #if defined(P201_UNISON_KEYPAD) if(pmic_detect_homekey()) #else if(mtk_detect_key(MT65XX_BOOT_MENU_KEY)) #endif { mtk_wdt_disable(); boot_mode_menu_select(); mtk_wdt_init(); return TRUE; } } #endif return FALSE; }
void boot_mode_select(void) { int factory_forbidden = 0; // int forbid_mode; /*We put conditions here to filer some cases that can not do key detection*/ extern int kedump_mini(void) __attribute__((weak)); if (kedump_mini) { if (kedump_mini()) return; } if (meta_detection()) { return; } if (aee_kdump_detection()) { return; } #if defined (HAVE_LK_TEXT_MENU) /*Check RTC to know if system want to reboot to Fastboot*/ if(Check_RTC_PDN1_bit13()) { dprintf(CRITICAL, "[FASTBOOT] reboot to boot loader\n"); g_boot_mode = FASTBOOT; Set_Clr_RTC_PDN1_bit13(false); return; } /*If forbidden mode is factory, cacel the factory key detection*/ if(g_boot_arg->sec_limit.magic_num == 0x4C4C4C4C) { if(g_boot_arg->sec_limit.forbid_mode == F_FACTORY_MODE) { //Forbid to enter factory mode dprintf(CRITICAL, "%s Forbidden\n",MODULE_NAME); factory_forbidden=1; } } // forbid_mode = g_boot_arg->boot_mode &= 0x000000FF; /*If boot reason is power key + volumn down, then disable factory mode dectection*/ if(mtk_detect_pmic_just_rst()) { factory_forbidden=1; } /*Check RTC to know if system want to reboot to Recovery*/ if(Check_RTC_Recovery_Mode()) { g_boot_mode = RECOVERY_BOOT; return; } /*If MISC Write has not completed in recovery mode before system reboot, go to recovery mode to finish remain tasks*/ if(unshield_recovery_detection()) { return; } ulong begin = get_timer(0); /*we put key dectection here to detect key which is pressed*/ dprintf(INFO, "eng build\n"); #ifdef MT65XX_FACTORY_KEY dprintf(CRITICAL, "MT65XX_FACTORY_KEY 0x%x\n",MT65XX_FACTORY_KEY); #endif #ifdef MT65XX_BOOT_MENU_KEY dprintf(CRITICAL, "MT65XX_BOOT_MENU_KEY 0x%x\n",MT65XX_BOOT_MENU_KEY); #endif #ifdef MT65XX_RECOVERY_KEY dprintf(CRITICAL, "MT65XX_RECOVERY_KEY 0x%x\n",MT65XX_RECOVERY_KEY); #endif while(get_timer(begin)<50) { if(!factory_forbidden){ if(mtk_detect_key(MT65XX_FACTORY_KEY)) { dprintf(CRITICAL, "%s Detect key\n",MODULE_NAME); dprintf(CRITICAL, "%s Enable factory mode\n",MODULE_NAME); g_boot_mode = FACTORY_BOOT; //video_printf("%s : detect factory mode !\n",MODULE_NAME); return; } } #if MT65XX_BOOT_MENU_KEY if(mtk_detect_key(MT65XX_BOOT_MENU_KEY)) { dprintf(CRITICAL, "\n%s Check boot menu\n",MODULE_NAME); dprintf(CRITICAL, "%s Wait 50ms for special keys\n",MODULE_NAME); mtk_wdt_disable(); /*************************/ mt65xx_backlight_on(); /*************************/ boot_mode_menu_select(); mtk_wdt_init(); return; } #endif #ifdef MT65XX_RECOVERY_KEY if(mtk_detect_key(MT65XX_RECOVERY_KEY)) { dprintf(CRITICAL, "%s Detect cal key\n",MODULE_NAME); dprintf(CRITICAL, "%s Enable recovery mode\n",MODULE_NAME); g_boot_mode = RECOVERY_BOOT; //video_printf("%s : detect recovery mode !\n",MODULE_NAME); return; } #endif } #else /*We put conditions here to filer some cases that can not do key detection*/ /*Check RTC to know if system want to reboot to Fastboot*/ #ifdef MTK_FASTBOOT_SUPPORT if(Check_RTC_PDN1_bit13()) { dprintf(INFO,"[FASTBOOT] reboot to boot loader\n"); g_boot_mode = FASTBOOT; Set_Clr_RTC_PDN1_bit13(false); return TRUE; } #endif /*If forbidden mode is factory, cacel the factory key detection*/ if(g_boot_arg->sec_limit.magic_num == 0x4C4C4C4C) { if(g_boot_arg->sec_limit.forbid_mode == F_FACTORY_MODE) { //Forbid to enter factory mode dprintf(INFO, "%s Forbidden\n",MODULE_NAME); factory_forbidden=1; } } // forbid_mode = g_boot_arg->boot_mode &= 0x000000FF; /*If boot reason is power key + volumn down, then disable factory mode dectection*/ if(mtk_detect_pmic_just_rst()) { factory_forbidden=1; } /*Check RTC to know if system want to reboot to Recovery*/ if(Check_RTC_Recovery_Mode()) { g_boot_mode = RECOVERY_BOOT; return TRUE; } /*If MISC Write has not completed in recovery mode and interrupted by system reboot, go to recovery mode to finish remain tasks*/ if(unshield_recovery_detection()) { return TRUE; } ulong begin = get_timer(0); /*we put key dectection here to detect key which is pressed*/ while(get_timer(begin)<50){ #ifdef MTK_FASTBOOT_SUPPORT if(mtk_detect_key(MT_CAMERA_KEY)) { dprintf(INFO,"[FASTBOOT]Key Detect\n"); g_boot_mode = FASTBOOT; return TRUE; } #endif if(!factory_forbidden){ if(mtk_detect_key(MT65XX_FACTORY_KEY)) { dprintf(INFO, "%s Detect key\n",MODULE_NAME); dprintf(INFO, "%s Enable factory mode\n",MODULE_NAME); g_boot_mode = FACTORY_BOOT; //video_printf("%s : detect factory mode !\n",MODULE_NAME); return TRUE; } } #ifdef MT65XX_RECOVERY_KEY if(mtk_detect_key(MT65XX_RECOVERY_KEY)) { dprintf(INFO, "%s Detect cal key\n",MODULE_NAME); dprintf(INFO, "%s Enable recovery mode\n",MODULE_NAME); g_boot_mode = RECOVERY_BOOT; //video_printf("%s : detect recovery mode !\n",MODULE_NAME); return TRUE; } #endif } #endif #ifdef MTK_KERNEL_POWER_OFF_CHARGING if(kernel_power_off_charging_detection()) { printf(" < Kernel Power Off Charging Detection Ok> \n"); return; } else { printf("< Kernel Enter Normal Boot > \n"); } #endif }