/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of Code Aurora Forum, Inc. nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __ARCH_ARM_MACH_MSM_SPM_H #define __ARCH_ARM_MACH_MSM_SPM_H enum { MSM_SPM_MODE_CLOCK_GATING, MSM_SPM_MODE_POWER_RETENTION, MSM_SPM_MODE_POWER_COLLAPSE, MSM_SPM_MODE_NR }; enum { MSM_SPM_REG_SAW_CFG, MSM_SPM_REG_SAW_SPM_CTL, MSM_SPM_REG_SAW_SPM_SLP_TMR_DLY, MSM_SPM_REG_SAW_SPM_WAKE_TMR_DLY, MSM_SPM_REG_SAW_SLP_CLK_EN, MSM_SPM_REG_SAW_SLP_HSFS_PRECLMP_EN, MSM_SPM_REG_SAW_SLP_HSFS_POSTCLMP_EN, MSM_SPM_REG_SAW_SLP_CLMP_EN, MSM_SPM_REG_SAW_SLP_RST_EN, MSM_SPM_REG_SAW_SPM_MPM_CFG, MSM_SPM_REG_NR_INITIALIZE, MSM_SPM_REG_SAW_VCTL = MSM_SPM_REG_NR_INITIALIZE, MSM_SPM_REG_SAW_STS, MSM_SPM_REG_SAW_SPM_PMIC_CTL, MSM_SPM_REG_NR }; struct msm_spm_platform_data { void __iomem *reg_base_addr; uint32_t reg_init_values[MSM_SPM_REG_NR_INITIALIZE]; uint8_t awake_vlevel; uint8_t retention_vlevel; uint8_t collapse_vlevel; uint8_t retention_mid_vlevel; uint8_t collapse_mid_vlevel; uint32_t vctl_timeout_us; }; #ifdef CONFIG_ARCH_MSM7X30 int msm_spm_set_low_power_mode(unsigned int mode, bool notify_rpm); int msm_spm_set_vdd(unsigned int vlevel); void msm_spm_reinit(void); int msm_spm_init(struct msm_spm_platform_data *data, int nr_devs); #else static inline int msm_spm_set_low_power_mode(unsigned int mode, bool notify_rpm) { return -ENOSYS; } static inline int msm_spm_set_vdd(unsigned int vlevel) { return -ENOSYS; } static inline void msm_spm_reinit(void) { /* empty */ } static inline int msm_spm_init(struct msm_spm_platform_data *data, int nr_devs) { return -ENOSYS; } #endif /* CONFIG_MSM_SPM */ #endif /* __ARCH_ARM_MACH_MSM_SPM_H */