Esempio n. 1
0
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;
}
Esempio n. 2
0
File: dbg.c Progetto: janfj/dd-wrt
/* 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);	
}
Esempio n. 3
0
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;
}
Esempio n. 4
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);
}
Esempio n. 5
0
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();
}