160f3692bSAngeloGioacchino Del Regno /* SPDX-License-Identifier: GPL-2.0-only */ 260f3692bSAngeloGioacchino Del Regno /* 360f3692bSAngeloGioacchino Del Regno * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. 460f3692bSAngeloGioacchino Del Regno * Copyright (c) 2014,2015, Linaro Ltd. 560f3692bSAngeloGioacchino Del Regno */ 660f3692bSAngeloGioacchino Del Regno 760f3692bSAngeloGioacchino Del Regno #ifndef __SPM_H__ 860f3692bSAngeloGioacchino Del Regno #define __SPM_H__ 960f3692bSAngeloGioacchino Del Regno 1060f3692bSAngeloGioacchino Del Regno #include <linux/cpuidle.h> 1160f3692bSAngeloGioacchino Del Regno 1260f3692bSAngeloGioacchino Del Regno #define MAX_PMIC_DATA 2 1360f3692bSAngeloGioacchino Del Regno #define MAX_SEQ_DATA 64 1460f3692bSAngeloGioacchino Del Regno 1560f3692bSAngeloGioacchino Del Regno enum pm_sleep_mode { 1660f3692bSAngeloGioacchino Del Regno PM_SLEEP_MODE_STBY, 1760f3692bSAngeloGioacchino Del Regno PM_SLEEP_MODE_RET, 1860f3692bSAngeloGioacchino Del Regno PM_SLEEP_MODE_SPC, 1960f3692bSAngeloGioacchino Del Regno PM_SLEEP_MODE_PC, 2060f3692bSAngeloGioacchino Del Regno PM_SLEEP_MODE_NR, 2160f3692bSAngeloGioacchino Del Regno }; 2260f3692bSAngeloGioacchino Del Regno 2360f3692bSAngeloGioacchino Del Regno struct spm_reg_data { 24*13e72c3eSAngeloGioacchino Del Regno const u16 *reg_offset; 2560f3692bSAngeloGioacchino Del Regno u32 spm_cfg; 2660f3692bSAngeloGioacchino Del Regno u32 spm_dly; 2760f3692bSAngeloGioacchino Del Regno u32 pmic_dly; 2860f3692bSAngeloGioacchino Del Regno u32 pmic_data[MAX_PMIC_DATA]; 29*13e72c3eSAngeloGioacchino Del Regno u32 avs_ctl; 30*13e72c3eSAngeloGioacchino Del Regno u32 avs_limit; 3160f3692bSAngeloGioacchino Del Regno u8 seq[MAX_SEQ_DATA]; 3260f3692bSAngeloGioacchino Del Regno u8 start_index[PM_SLEEP_MODE_NR]; 3360f3692bSAngeloGioacchino Del Regno }; 3460f3692bSAngeloGioacchino Del Regno 3560f3692bSAngeloGioacchino Del Regno struct spm_driver_data { 3660f3692bSAngeloGioacchino Del Regno void __iomem *reg_base; 3760f3692bSAngeloGioacchino Del Regno const struct spm_reg_data *reg_data; 3860f3692bSAngeloGioacchino Del Regno }; 3960f3692bSAngeloGioacchino Del Regno 4060f3692bSAngeloGioacchino Del Regno void spm_set_low_power_mode(struct spm_driver_data *drv, 4160f3692bSAngeloGioacchino Del Regno enum pm_sleep_mode mode); 4260f3692bSAngeloGioacchino Del Regno 4360f3692bSAngeloGioacchino Del Regno #endif /* __SPM_H__ */ 44