BOOL kernel_power_off_charging_detection(void) { #if 0 if((upmu_is_chr_det() == KAL_TRUE)) { if(bypass_kernel_power_off_charging()){ return FALSE; } else { g_boot_mode = KERNEL_POWER_OFF_CHARGING_BOOT; return TRUE; } } else { upmu_set_rg_chrind_on(0); printf("[%s] Turn off HW Led\n", __func__); return FALSE; } #else /* */ if(is_force_boot()) { upmu_set_rg_chrind_on(0); printf("[%s] Turn off HW Led\n", __func__); return FALSE; } if((upmu_is_chr_det() == KAL_TRUE)) { g_boot_mode = KERNEL_POWER_OFF_CHARGING_BOOT; return TRUE; } #ifdef RTC_2SEC_REBOOT_ENABLE else if(rtc_2sec_boot_check()){ //customize reboot to KPOC, but not charger in, still boot to normal printf("[%s] customize auto boot to KPOC, but charger not in, still boot to normal\n", __func__); g_boot_mode = NORMAL_BOOT; return TRUE; } #endif else { /* power off */ #ifndef NO_POWER_OFF printf("[kernel_power_off_charging_detection] power off\n"); mt6575_power_off(); #endif return FALSE; } /* */ #endif }
BOOL kernel_power_off_charging_detection(void) { int off_mode_status = 1; /* */ if(is_force_boot()) { upmu_set_rg_chrind_on(0); printf("[%s] Turn off HW Led\n", __func__); return FALSE; } off_mode_status = get_off_mode_charge_status(); printf("[%s] off_mode_status %d\n", __func__, off_mode_status); if(upmu_is_chr_det() == KAL_TRUE) { if (off_mode_status) { g_boot_mode = KERNEL_POWER_OFF_CHARGING_BOOT; } else { g_boot_mode = NORMAL_BOOT; upmu_set_rg_chrind_on(0); return FALSE; } return TRUE; } else { /* power off */ #ifndef NO_POWER_OFF printf("[kernel_power_off_charging_detection] power off\n"); mt6575_power_off(); #endif return FALSE; } /* */ }
bool usb_cable_connected(void) { #ifdef CONFIG_POWER_EXT CHARGER_TYPE chg_type = mt_charger_type_detection(); os_printk(K_INFO, "%s ext-chrdet=%d type=%d\n", __func__, upmu_get_rgs_chrdet(), chg_type); if (upmu_get_rgs_chrdet() && (chg_type == STANDARD_HOST)) #else os_printk(K_INFO, "%s chrdet=%d\n", __func__, upmu_is_chr_det()); if (upmu_is_chr_det()) #endif { return true; } else { return false; } return true; }
void mt65xx_bat_init(void) { kal_int32 bat_vol; // Low Battery Safety Booting #if defined(SWCHR_POWER_PATH) bat_vol = get_i_sense_volt(1); #else bat_vol = get_bat_sense_volt(1); #endif pchr_turn_on_charging(KAL_TRUE); dprintf(CRITICAL, "[mt65xx_bat_init] check VBAT=%d mV with %d mV\n", bat_vol, BATTERY_LOWVOL_THRESOLD); if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && (mt6325_upmu_get_pwrkey_deb()==0) ) { dprintf(CRITICAL, "[mt65xx_bat_init] KPOC+PWRKEY => change boot mode\n"); g_boot_reason_change = true; } rtc_boot_check(false); #ifndef MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION #ifndef MTK_BATLOWV_NO_PANEL_ON_EARLY if (bat_vol < BATTERY_LOWVOL_THRESOLD) #else if (is_low_battery(bat_vol)) #endif { if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE) { dprintf(CRITICAL, "[%s] Kernel Low Battery Power Off Charging Mode\n", __func__); g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT; #if defined(SWCHR_POWER_PATH) check_bat_protect_status(); #endif return; } else { dprintf(CRITICAL, "[BATTERY] battery voltage(%dmV) <= CLV ! Can not Boot Linux Kernel !! \n\r",bat_vol); #ifndef NO_POWER_OFF mt6575_power_off(); #endif while(1) { dprintf(CRITICAL, "If you see the log, please check with RTC power off API\n\r"); } } } #endif return; }
bool is_usb_connected(void) { #ifdef CONFIG_POWER_EXT if (upmu_get_rgs_chrdet() #else if (upmu_is_chr_det() #endif && (mt_charger_type_detection() == STANDARD_HOST)) { return true; } else { return false; } }
void mt65xx_bat_init(void) { kal_int32 bat_vol; // Low Battery Safety Booting bat_vol = get_bat_sense_volt(1); #ifdef MTK_BQ24196_SUPPORT bat_vol = get_i_sense_volt(5); #endif dprintf(INFO, "[mt65xx_bat_init] check VBAT=%d mV with %d mV\n", bat_vol, BATTERY_LOWVOL_THRESOLD); pchr_turn_on_charging(); if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && (upmu_get_pwrkey_deb()==0) ) { dprintf(INFO, "[mt65xx_bat_init] KPOC+PWRKEY => change boot mode\n"); g_boot_reason_change = true; } rtc_boot_check(false); #ifndef MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION //if (bat_vol < BATTERY_LOWVOL_THRESOLD) if (is_low_battery(bat_vol)) { if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE) { dprintf(INFO, "[%s] Kernel Low Battery Power Off Charging Mode\n", __func__); g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT; return; } else { dprintf(INFO, "[BATTERY] battery voltage(%dmV) <= CLV ! Can not Boot Linux Kernel !! \n\r",bat_vol); #ifndef NO_POWER_OFF mt6575_power_off(); #endif while(1) { dprintf(INFO, "If you see the log, please check with RTC power off API\n\r"); } } } #endif return; }
void usb_check_connect(void) { if (upmu_is_chr_det()) { switch(mt_charger_type_detection()) { case STANDARD_HOST: mt_usb_connect(); DBG(0,"connect success\n"); return; case CHARGER_UNKNOWN: case STANDARD_CHARGER: case NONSTANDARD_CHARGER: case CHARGING_HOST: break; } } }
bool usb_cable_connected(void) { os_printk(K_DEBUG,"[MUSB] %s\n", __func__); #ifdef NEVER #ifdef CONFIG_POWER_EXT if (upmu_get_rgs_chrdet() #else if (upmu_is_chr_det() #endif && (mt_charger_type_detection() == STANDARD_HOST)) { return true; } else { return false; } #endif /* NEVER */ return true; }
//enter this function when low battery with charger void check_bat_protect_status() { kal_int32 bat_val = 0; #if defined(SWCHR_POWER_PATH) bat_val = get_i_sense_volt(5); #else bat_val = get_bat_sense_volt(5); #endif dprintf(CRITICAL, "[%s]: check VBAT=%d mV with %d mV, start charging... \n", __FUNCTION__, bat_val, BATTERY_LOWVOL_THRESOLD); if (bat_val < BATTERY_LOWVOL_THRESOLD) mt65xx_leds_brightness_set(MT65XX_LED_TYPE_RED, LED_FULL); while (bat_val < BATTERY_LOWVOL_THRESOLD) { mtk_wdt_restart(); if(upmu_is_chr_det() == KAL_FALSE) { dprintf(CRITICAL, "[BATTERY] No Charger, Power OFF !\n"); mt6575_power_off(); while(1); } pchr_turn_on_charging(KAL_TRUE); mdelay(5000); #if defined(SWCHR_POWER_PATH) pchr_turn_on_charging(KAL_FALSE); mdelay(100); bat_val = get_i_sense_volt(5); #else bat_val = get_bat_sense_volt(5); #endif } dprintf(CRITICAL, "[%s]: check VBAT=%d mV with %d mV, stop charging... \n", __FUNCTION__, bat_val, BATTERY_LOWVOL_THRESOLD); }
void platform_init(void) { #ifdef LK_PROFILING unsigned int time_nand_emmc; unsigned int time_load_logo; unsigned int time_bat_init; unsigned int time_backlight; unsigned int time_show_logo; unsigned int time_boot_mode; unsigned int time_sw_env; unsigned int time_platform_init; unsigned int time_env; unsigned int time_disp_init; unsigned int time_security_init; unsigned int time_RTC_boot_Check; time_platform_init = get_timer(0); time_nand_emmc = get_timer(0); #endif dprintf(INFO, "platform_init()\n"); #ifdef DUMMY_AP dummy_ap_entry(); #endif #ifdef MTK_EMMC_SUPPORT mmc_legacy_init(1); #else #ifndef MACH_FPGA nand_init(); nand_driver_test(); #endif #endif #ifdef MTK_KERNEL_POWER_OFF_CHARGING if((g_boot_arg->boot_reason == BR_USB) && (upmu_is_chr_det() == KAL_FALSE)) { printf("[%s] Unplugged Charger/Usb between Pre-loader and Uboot in Kernel Charging Mode, Power Off \n", __func__); mt6575_power_off(); } #endif #ifdef LK_PROFILING printf("[PROFILE] ------- NAND/EMMC init takes %d ms -------- \n", get_timer(time_nand_emmc)); time_env = get_timer(0); #endif env_init(); print_env(); #ifdef LK_PROFILING dprintf(INFO,"[PROFILE] ------- ENV init takes %d ms -------- \n", (int)get_timer(time_env)); #endif #ifdef LK_PROFILING time_disp_init = get_timer(0); #endif //FIXME: Disable for MT6582 FPGA Ealry Porting #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode ==CMD_MODE) mt_disp_init((void *)g_fb_base); #endif #ifdef LK_PROFILING dprintf(INFO,"[PROFILE] ------- disp init takes %d ms -------- \n", (int)get_timer(time_disp_init)); #endif #ifdef LK_PROFILING time_load_logo = get_timer(0); #endif #ifdef CONFIG_CFB_CONSOLE //FIXME: Disable for MT6582 FPGA Ealry Porting #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP drv_video_init(); #endif #endif //#endif #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP mboot_common_load_logo((unsigned long)mt_get_logo_db_addr(), "logo"); dprintf(INFO, "Show BLACK_PICTURE\n"); #endif //FIXME: Disable for MT6582 FPGA Ealry Porting #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY if(!is_low_battery(0)) { #endif mt_disp_fill_rect(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT, 0x0); mt_disp_power(TRUE); mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); mt_disp_wait_idle(); mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); mt_disp_wait_idle(); mt_disp_power(1); //power on display related modules #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY } #endif #endif #ifdef LK_PROFILING printf("[PROFILE] ------- load_logo takes %d ms -------- \n", get_timer(time_load_logo)); time_backlight = get_timer(0); #endif /*for kpd pmic mode setting*/ set_kpd_pmic_mode(); //FIXME: Disable for MT6582 FPGA Ealry Porting //#ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY if(!is_low_battery(0)) { #endif /*some lcm panel need more time to start show picture*/ msleep(50); mt65xx_backlight_on(); #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY } #endif //#endif #ifdef LK_PROFILING printf("[PROFILE] ------- backlight takes %d ms -------- \n", get_timer(time_backlight)); time_boot_mode = get_timer(0); #endif boot_mode_select(); #ifdef LK_PROFILING printf("[PROFILE] ------- boot mode select takes %d ms -------- \n", get_timer(time_boot_mode)); #endif #ifdef MTK_SECURITY_SW_SUPPORT #ifdef LK_PROFILING time_security_init = get_timer(0); #endif /* initialize security library */ #ifdef MTK_EMMC_SUPPORT sec_func_init(1); #else sec_func_init(0); #endif #ifdef LK_PROFILING dprintf(INFO,"[PROFILE] ------- Security init takes %d ms -------- \n", (int)get_timer(time_security_init)); #endif #endif /*Show download logo & message on screen */ if (g_boot_arg->boot_mode == DOWNLOAD_BOOT) { printf("[LK] boot mode is DOWNLOAD_BOOT\n"); #ifdef MTK_SECURITY_SW_SUPPORT /* verify da before jumping to da*/ if (sec_usbdl_enabled()) { u8 *da_addr = (u8 *)g_boot_arg->da_info.addr; u32 da_len = g_boot_arg->da_info.len; u32 sig_len = g_boot_arg->da_info.sig_len; u8 *sig_addr = (unsigned char *)da_addr + (da_len - sig_len); if (da_len == 0 || sig_len == 0) { printf("[LK] da argument is invalid\n"); printf("da_addr = 0x%x\n", da_addr); printf("da_len = 0x%x\n", da_len); printf("sig_len = 0x%x\n", sig_len); } if (sec_usbdl_verify_da(da_addr, (da_len - sig_len), sig_addr, sig_len)) { /* da verify fail */ video_printf(" => Not authenticated tool, download stop...\n"); while(1); /* fix me, should not be infinite loop in lk */ } } else #endif { printf(" DA verification disabled...\n"); } mt_disp_show_boot_logo(); video_printf(" => Downloading...\n"); mt65xx_backlight_on(); mtk_wdt_disable();//Disable wdt before jump to DA platform_uninit(); #ifdef HAVE_CACHE_PL310 l2_disable(); #endif #ifdef ENABLE_L2_SHARING config_shared_SRAM_size(); #endif arch_disable_cache(UCACHE); arch_disable_mmu(); jump_da(g_boot_arg->da_info.addr, g_boot_arg->da_info.arg1, g_boot_arg->da_info.arg2); } #ifdef LK_PROFILING time_bat_init = get_timer(0); #endif mt65xx_bat_init(); #ifdef LK_PROFILING printf("[PROFILE] ------- battery init takes %d ms -------- \n", get_timer(time_bat_init)); #endif #ifndef CFG_POWER_CHARGING #ifdef LK_PROFILING time_RTC_boot_Check = get_timer(0); #endif /* NOTE: if define CFG_POWER_CHARGING, will rtc_boot_check() in mt65xx_bat_init() */ rtc_boot_check(false); #ifdef LK_PROFILING dprintf(INFO,"[PROFILE] ------- RTC boot check Init takes %d ms -------- \n", (int)get_timer(time_RTC_boot_Check)); #endif #endif #ifdef LK_PROFILING time_show_logo = get_timer(0); #endif #ifdef MTK_KERNEL_POWER_OFF_CHARGING if(kernel_charging_boot() == 1) { #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY CHARGER_TYPE CHR_Type_num = CHARGER_UNKNOWN; charging_get_charger_type(&CHR_Type_num); if ((g_boot_mode != LOW_POWER_OFF_CHARGING_BOOT) || ((CHR_Type_num != STANDARD_HOST) && (CHR_Type_num != NONSTANDARD_CHARGER))) { dprintf(INFO, "[PROFILE] ------- g_boot_mode = %d -------- \n", g_boot_mode); #endif mt_disp_power(TRUE); mt_disp_show_low_battery(); mt_disp_wait_idle(); mt65xx_leds_brightness_set(6, 110); #ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY } #endif } else if(g_boot_mode != KERNEL_POWER_OFF_CHARGING_BOOT && g_boot_mode != LOW_POWER_OFF_CHARGING_BOOT) { #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP if (g_boot_mode != ALARM_BOOT && (g_boot_mode != FASTBOOT)) { mt_disp_show_boot_logo(); } #endif } #else #ifndef DISABLE_DISPLAY_IN_LK_FOR_82_BRINGUP if (g_boot_mode != ALARM_BOOT && (g_boot_mode != FASTBOOT)) { mt_disp_show_boot_logo(); } #endif #endif #ifdef LK_PROFILING printf("[PROFILE] ------- show logo takes %d ms -------- \n", get_timer(time_show_logo)); time_sw_env= get_timer(0); #endif //sw_env(); #ifdef LK_PROFILING printf("[PROFILE] ------- sw_env takes %d ms -------- \n", get_timer(time_sw_env)); printf("[PROFILE] ------- platform_init takes %d ms -------- \n", get_timer(time_platform_init)); #endif }
int kernel_charging_boot(void) { if((g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT || g_boot_mode == LOW_POWER_OFF_CHARGING_BOOT) && upmu_is_chr_det() == KAL_TRUE) { printf("[%s] Kernel Power Off Charging with Charger/Usb \n", __func__); return 1; } else if((g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT || g_boot_mode == LOW_POWER_OFF_CHARGING_BOOT) && upmu_is_chr_det() == KAL_FALSE) { printf("[%s] Kernel Power Off Charging without Charger/Usb \n", __func__); return -1; } else return 0; }
void platform_init(void) { /* init timer */ //mtk_timer_init(); #ifdef LK_PROFILING unsigned int time_nand_emmc; unsigned int time_load_logo; unsigned int time_bat_init; unsigned int time_backlight; unsigned int time_show_logo; unsigned int time_boot_mode; unsigned int time_sw_env; unsigned int time_platform_init; unsigned int time_env; time_platform_init = get_timer(0); time_nand_emmc = get_timer(0); #endif dprintf(INFO, "platform_init()\n"); #ifdef MTK_MT8193_SUPPORT mt8193_init(); #endif #ifdef MTK_EMMC_SUPPORT mmc_legacy_init(1); #else nand_init(); nand_driver_test(); #endif #ifdef MTK_KERNEL_POWER_OFF_CHARGING if((g_boot_arg->boot_reason == BR_USB) && (upmu_is_chr_det() == KAL_FALSE)) { printf("[%s] Unplugged Charger/Usb between Pre-loader and Uboot in Kernel Charging Mode, Power Off \n", __func__); mt6575_power_off(); } #endif #ifdef LK_PROFILING printf("[PROFILE] ------- NAND/EMMC init takes %d ms -------- \n", get_timer(time_nand_emmc)); time_env = get_timer(0); #endif env_init(); print_env(); #ifdef LK_PROFILING printf("[PROFILE] ------- ENV init takes %d ms -------- \n", get_timer(time_env)); time_load_logo = get_timer(0); #endif mboot_common_load_logo((unsigned long)mt_get_logo_db_addr(), "logo"); #if ((!defined(MTK_NCP1851_SUPPORT)) && (!defined(MTK_BQ24196_SUPPORT))) mt_disp_power(TRUE); //power on display related modules #endif dprintf(INFO, "Show BLACK_PICTURE\n"); mt_disp_fill_rect(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT, 0x0); mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); #ifdef LK_PROFILING printf("[PROFILE] ------- load_logo takes %d ms -------- \n", get_timer(time_load_logo)); time_backlight = get_timer(0); #endif /*for kpd pmic mode setting*/ set_kpd_pmic_mode(); #if ((!defined(MTK_NCP1851_SUPPORT)) && (!defined(MTK_BQ24196_SUPPORT))) //mt65xx_backlight_on(); #endif #ifdef LK_PROFILING printf("[PROFILE] ------- backlight takes %d ms -------- \n", get_timer(time_backlight)); time_boot_mode = get_timer(0); #endif enable_PMIC_kpd_clock(); boot_mode_select(); #ifdef LK_PROFILING printf("[PROFILE] ------- boot mode select takes %d ms -------- \n", get_timer(time_boot_mode)); #endif /* initialize security library */ #ifdef MTK_EMMC_SUPPORT sec_func_init(1); #else sec_func_init(0); #endif /*Show download logo & message on screen */ if (g_boot_arg->boot_mode == DOWNLOAD_BOOT) { printf("[LK] boot mode is DOWNLOAD_BOOT\n"); /* verify da before jumping to da*/ if (sec_usbdl_enabled()) { u8 *da_addr = g_boot_arg->da_info.addr; u32 da_sig_len = DRV_Reg32(SRAMROM_BASE + 0x54); u32 da_len = da_sig_len >> 10; u32 sig_len = da_sig_len & 0x3ff; u8 *sig_addr = (unsigned char *)da_addr + (da_len - sig_len); if (da_len == 0 || sig_len == 0) { printf("[LK] da argument is invalid\n"); printf("da_addr = 0x%x\n", da_addr); printf("da_len = 0x%x\n", da_len); printf("sig_len = 0x%x\n", sig_len); } if (sec_usbdl_verify_da(da_addr, (da_len - sig_len), sig_addr, sig_len)) { /* da verify fail */ video_printf(" => Not authenticated tool, download stop...\n"); DRV_WriteReg32(SRAMROM_BASE + 0x54, 0x0); while(1); /* fix me, should not be infinite loop in lk */ } } else {
//extern int BattVoltToTemp(int dwVolt); void mt65xx_bat_init(void) { kal_int32 bat_vol; kal_int32 bat_tempture; kal_int32 bat_temp; #ifdef MTK_IPO_POWERPATH_SUPPORT CHARGER_TYPE CHR_Type_num = CHARGER_UNKNOWN; #endif // Low Battery Safety Booting bat_vol = get_bat_sense_volt(1); bat_tempture = get_tbat_volt(1); bat_temp=BattVoltToTemp(bat_tempture); printf("the bat_vol is %d,the bat_tempture is %d,the bat_temp is %d\n",bat_vol,bat_tempture,bat_temp); #if defined(MTK_BQ24196_SUPPORT) ||defined(MTK_BQ24296_SUPPORT) bat_vol = get_i_sense_volt(5); #endif printf("[mt65xx_bat_init] check VBAT=%d mV with %d mV\n", bat_vol, BATTERY_LOWVOL_THRESOLD); pchr_turn_on_charging(); if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && (upmu_get_pwrkey_deb()==0) ) { printf("[mt65xx_bat_init] KPOC+PWRKEY => change boot mode\n"); g_boot_reason_change = true; } rtc_boot_check(false); #ifndef MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION //if (bat_vol < BATTERY_LOWVOL_THRESOLD) if (is_low_battery(bat_vol)) { if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE) { printf("[%s] Kernel Low Battery Power Off Charging Mode\n", __func__); g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT; return; } #ifdef BULMA_PROJECT else if((META_BOOT == g_boot_mode) ||(ADVMETA_BOOT == g_boot_mode)) { printf("Enter Meta Mode emw\n\r"); } #endif else { #ifdef MTK_IPO_POWERPATH_SUPPORT //boot linux kernel because of supporting powerpath and using standard AC charger if(upmu_is_chr_det() == KAL_TRUE) { charging_get_charger_type(&CHR_Type_num); if(STANDARD_CHARGER == CHR_Type_num) { return; } } #endif printf("[BATTERY] battery voltage(%dmV) <= CLV ! Can not Boot Linux Kernel !! \n\r",bat_vol); #ifndef NO_POWER_OFF mt6575_power_off(); #endif while(1) { printf("If you see the log, please check with RTC power off API\n\r"); } } } if(is_high_bat_tempature(bat_temp)) { printf("[BATTERY] battery tempature(%dmV) <= CLV ! Can not Boot Linux Kernel !! \n\r",bat_tempture); #ifndef NO_POWER_OFF mt6575_power_off(); #endif while(1) { printf("If you see the log, please check with RTC power off API\n\r"); } } #endif return; }