static int cpuidle_sleep_enter(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { unsigned long allowed_mode = SUSP_SH_SLEEP; int requested_state = index; int allowed_state; int k; /* convert allowed mode to allowed state */ for (k = ARRAY_SIZE(cpuidle_mode) - 1; k > 0; k--) if (cpuidle_mode[k] == allowed_mode) break; allowed_state = k; /* take the following into account for sleep mode selection: * - allowed_state: best mode allowed by hardware (clock deps) * - requested_state: best mode allowed by software (latencies) */ k = min_t(int, allowed_state, requested_state); sh_mobile_call_standby(cpuidle_mode[k]); return k; }
static int cpuidle_sleep_enter(struct cpuidle_device *dev, struct cpuidle_state *state) { unsigned long allowed_mode = arch_hwblk_sleep_mode(); ktime_t before, after; int requested_state = state - &dev->states[0]; int allowed_state; int k; /* convert allowed mode to allowed state */ for (k = ARRAY_SIZE(cpuidle_mode) - 1; k > 0; k--) if (cpuidle_mode[k] == allowed_mode) break; allowed_state = k; /* take the following into account for sleep mode selection: * - allowed_state: best mode allowed by hardware (clock deps) * - requested_state: best mode allowed by software (latencies) */ k = min_t(int, allowed_state, requested_state); dev->last_state = &dev->states[k]; before = ktime_get(); sh_mobile_call_standby(cpuidle_mode[k]); after = ktime_get(); return ktime_to_ns(ktime_sub(after, before)) >> 10; }
static int sh_pm_enter(suspend_state_t state) { local_irq_disable(); set_bl_bit(); sh_mobile_call_standby(SUSP_MODE_STANDBY_SF); local_irq_disable(); clear_bl_bit(); return 0; }
static int sh_pm_enter(suspend_state_t state) { if (!(sh_mobile_sleep_supported & SUSP_MODE_STANDBY_SF)) return -ENXIO; local_irq_disable(); set_bl_bit(); sh_mobile_call_standby(SUSP_MODE_STANDBY_SF); local_irq_disable(); clear_bl_bit(); return 0; }