18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include <linux/init.h> 38c2ecf20Sopenharmony_ci#include <linux/suspend.h> 48c2ecf20Sopenharmony_ci#include <asm/suspend.h> 58c2ecf20Sopenharmony_ci#include "smc.h" 68c2ecf20Sopenharmony_ci#include "pm.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistatic int tango_pm_powerdown(unsigned long arg) 98c2ecf20Sopenharmony_ci{ 108c2ecf20Sopenharmony_ci tango_suspend(__pa_symbol(cpu_resume)); 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci return -EIO; /* tango_suspend has failed */ 138c2ecf20Sopenharmony_ci} 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistatic int tango_pm_enter(suspend_state_t state) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci if (state == PM_SUSPEND_MEM) 188c2ecf20Sopenharmony_ci return cpu_suspend(0, tango_pm_powerdown); 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci return -EINVAL; 218c2ecf20Sopenharmony_ci} 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cistatic const struct platform_suspend_ops tango_pm_ops = { 248c2ecf20Sopenharmony_ci .enter = tango_pm_enter, 258c2ecf20Sopenharmony_ci .valid = suspend_valid_only_mem, 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_civoid __init tango_pm_init(void) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci suspend_set_ops(&tango_pm_ops); 318c2ecf20Sopenharmony_ci} 32