void leds_deinit(void) { printf("[LEDS]uboot: leds_deinit: LEDS off \n\r"); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_RED, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_GREEN, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_BLUE, LED_OFF); }
void disable_low_power_settings(void) { int ret; dcm_ver("[%s]: entry\n", __func__); // restore interrupt mask ret = mt6577_irq_mask_restore(&mask); if (!ret) { dcm_ver("[%s]: success to restore all irq lines\n", __func__); } else { dcm_err("[%s]: fail to restore all irq lines\n", __func__); } // turn on LCD //#if defined(CONFIG_MTK_FB) #if 0 DISP_PowerEnable(TRUE); DISP_PanelEnable(TRUE); #endif // turn on backlight #if defined(CONFIG_MTK_LEDS) mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_FULL); #endif }
void enable_low_power_settings(void) { int ret; dcm_ver("[%s]: entry\n", __func__); // turn off backlight #if defined(CONFIG_MTK_LEDS) mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, 0); #endif // turn off LCD //#if defined(CONFIG_MTK_FB) #if 0 DISP_PanelEnable(FALSE); DISP_PowerEnable(FALSE); #endif // save interrupt status and mask all interrupt ret = mt6577_irq_mask_all(&mask); if (!ret) { dcm_ver("[%s]: success to mask all irq lines\n", __func__); } else { dcm_err("[%s]: fail to mask all irq lines\n", __func__); } mt6577_irq_unmask_for_sleep(MT6577_KP_IRQ_ID); }
static int primary_cpu_enter_wfi(void *data) { #if 0 int i = 0; #endif unsigned int irqstat = 0; int cpu = *(int*)data; dcm_info("[%s]: thread idle-%d start\n", __func__, cpu); #ifdef CONFIG_LOCAL_WDT mpcore_wk_wdt_stop(); #endif mt6577_irq_mask_all(&cpu_irq_mask[cpu]); mt6577_irq_unmask_for_sleep(MT6577_KP_IRQ_ID); dcm_info("[%s]: cpu%d waiting all threads done\n", __func__, cpu); complete(&each_thread_done[cpu]); wait_for_completion(&all_threads_done); local_irq_disable(); dcm_info("[%s]: cpu%d before wfi\n", __func__, cpu); #if 0 do { go_to_idle(); irqstat = DRV_Reg32(GIC_CPU_BASE + GIC_CPU_INTACK) & 0x3FF; dcm_info("[%s]: cpu%d after wfi(irqstat:0x%x/%u)\n", __func__, cpu, irqstat, irqstat); if (irqstat == MT6577_KP_IRQ_ID) { break; } } while (1); #else go_to_idle(); irqstat = DRV_Reg32(GIC_CPU_BASE + GIC_CPU_INTACK) & 0x3FF; dcm_info("[%s]: cpu%d after wfi(irqstat:0x%x/%u)\n", __func__, cpu, irqstat, irqstat); #endif local_irq_enable(); spin_lock(&factory_lock); mt6577_irq_mask_restore(&cpu_irq_mask[cpu]); spin_unlock(&factory_lock); #if 0 for (i = 1; i < nr_cpu_ids; i++) { wake_flag[i] = 1; smp_send_reschedule(i); } #endif #if defined(CONFIG_MTK_LEDS) mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_FULL); #endif dcm_info("[%s]: thread idle-%d end\n", __func__, cpu); return 0; }
void factory_cpus_idle_test(void) { int cpu = 0; int i = 0; unsigned char name[10] = {'\0'}; struct task_struct *thread[nr_cpu_ids]; #ifdef CONFIG_SMP int ret = 0; #endif spin_lock(&factory_lock); cpu = smp_processor_id(); spin_unlock(&factory_lock); dcm_info("[%s]: it's cpu%d, num_online_cpus=%d\n", __func__, cpu, num_online_cpus()); #ifdef CONFIG_SMP mutex_lock(&ftm_cpu_prepare); disable_hotplug_policy(true, nr_cpu_ids); for (i = 1; i < nr_cpu_ids; i++) { ret = cpu_up(i); dcm_info("[%s]cpu_up(cpu%d) return %d, cpu1_killed=%u\n", __func__, i, ret, cpu1_killed); } mutex_unlock(&ftm_cpu_prepare); #endif mtk_wdt_disable(); // disable watch dog // turn off backlight #if defined(CONFIG_MTK_LEDS) mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, 0); #endif for (i = nr_cpu_ids-1; i >= 0; i--) { cpuid[i] = i; init_completion(&each_thread_done[i]); sprintf(name, "idle-%d", i); thread[i] = kthread_create(cpu_enter_wfi[i], &cpuid[i], name); if (IS_ERR(thread[i])) { int ret = PTR_ERR(thread[i]); thread[i] = NULL; dcm_info("[%s]: kthread_create %s fail(%d)\n", __func__, name, ret); return; } dcm_info("[%s]: kthread_create %s done\n", __func__, name); kthread_bind(thread[i], i); dcm_info("[%s]: kthread_bind %s done\n", __func__, name); wake_up_process(thread[i]); dcm_info("[%s]: wake_up_process %s done\n", __func__, name); wait_for_completion(&each_thread_done[i]); } dcm_info("[%s]: cpu%d starts to complete_all all_threads_done\n", __func__, cpu); complete_all(&all_threads_done); }
//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 leds_battery_low_charging(int flag) { if(flag) { mt65xx_blink_set(MT65XX_LED_TYPE_RED, 0, 0); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_RED, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_GREEN, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_BLUE, LED_FULL); } else { mt65xx_leds_brightness_set(MT65XX_LED_TYPE_RED, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_GREEN, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_BLUE, LED_OFF); mt65xx_blink_set(MT65XX_LED_TYPE_RED, 250, 500); } }
static void pchr_turn_on_charging (void) { #if !defined(MTK_JEITA_STANDARD_SUPPORT) BATTERY_VOLTAGE_ENUM cv_voltage; #endif kal_uint32 charging_enable = KAL_TRUE; if ( BMT_status.bat_charging_state == CHR_ERROR ) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Charger Error, turn OFF charging !\n"); charging_enable = KAL_FALSE; } else if( (g_platform_boot_mode==META_BOOT) || (g_platform_boot_mode==ADVMETA_BOOT) ) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] In meta or advanced meta mode, disable charging.\n"); charging_enable = KAL_FALSE; } else { /*HW initialization*/ battery_charging_control(CHARGING_CMD_INIT,NULL); battery_xlog_printk(BAT_LOG_FULL, "charging_hw_init\n" ); /* Set Charging Current */ if (g_bcct_flag == 1) { select_charging_curret_bcct(); battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret_bcct !\n"); } else { select_charging_curret(); battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret !\n"); } if( g_temp_CC_value == CHARGE_CURRENT_0_00_MA || g_temp_input_CC_value == CHARGE_CURRENT_0_00_MA) { charging_enable = KAL_FALSE; battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] charging current is set 0mA, turn off charging !\r\n"); } else { battery_charging_control(CHARGING_CMD_SET_INPUT_CURRENT,&g_temp_input_CC_value); battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); /*Set CV Voltage*/ #if !defined(MTK_JEITA_STANDARD_SUPPORT) #ifdef HIGH_BATTERY_VOLTAGE_SUPPORT cv_voltage = BATTERY_VOLT_04_340000_V; #else cv_voltage = BATTERY_VOLT_04_200000_V; #endif battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE,&cv_voltage); #endif } } /* enable/disable charging */ battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable); battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] pchr_turn_on_charging(), enable =%d !\r\n", charging_enable); //<Begin> <Add FTM battery charging leds control> <20131107> <mickal.ma> if(get_boot_mode() == FACTORY_BOOT || get_boot_mode() == RECOVERY_BOOT){ if(charging_enable){ if (BMT_status.UI_SOC >= 100) { mt65xx_leds_brightness_set(0/*MT65XX_LED_TYPE_RED*/, 0/*LED_OFF*/); mt65xx_leds_brightness_set(1/*MT65XX_LED_TYPE_GREEN*/, 255/*LED_FULL*/); mt65xx_leds_brightness_set(2/*MT65XX_LED_TYPE_BLUE*/, 0/*LED_OFF*/); } else { mt65xx_leds_brightness_set(0/*MT65XX_LED_TYPE_RED*/, 255/*LED_FULL*/); mt65xx_leds_brightness_set(1/*MT65XX_LED_TYPE_GREEN*/, 0/*LED_OFF*/); mt65xx_leds_brightness_set(2/*MT65XX_LED_TYPE_BLUE*/, 0/*LED_OFF*/); } } } //<End> <Add FTM battery charging leds control> <20131107> <mickal.ma> }
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 }
void mt65xx_backlight_off(void) { printf("[LEDS]uboot: mt65xx_backlight_off \n\r"); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_OFF); }
void leds_battery_medium_charging(void) { mt65xx_leds_brightness_set(MT65XX_LED_TYPE_RED, LED_FULL); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_GREEN, LED_OFF); mt65xx_leds_brightness_set(MT65XX_LED_TYPE_BLUE, LED_OFF); }