1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun #include <linux/init.h> 3*4882a593Smuzhiyun #include <linux/suspend.h> 4*4882a593Smuzhiyun #include <asm/suspend.h> 5*4882a593Smuzhiyun #include "smc.h" 6*4882a593Smuzhiyun #include "pm.h" 7*4882a593Smuzhiyun tango_pm_powerdown(unsigned long arg)8*4882a593Smuzhiyunstatic int tango_pm_powerdown(unsigned long arg) 9*4882a593Smuzhiyun { 10*4882a593Smuzhiyun tango_suspend(__pa_symbol(cpu_resume)); 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun return -EIO; /* tango_suspend has failed */ 13*4882a593Smuzhiyun } 14*4882a593Smuzhiyun tango_pm_enter(suspend_state_t state)15*4882a593Smuzhiyunstatic int tango_pm_enter(suspend_state_t state) 16*4882a593Smuzhiyun { 17*4882a593Smuzhiyun if (state == PM_SUSPEND_MEM) 18*4882a593Smuzhiyun return cpu_suspend(0, tango_pm_powerdown); 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun return -EINVAL; 21*4882a593Smuzhiyun } 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun static const struct platform_suspend_ops tango_pm_ops = { 24*4882a593Smuzhiyun .enter = tango_pm_enter, 25*4882a593Smuzhiyun .valid = suspend_valid_only_mem, 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun tango_pm_init(void)28*4882a593Smuzhiyunvoid __init tango_pm_init(void) 29*4882a593Smuzhiyun { 30*4882a593Smuzhiyun suspend_set_ops(&tango_pm_ops); 31*4882a593Smuzhiyun } 32