Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /* Copyright (C) 2018 ROHM Semiconductors */
0003 
0004 #ifndef __LINUX_MFD_ROHM_H__
0005 #define __LINUX_MFD_ROHM_H__
0006 
0007 #include <linux/regmap.h>
0008 #include <linux/regulator/driver.h>
0009 
0010 enum rohm_chip_type {
0011     ROHM_CHIP_TYPE_BD9571,
0012     ROHM_CHIP_TYPE_BD9573,
0013     ROHM_CHIP_TYPE_BD9574,
0014     ROHM_CHIP_TYPE_BD9576,
0015     ROHM_CHIP_TYPE_BD71815,
0016     ROHM_CHIP_TYPE_BD71828,
0017     ROHM_CHIP_TYPE_BD71837,
0018     ROHM_CHIP_TYPE_BD71847,
0019     ROHM_CHIP_TYPE_AMOUNT
0020 };
0021 
0022 struct rohm_regmap_dev {
0023     struct device *dev;
0024     struct regmap *regmap;
0025 };
0026 
0027 #define ROHM_DVS_LEVEL_RUN      BIT(0)
0028 #define ROHM_DVS_LEVEL_IDLE     BIT(1)
0029 #define ROHM_DVS_LEVEL_SUSPEND      BIT(2)
0030 #define ROHM_DVS_LEVEL_LPSR     BIT(3)
0031 #define ROHM_DVS_LEVEL_SNVS     BIT(4)
0032 #define ROHM_DVS_LEVEL_VALID_AMOUNT 5
0033 #define ROHM_DVS_LEVEL_UNKNOWN      0
0034 
0035 /**
0036  * struct rohm_dvs_config - dynamic voltage scaling register descriptions
0037  *
0038  * @level_map:      bitmap representing supported run-levels for this
0039  *          regulator
0040  * @run_reg:        register address for regulator config at 'run' state
0041  * @run_mask:       value mask for regulator voltages at 'run' state
0042  * @run_on_mask:    enable mask for regulator at 'run' state
0043  * @idle_reg:       register address for regulator config at 'idle' state
0044  * @idle_mask:      value mask for regulator voltages at 'idle' state
0045  * @idle_on_mask:   enable mask for regulator at 'idle' state
0046  * @suspend_reg:    register address for regulator config at 'suspend' state
0047  * @suspend_mask:   value mask for regulator voltages at 'suspend' state
0048  * @suspend_on_mask:    enable mask for regulator at 'suspend' state
0049  * @lpsr_reg:       register address for regulator config at 'lpsr' state
0050  * @lpsr_mask:      value mask for regulator voltages at 'lpsr' state
0051  * @lpsr_on_mask:   enable mask for regulator at 'lpsr' state
0052  *
0053  * Description of ROHM PMICs voltage configuration registers for different
0054  * system states. This is used to correctly configure the PMIC at startup
0055  * based on values read from DT.
0056  */
0057 struct rohm_dvs_config {
0058     uint64_t level_map;
0059     unsigned int run_reg;
0060     unsigned int run_mask;
0061     unsigned int run_on_mask;
0062     unsigned int idle_reg;
0063     unsigned int idle_mask;
0064     unsigned int idle_on_mask;
0065     unsigned int suspend_reg;
0066     unsigned int suspend_mask;
0067     unsigned int suspend_on_mask;
0068     unsigned int lpsr_reg;
0069     unsigned int lpsr_mask;
0070     unsigned int lpsr_on_mask;
0071     unsigned int snvs_reg;
0072     unsigned int snvs_mask;
0073     unsigned int snvs_on_mask;
0074 };
0075 
0076 #if IS_ENABLED(CONFIG_REGULATOR_ROHM)
0077 int rohm_regulator_set_dvs_levels(const struct rohm_dvs_config *dvs,
0078                   struct device_node *np,
0079                   const struct regulator_desc *desc,
0080                   struct regmap *regmap);
0081 
0082 int rohm_regulator_set_voltage_sel_restricted(struct regulator_dev *rdev,
0083                           unsigned int sel);
0084 #endif
0085 
0086 #endif