xref: /kernel/linux/linux-6.6/include/soc/qcom/spm.h (revision 62306a36)
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
15enum 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
23struct 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
35struct spm_driver_data {
36	void __iomem *reg_base;
37	const struct spm_reg_data *reg_data;
38};
39
40void spm_set_low_power_mode(struct spm_driver_data *drv,
41			    enum pm_sleep_mode mode);
42
43#endif /* __SPM_H__ */
44