Exemplo n.º 1
0
static ssize_t dcm_state_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t n)
{
    char dcm_mode[20];

    dcm_ver("\n=============== DCM State ================\n");
    if (sscanf(buf, "%s", dcm_mode) == 1) {
        if (!strncmp(dcm_mode, "enable", 6)) {
            dcm_dbg("enable dcm\n");
            dcm_enable_all();
            dcm_ver("==========================================\n");
            return n;
        } else if (!strncmp(dcm_mode, "disable", 7)) {
            dcm_dbg("disable dcm\n");
            dcm_disable_all();
            dcm_ver("==========================================\n");
            return n;
        } else {
            dcm_err("bad argument!! argument should be \"enable\" or \"disable\"\n");
            dcm_ver("==========================================\n");
        }
    } else {
        dcm_err("bad argument!!\n");
        dcm_ver("==========================================\n");
    }
    
    return -EINVAL;
}
Exemplo n.º 2
0
static ssize_t idle_state_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t n)
{
    unsigned int test_mode;

    dcm_ver("\n=============== Idle State ================\n");
    if (sscanf(buf, "%d", &test_mode) == 1) {
        if (test_mode == TEST_ARCH_IDLE) {
#ifdef MODE_SINGLE_CPU_IDLE
            factory_cpu0_idle_test();
#else
            factory_cpus_idle_test();
#endif
            dcm_ver("=========================================\n");
            return n;
        } else {
            dcm_err("bad argument!!\n");
        }
    } else {
        dcm_err("bad argument!!\n");
    }

    dcm_ver("=========================================\n");

    return -EINVAL;
}
Exemplo n.º 3
0
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
}
Exemplo n.º 4
0
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);
}
Exemplo 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();
}
Exemplo n.º 6
0
Arquivo: mt_dcm.c Projeto: SelfImp/m75
void mt_dcm_init(void)
{
    int err = 0;

    dcm_info("[%s]entry!!,ALL_DCM=%d\n", __func__,ALL_DCM);
    dcm_enable(ALL_DCM);
    //dcm_enable(ALL_DCM & (~IFR_DCM));

    err = sysfs_create_file(power_kobj, &dcm_state_attr.attr);

    if (err) {
        dcm_err("[%s]: fail to create sysfs\n", __func__);
    }
}
Exemplo n.º 7
0
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++;
    }
}