1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2014,2015, Linaro Ltd.
5  */
6 
7 #ifndef __SPM_H__
8 #define __SPM_H__
9 
10 #include <linux/cpuidle.h>
11 
12 #define MAX_PMIC_DATA		2
13 #define MAX_SEQ_DATA		64
14 
15 enum pm_sleep_mode {
16 	PM_SLEEP_MODE_STBY,
17 	PM_SLEEP_MODE_RET,
18 	PM_SLEEP_MODE_SPC,
19 	PM_SLEEP_MODE_PC,
20 	PM_SLEEP_MODE_NR,
21 };
22 
23 struct spm_reg_data {
24 	const u16 *reg_offset;
25 	u32 spm_cfg;
26 	u32 spm_dly;
27 	u32 pmic_dly;
28 	u32 pmic_data[MAX_PMIC_DATA];
29 	u32 avs_ctl;
30 	u32 avs_limit;
31 	u8 seq[MAX_SEQ_DATA];
32 	u8 start_index[PM_SLEEP_MODE_NR];
33 };
34 
35 struct spm_driver_data {
36 	void __iomem *reg_base;
37 	const struct spm_reg_data *reg_data;
38 };
39 
40 void spm_set_low_power_mode(struct spm_driver_data *drv,
41 			    enum pm_sleep_mode mode);
42 
43 #endif /* __SPM_H__ */
44