static int msm_cpuidle_enter( struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { int ret = 0; int i = 0; enum msm_pm_sleep_mode pm_mode; struct cpuidle_state_usage *st_usage = NULL; #ifdef CONFIG_CPU_PM cpu_pm_enter(); #endif pm_mode = msm_pm_idle_prepare(dev, drv, index); dev->last_residency = msm_pm_idle_enter(pm_mode); for (i = 0; i < dev->state_count; i++) { st_usage = &dev->states_usage[i]; if ((enum msm_pm_sleep_mode) cpuidle_get_statedata(st_usage) == pm_mode) { ret = i; break; } } #ifdef CONFIG_CPU_PM cpu_pm_exit(); #endif local_irq_enable(); return ret; }
static int msm_cpuidle_enter( struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { int ret = 0; int i = 0; enum msm_pm_sleep_mode pm_mode; struct cpuidle_state_usage *st_usage = NULL; #ifdef CONFIG_MSM_SLEEP_STATS struct atomic_notifier_head *head = &__get_cpu_var(msm_cpuidle_notifiers); #endif local_irq_disable(); #ifdef CONFIG_MSM_SLEEP_STATS atomic_notifier_call_chain(head, MSM_CPUIDLE_STATE_ENTER, NULL); #endif #ifdef CONFIG_CPU_PM cpu_pm_enter(); #endif pm_mode = msm_pm_idle_prepare(dev, drv, index); dev->last_residency = msm_pm_idle_enter(pm_mode); #ifdef CONFIG_SHSYS_CUST if (sh_pm_is_idle_pc()) { sh_pm_set_idle_pc_flg_off(); } #endif for (i = 0; i < dev->state_count; i++) { st_usage = &dev->states_usage[i]; if ((enum msm_pm_sleep_mode) cpuidle_get_statedata(st_usage) == pm_mode) { ret = i; break; } } #ifdef CONFIG_CPU_PM cpu_pm_exit(); #endif #ifdef CONFIG_MSM_SLEEP_STATS atomic_notifier_call_chain(head, MSM_CPUIDLE_STATE_EXIT, NULL); #endif local_irq_enable(); return ret; }