int Set_Charging_Commmand(int nCommand) { int nRet = KAL_FALSE; mutex_lock(&charging_timer_api_lock); if (charger_command_status == CHARGER_COMMAND_STOP) { switch (nCommand) { case CHARGING_SET_USB_500_COMMAND : case CHARGING_SET_TA_MODE_COMMAND : case CHARGING_SET_USB_100_COMMAND : case CHARGING_SET_FACTORY_MODE_COMMAND : case CHARGING_DEACTIVE_COMMAND : charger_command = nCommand; charger_command_status = CHARGER_COMMAND_RUN; charger_command_execute_index = 0; nRet = KAL_TRUE; break; default : charger_command = CHARGING_UNKNOWN_COMMAND; charger_command_status = CHARGER_COMMAND_STOP; charger_command_execute_index = 0; nRet = KAL_FALSE; break; } if (nRet == KAL_TRUE) { if (charger_command_list[charger_command].cmd_interval[charger_command_execute_index].is_high) { mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE); } else { mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO); } config.u4CompareH = 0; config.u4CompareL = charger_command_list[charger_command].cmd_interval[charger_command_execute_index].delay_count; charger_command_execute_index++; /* */ GPT_Config(config); /* */ GPT_ClearCount(gpt_num); GPT_SetCompare(gpt_num, config.u4CompareL); GPT_Restart(gpt_num); } } mutex_unlock(&charging_timer_api_lock); return nRet; }
void gpt_timer_irq_handler(UINT16 i) { /* Do not added printf or log print in the function because it is interrupt service routine. */ spin_lock_irqsave(&g_single_charger_lock, g_single_flags); // end command if (charger_command_list[charger_command].cmd_interval[charger_command_execute_index].delay_count == 0) { charger_command = CHARGING_UNKNOWN_COMMAND; charger_command_status = CHARGER_COMMAND_STOP; charger_command_execute_index = 0; spin_unlock_irqrestore(&g_single_charger_lock, g_single_flags); return; } if (charger_command_list[charger_command].cmd_interval[charger_command_execute_index].is_high) { /* */ mt_set_gpio_pull_select(CHG_EN_SET_N, GPIO_PULL_UP); /* */ mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE); } else { /* */ mt_set_gpio_pull_select(CHG_EN_SET_N, GPIO_PULL_DOWN); /* */ mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO); } config.u4CompareH = 0; config.u4CompareL = charger_command_list[charger_command].cmd_interval[charger_command_execute_index].delay_count; charger_command_execute_index++; /* */ GPT_Config(config); /* */ GPT_ClearCount(gpt_num); GPT_SetCompare(gpt_num, config.u4CompareL); GPT_Restart(gpt_num); spin_unlock_irqrestore(&g_single_charger_lock, g_single_flags); }
void sc_dpidle_after_wfi(void) { #ifdef PROFILE_DPIDLE dpidle_tick_pos = GPT_GetCounter(GPT2); dpidle_wakeup_src = DRV_Reg32(SC_WAKEUP_SRC); if (dpidle_debug_mask & DEBUG_PROFILE) { #ifdef CONFIG_LOCAL_TIMERS dcm_info("[%s]%5d %10u %10u %10u %10u %08x\n", __func__, dpidle_profile_idx, dpidle_tick_pre, dpidle_tick_mid, dpidle_tick_pos, dpidle_counter, dpidle_wakeup_src); #else dcm_info("[%s]%5d %10u %10u %10u %10u %10u %10u %08x\n", __func__, dpidle_profile_idx, dpidle_tick_pre, dpidle_tick_mid, dpidle_tick_pos, dpidle_counter, dpidle_compare, dpidle_compare_update, dpidle_wakeup_src); #endif dpidle_profile_idx++; } #endif #ifdef CONFIG_LOCAL_WDT wdt_tick_pos = GPT_GetCounter(GPT2); if (wdt_counter_pre > (wdt_tick_pos - wdt_tick_pre)) { wdt_counter_pos = wdt_counter_pre - (wdt_tick_pos - wdt_tick_pre); mpcore_wdt_set_counter(wdt_counter_pos); } else { dcm_info("[%s]:wdt_counter_pre=%10lu, wdt_tick_pre=%10lu, wdt_tick_pos=%10lu\n", __func__, wdt_counter_pre, wdt_tick_pre, wdt_tick_pos); mpcore_wdt_set_counter(1); } #endif #ifdef CONFIG_LOCAL_TIMERS if (GPT_Get_IRQ(WAKEUP_GPT)) { /* waked up by WAKEUP_GPT */ localtimer_set_next_event(1); } else { /* waked up by other wakeup source */ unsigned int temp1 = GPT_GetCompare(WAKEUP_GPT); unsigned int temp2 = GPT_GetCounter(WAKEUP_GPT); if (unlikely(temp1 <= temp2)) { dcm_err("[%s]GPT%d: counter = %10u, compare = %10u\n", __func__, temp1, temp2); BUG(); } localtimer_set_next_event(temp1-temp2); GPT_Stop(WAKEUP_GPT); GPT_ClearCount(WAKEUP_GPT); } #endif if (get_chip_eco_ver() == CHIP_E1) { DRV_SetReg32(WPLL_CON0, 0x1); } else { if (mmsys_switched_off) { DRV_ClrReg16(MDPLL_CON0, 0x1); udelay(20); mm_clk_sq2pll(); mmsys_switched_off = 0; } } #if 0 /* restore TOP_MISC */ DRV_WriteReg32(TOP_MISC, topmisc); #endif dpidle_count++; if ((dpidle_debug_mask & DEBUG_TRACING)) { dpidle_single_count++; } }