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