void __init tegra_init_suspend(void) { if (tegra_pmc_get_suspend_mode() == TEGRA_SUSPEND_NONE) return; tegra_pmc_suspend_init(); suspend_set_ops(&tegra_suspend_ops); }
static int tegra_suspend_enter(suspend_state_t state) { enum tegra_suspend_mode mode = tegra_pmc_get_suspend_mode(); if (WARN_ON(mode < TEGRA_SUSPEND_NONE || mode >= TEGRA_MAX_SUSPEND_MODE)) return -EINVAL; pr_info("Entering suspend state %s\n", lp_state[mode]); tegra_pmc_pm_set(mode); local_fiq_disable(); suspend_cpu_complex(); switch (mode) { case TEGRA_SUSPEND_LP2: tegra_set_cpu_in_lp2(); break; default: break; } cpu_suspend(PHYS_OFFSET - PAGE_OFFSET, &tegra_sleep_cpu); switch (mode) { case TEGRA_SUSPEND_LP2: tegra_clear_cpu_in_lp2(); break; default: break; } restore_cpu_complex(); local_fiq_enable(); return 0; }