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; }
/* for driver profile */ #define TICKS_ONE_MS (13000) u32 gpt_enable = 0; u32 sdio_pro_enable = 0; /* make sure gpt is enabled */ u32 sdio_pro_time = 0; /* no more than 30s */ struct sdio_profile sdio_perfomance = {0}; #if 0 /* --- chhung */ void msdc_init_gpt(void) { GPT_CONFIG config; config.num = GPT6; config.mode = GPT_FREE_RUN; config.clkSrc = GPT_CLK_SRC_SYS; config.clkDiv = GPT_CLK_DIV_1; /* 13MHz GPT6 */ if (GPT_Config(config) == FALSE ) return; GPT_Start(GPT6); }
static int charging_ic_probe(struct platform_device *dev) { int ret = 0; /* */ #ifdef SINGLE_CHARGER_CONTOL_USING_GPT_TIMER /* 1 Counter : about 0.0769 us */ GPT_CLK_SRC clkSrc = GPT_CLK_SRC_SYS; GPT_CLK_DIV clkDiv = GPT_CLK_DIV_1; xlog_printk(ANDROID_LOG_INFO, "Power/Charger", "[charger_rt9536] :: charging_ic_probe is done\n"); GPT_Init (gpt_num, gpt_timer_irq_handler); config.num = gpt_num; config.mode = GPT_ONE_SHOT; config.clkSrc = clkSrc; config.clkDiv = clkDiv; config.u4CompareL = 13000000; // 1 S config.u4CompareH = 0; config.bIrqEnable = TRUE; if (GPT_Config(config) == FALSE) { xlog_printk(ANDROID_LOG_INFO, "Power/Charger", "[charger_rt9536] :: charging_ic_probe is failed because gpt timer failed !!!\n"); return -1; } #endif /* */ mt_set_gpio_mode(CHG_EN_SET_N, CHG_EN_MODE); mt_set_gpio_dir(CHG_EN_SET_N, CHG_EN_DIR); mt_set_gpio_out(CHG_EN_SET_N, CHG_EN_DATA_OUT); /* */ mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO); mt_set_gpio_pull_enable(CHG_EN_SET_N, CHG_EOC_PULL_ENABLE); mt_set_gpio_pull_select(CHG_EN_SET_N, GPIO_PULL_DOWN); /* */ mt_set_gpio_mode(CHG_EOC_N, CHG_EOC_MODE); mt_set_gpio_dir(CHG_EOC_N, CHG_EOC_DIR); mt_set_gpio_pull_enable(CHG_EOC_N, CHG_EOC_PULL_ENABLE); mt_set_gpio_pull_select(CHG_EOC_N, CHG_EOC_PULL_SELECT); xlog_printk(ANDROID_LOG_INFO, "Power/Charger", "[charger_rt9536] :: charging IC Initialization is done\n"); return 0; }
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 mt6577_dcm_init(void) { int ret = 0; #ifdef CONFIG_LOCAL_TIMERS GPT_CONFIG gpt_config = { .num = WAKEUP_GPT, .mode = GPT_ONE_SHOT, .clkSrc = GPT_CLK_SRC_SYS, .clkDiv = 0x0000, .bIrqEnable = true, .u4CompareL = 0x0, }; #endif dcm_info("[%s]: enable HW dcm\n", __func__); dcm_enable_all(); chip_ver = (get_chip_eco_ver() == CHIP_E1) ? 1 : 0; memset(dpidle_block_mask, 0, MT65XX_CLOCK_CATEGORY_COUNT * sizeof(unsigned int)); #ifdef CONFIG_LOCAL_TIMERS GPT_Init(gpt_config.num, NULL); if (GPT_Config(gpt_config) == FALSE) { dcm_err("[%s]: config GPT%d failed\n", __func__, gpt_config.num); } #endif ret = sysfs_create_file(power_kobj, &dcm_state_attr.attr); ret = sysfs_create_file(power_kobj, &idle_state_attr.attr); ret = sysfs_create_file(power_kobj, &dpidle_state_attr.attr); if (ret) { dcm_err("[%s]: create sysfs failed\n", __func__); } } void mt6577_dcm_exit(void) { dcm_info("[%s]: disable HW dcm\n", __func__); dcm_disable_all(); }