146fc033eSDavid Collins // SPDX-License-Identifier: GPL-2.0
2c4e5aa3dSsatya priya // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
346fc033eSDavid Collins
446fc033eSDavid Collins #define pr_fmt(fmt) "%s: " fmt, __func__
546fc033eSDavid Collins
646fc033eSDavid Collins #include <linux/err.h>
746fc033eSDavid Collins #include <linux/kernel.h>
846fc033eSDavid Collins #include <linux/module.h>
946fc033eSDavid Collins #include <linux/of.h>
1046fc033eSDavid Collins #include <linux/platform_device.h>
1146fc033eSDavid Collins #include <linux/slab.h>
1246fc033eSDavid Collins #include <linux/string.h>
1346fc033eSDavid Collins #include <linux/regulator/driver.h>
1446fc033eSDavid Collins #include <linux/regulator/machine.h>
1546fc033eSDavid Collins #include <linux/regulator/of_regulator.h>
1646fc033eSDavid Collins
1746fc033eSDavid Collins #include <soc/qcom/cmd-db.h>
1846fc033eSDavid Collins #include <soc/qcom/rpmh.h>
1946fc033eSDavid Collins
2046fc033eSDavid Collins #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
2146fc033eSDavid Collins
2246fc033eSDavid Collins /**
2346fc033eSDavid Collins * enum rpmh_regulator_type - supported RPMh accelerator types
247cb5f692SLee Jones * @VRM: RPMh VRM accelerator which supports voting on enable, voltage,
2546fc033eSDavid Collins * and mode of LDO, SMPS, and BOB type PMIC regulators.
267cb5f692SLee Jones * @XOB: RPMh XOB accelerator which supports voting on the enable state
2746fc033eSDavid Collins * of PMIC regulators.
2846fc033eSDavid Collins */
2946fc033eSDavid Collins enum rpmh_regulator_type {
3046fc033eSDavid Collins VRM,
3146fc033eSDavid Collins XOB,
3246fc033eSDavid Collins };
3346fc033eSDavid Collins
3446fc033eSDavid Collins #define RPMH_REGULATOR_REG_VRM_VOLTAGE 0x0
3546fc033eSDavid Collins #define RPMH_REGULATOR_REG_ENABLE 0x4
3646fc033eSDavid Collins #define RPMH_REGULATOR_REG_VRM_MODE 0x8
3746fc033eSDavid Collins
3846fc033eSDavid Collins #define PMIC4_LDO_MODE_RETENTION 4
3946fc033eSDavid Collins #define PMIC4_LDO_MODE_LPM 5
4046fc033eSDavid Collins #define PMIC4_LDO_MODE_HPM 7
4146fc033eSDavid Collins
4246fc033eSDavid Collins #define PMIC4_SMPS_MODE_RETENTION 4
4346fc033eSDavid Collins #define PMIC4_SMPS_MODE_PFM 5
4446fc033eSDavid Collins #define PMIC4_SMPS_MODE_AUTO 6
4546fc033eSDavid Collins #define PMIC4_SMPS_MODE_PWM 7
4646fc033eSDavid Collins
4746fc033eSDavid Collins #define PMIC4_BOB_MODE_PASS 0
4846fc033eSDavid Collins #define PMIC4_BOB_MODE_PFM 1
4946fc033eSDavid Collins #define PMIC4_BOB_MODE_AUTO 2
5046fc033eSDavid Collins #define PMIC4_BOB_MODE_PWM 3
5146fc033eSDavid Collins
52610f29e5SVinod Koul #define PMIC5_LDO_MODE_RETENTION 3
53610f29e5SVinod Koul #define PMIC5_LDO_MODE_LPM 4
54610f29e5SVinod Koul #define PMIC5_LDO_MODE_HPM 7
55610f29e5SVinod Koul
56610f29e5SVinod Koul #define PMIC5_SMPS_MODE_RETENTION 3
57610f29e5SVinod Koul #define PMIC5_SMPS_MODE_PFM 4
58610f29e5SVinod Koul #define PMIC5_SMPS_MODE_AUTO 6
59610f29e5SVinod Koul #define PMIC5_SMPS_MODE_PWM 7
60610f29e5SVinod Koul
61610f29e5SVinod Koul #define PMIC5_BOB_MODE_PASS 2
62610f29e5SVinod Koul #define PMIC5_BOB_MODE_PFM 4
63610f29e5SVinod Koul #define PMIC5_BOB_MODE_AUTO 6
64610f29e5SVinod Koul #define PMIC5_BOB_MODE_PWM 7
65610f29e5SVinod Koul
6646fc033eSDavid Collins /**
6746fc033eSDavid Collins * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations
6846fc033eSDavid Collins * @regulator_type: RPMh accelerator type used to manage this
6946fc033eSDavid Collins * regulator
7046fc033eSDavid Collins * @ops: Pointer to regulator ops callback structure
7146fc033eSDavid Collins * @voltage_range: The single range of voltages supported by this
7246fc033eSDavid Collins * PMIC regulator type
7346fc033eSDavid Collins * @n_voltages: The number of unique voltage set points defined
7446fc033eSDavid Collins * by voltage_range
7546fc033eSDavid Collins * @hpm_min_load_uA: Minimum load current in microamps that requires
7646fc033eSDavid Collins * high power mode (HPM) operation. This is used
7746fc033eSDavid Collins * for LDO hardware type regulators only.
7846fc033eSDavid Collins * @pmic_mode_map: Array indexed by regulator framework mode
7946fc033eSDavid Collins * containing PMIC hardware modes. Must be large
8046fc033eSDavid Collins * enough to index all framework modes supported
8146fc033eSDavid Collins * by this regulator hardware type.
8246fc033eSDavid Collins * @of_map_mode: Maps an RPMH_REGULATOR_MODE_* mode value defined
8346fc033eSDavid Collins * in device tree to a regulator framework mode
8446fc033eSDavid Collins */
8546fc033eSDavid Collins struct rpmh_vreg_hw_data {
8646fc033eSDavid Collins enum rpmh_regulator_type regulator_type;
8746fc033eSDavid Collins const struct regulator_ops *ops;
8860ab7f41SMatti Vaittinen const struct linear_range voltage_range;
8946fc033eSDavid Collins int n_voltages;
9046fc033eSDavid Collins int hpm_min_load_uA;
9146fc033eSDavid Collins const int *pmic_mode_map;
9246fc033eSDavid Collins unsigned int (*of_map_mode)(unsigned int mode);
9346fc033eSDavid Collins };
9446fc033eSDavid Collins
9546fc033eSDavid Collins /**
9646fc033eSDavid Collins * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a
9746fc033eSDavid Collins * single regulator device
9846fc033eSDavid Collins * @dev: Device pointer for the top-level PMIC RPMh
9946fc033eSDavid Collins * regulator parent device. This is used as a
10046fc033eSDavid Collins * handle in RPMh write requests.
10146fc033eSDavid Collins * @addr: Base address of the regulator resource within
10246fc033eSDavid Collins * an RPMh accelerator
10346fc033eSDavid Collins * @rdesc: Regulator descriptor
10446fc033eSDavid Collins * @hw_data: PMIC regulator configuration data for this RPMh
10546fc033eSDavid Collins * regulator
10646fc033eSDavid Collins * @always_wait_for_ack: Boolean flag indicating if a request must always
10746fc033eSDavid Collins * wait for an ACK from RPMh before continuing even
10846fc033eSDavid Collins * if it corresponds to a strictly lower power
10946fc033eSDavid Collins * state (e.g. enabled --> disabled).
11046fc033eSDavid Collins * @enabled: Flag indicating if the regulator is enabled or
11146fc033eSDavid Collins * not
11246fc033eSDavid Collins * @bypassed: Boolean indicating if the regulator is in
11346fc033eSDavid Collins * bypass (pass-through) mode or not. This is
11446fc033eSDavid Collins * only used by BOB rpmh-regulator resources.
11546fc033eSDavid Collins * @voltage_selector: Selector used for get_voltage_sel() and
11646fc033eSDavid Collins * set_voltage_sel() callbacks
11746fc033eSDavid Collins * @mode: RPMh VRM regulator current framework mode
11846fc033eSDavid Collins */
11946fc033eSDavid Collins struct rpmh_vreg {
12046fc033eSDavid Collins struct device *dev;
12146fc033eSDavid Collins u32 addr;
12246fc033eSDavid Collins struct regulator_desc rdesc;
12346fc033eSDavid Collins const struct rpmh_vreg_hw_data *hw_data;
12446fc033eSDavid Collins bool always_wait_for_ack;
12546fc033eSDavid Collins
12646fc033eSDavid Collins int enabled;
12746fc033eSDavid Collins bool bypassed;
12846fc033eSDavid Collins int voltage_selector;
12946fc033eSDavid Collins unsigned int mode;
13046fc033eSDavid Collins };
13146fc033eSDavid Collins
13246fc033eSDavid Collins /**
13346fc033eSDavid Collins * struct rpmh_vreg_init_data - initialization data for an RPMh regulator
13446fc033eSDavid Collins * @name: Name for the regulator which also corresponds
13546fc033eSDavid Collins * to the device tree subnode name of the regulator
13646fc033eSDavid Collins * @resource_name: RPMh regulator resource name format string.
13746fc033eSDavid Collins * This must include exactly one field: '%s' which
13846fc033eSDavid Collins * is filled at run-time with the PMIC ID provided
13946fc033eSDavid Collins * by device tree property qcom,pmic-id. Example:
14046fc033eSDavid Collins * "ldo%s1" for RPMh resource "ldoa1".
14146fc033eSDavid Collins * @supply_name: Parent supply regulator name
14246fc033eSDavid Collins * @hw_data: Configuration data for this PMIC regulator type
14346fc033eSDavid Collins */
14446fc033eSDavid Collins struct rpmh_vreg_init_data {
14546fc033eSDavid Collins const char *name;
14646fc033eSDavid Collins const char *resource_name;
14746fc033eSDavid Collins const char *supply_name;
14846fc033eSDavid Collins const struct rpmh_vreg_hw_data *hw_data;
14946fc033eSDavid Collins };
15046fc033eSDavid Collins
15146fc033eSDavid Collins /**
15246fc033eSDavid Collins * rpmh_regulator_send_request() - send the request to RPMh
15346fc033eSDavid Collins * @vreg: Pointer to the RPMh regulator
15446fc033eSDavid Collins * @cmd: Pointer to the RPMh command to send
15546fc033eSDavid Collins * @wait_for_ack: Boolean indicating if execution must wait until the
15646fc033eSDavid Collins * request has been acknowledged as complete
15746fc033eSDavid Collins *
15846fc033eSDavid Collins * Return: 0 on success, errno on failure
15946fc033eSDavid Collins */
rpmh_regulator_send_request(struct rpmh_vreg * vreg,struct tcs_cmd * cmd,bool wait_for_ack)16046fc033eSDavid Collins static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,
16146fc033eSDavid Collins struct tcs_cmd *cmd, bool wait_for_ack)
16246fc033eSDavid Collins {
16346fc033eSDavid Collins int ret;
16446fc033eSDavid Collins
16546fc033eSDavid Collins if (wait_for_ack || vreg->always_wait_for_ack)
16646fc033eSDavid Collins ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1);
16746fc033eSDavid Collins else
16846fc033eSDavid Collins ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd,
16946fc033eSDavid Collins 1);
17046fc033eSDavid Collins
17146fc033eSDavid Collins return ret;
17246fc033eSDavid Collins }
17346fc033eSDavid Collins
_rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev * rdev,unsigned int selector,bool wait_for_ack)17446fc033eSDavid Collins static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
17546fc033eSDavid Collins unsigned int selector, bool wait_for_ack)
17646fc033eSDavid Collins {
17746fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
17846fc033eSDavid Collins struct tcs_cmd cmd = {
17946fc033eSDavid Collins .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE,
18046fc033eSDavid Collins };
18146fc033eSDavid Collins int ret;
18246fc033eSDavid Collins
18346fc033eSDavid Collins /* VRM voltage control register is set with voltage in millivolts. */
18446fc033eSDavid Collins cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev,
18546fc033eSDavid Collins selector), 1000);
18646fc033eSDavid Collins
18746fc033eSDavid Collins ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack);
18846fc033eSDavid Collins if (!ret)
18946fc033eSDavid Collins vreg->voltage_selector = selector;
19046fc033eSDavid Collins
19146fc033eSDavid Collins return ret;
19246fc033eSDavid Collins }
19346fc033eSDavid Collins
rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev * rdev,unsigned int selector)19446fc033eSDavid Collins static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
19546fc033eSDavid Collins unsigned int selector)
19646fc033eSDavid Collins {
19746fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
19846fc033eSDavid Collins
19946fc033eSDavid Collins if (vreg->enabled == -EINVAL) {
20046fc033eSDavid Collins /*
20146fc033eSDavid Collins * Cache the voltage and send it later when the regulator is
20246fc033eSDavid Collins * enabled or disabled.
20346fc033eSDavid Collins */
20446fc033eSDavid Collins vreg->voltage_selector = selector;
20546fc033eSDavid Collins return 0;
20646fc033eSDavid Collins }
20746fc033eSDavid Collins
20846fc033eSDavid Collins return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector,
20946fc033eSDavid Collins selector > vreg->voltage_selector);
21046fc033eSDavid Collins }
21146fc033eSDavid Collins
rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev * rdev)21246fc033eSDavid Collins static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev)
21346fc033eSDavid Collins {
21446fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
21546fc033eSDavid Collins
21646fc033eSDavid Collins return vreg->voltage_selector;
21746fc033eSDavid Collins }
21846fc033eSDavid Collins
rpmh_regulator_is_enabled(struct regulator_dev * rdev)21946fc033eSDavid Collins static int rpmh_regulator_is_enabled(struct regulator_dev *rdev)
22046fc033eSDavid Collins {
22146fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
22246fc033eSDavid Collins
22346fc033eSDavid Collins return vreg->enabled;
22446fc033eSDavid Collins }
22546fc033eSDavid Collins
rpmh_regulator_set_enable_state(struct regulator_dev * rdev,bool enable)22646fc033eSDavid Collins static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev,
22746fc033eSDavid Collins bool enable)
22846fc033eSDavid Collins {
22946fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
23046fc033eSDavid Collins struct tcs_cmd cmd = {
23146fc033eSDavid Collins .addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE,
23246fc033eSDavid Collins .data = enable,
23346fc033eSDavid Collins };
23446fc033eSDavid Collins int ret;
23546fc033eSDavid Collins
23646fc033eSDavid Collins if (vreg->enabled == -EINVAL &&
23746fc033eSDavid Collins vreg->voltage_selector != -ENOTRECOVERABLE) {
23846fc033eSDavid Collins ret = _rpmh_regulator_vrm_set_voltage_sel(rdev,
23946fc033eSDavid Collins vreg->voltage_selector, true);
24046fc033eSDavid Collins if (ret < 0)
24146fc033eSDavid Collins return ret;
24246fc033eSDavid Collins }
24346fc033eSDavid Collins
24446fc033eSDavid Collins ret = rpmh_regulator_send_request(vreg, &cmd, enable);
24546fc033eSDavid Collins if (!ret)
24646fc033eSDavid Collins vreg->enabled = enable;
24746fc033eSDavid Collins
24846fc033eSDavid Collins return ret;
24946fc033eSDavid Collins }
25046fc033eSDavid Collins
rpmh_regulator_enable(struct regulator_dev * rdev)25146fc033eSDavid Collins static int rpmh_regulator_enable(struct regulator_dev *rdev)
25246fc033eSDavid Collins {
25346fc033eSDavid Collins return rpmh_regulator_set_enable_state(rdev, true);
25446fc033eSDavid Collins }
25546fc033eSDavid Collins
rpmh_regulator_disable(struct regulator_dev * rdev)25646fc033eSDavid Collins static int rpmh_regulator_disable(struct regulator_dev *rdev)
25746fc033eSDavid Collins {
25846fc033eSDavid Collins return rpmh_regulator_set_enable_state(rdev, false);
25946fc033eSDavid Collins }
26046fc033eSDavid Collins
rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg * vreg,unsigned int mode,bool bypassed)26146fc033eSDavid Collins static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg,
26246fc033eSDavid Collins unsigned int mode, bool bypassed)
26346fc033eSDavid Collins {
26446fc033eSDavid Collins struct tcs_cmd cmd = {
26546fc033eSDavid Collins .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE,
26646fc033eSDavid Collins };
26746fc033eSDavid Collins int pmic_mode;
26846fc033eSDavid Collins
26946fc033eSDavid Collins if (mode > REGULATOR_MODE_STANDBY)
27046fc033eSDavid Collins return -EINVAL;
27146fc033eSDavid Collins
27246fc033eSDavid Collins pmic_mode = vreg->hw_data->pmic_mode_map[mode];
27346fc033eSDavid Collins if (pmic_mode < 0)
27446fc033eSDavid Collins return pmic_mode;
27546fc033eSDavid Collins
27646fc033eSDavid Collins if (bypassed)
27746fc033eSDavid Collins cmd.data = PMIC4_BOB_MODE_PASS;
27846fc033eSDavid Collins else
27946fc033eSDavid Collins cmd.data = pmic_mode;
28046fc033eSDavid Collins
28146fc033eSDavid Collins return rpmh_regulator_send_request(vreg, &cmd, true);
28246fc033eSDavid Collins }
28346fc033eSDavid Collins
rpmh_regulator_vrm_set_mode(struct regulator_dev * rdev,unsigned int mode)28446fc033eSDavid Collins static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev,
28546fc033eSDavid Collins unsigned int mode)
28646fc033eSDavid Collins {
28746fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
28846fc033eSDavid Collins int ret;
28946fc033eSDavid Collins
29046fc033eSDavid Collins if (mode == vreg->mode)
29146fc033eSDavid Collins return 0;
29246fc033eSDavid Collins
29346fc033eSDavid Collins ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed);
29446fc033eSDavid Collins if (!ret)
29546fc033eSDavid Collins vreg->mode = mode;
29646fc033eSDavid Collins
29746fc033eSDavid Collins return ret;
29846fc033eSDavid Collins }
29946fc033eSDavid Collins
rpmh_regulator_vrm_get_mode(struct regulator_dev * rdev)30046fc033eSDavid Collins static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)
30146fc033eSDavid Collins {
30246fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
30346fc033eSDavid Collins
30446fc033eSDavid Collins return vreg->mode;
30546fc033eSDavid Collins }
30646fc033eSDavid Collins
30746fc033eSDavid Collins /**
308efb0cb50SDouglas Anderson * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the load
30946fc033eSDavid Collins * @rdev: Regulator device pointer for the rpmh-regulator
310efb0cb50SDouglas Anderson * @input_uV: Input voltage
311efb0cb50SDouglas Anderson * @output_uV: Output voltage
31246fc033eSDavid Collins * @load_uA: Aggregated load current in microamps
31346fc033eSDavid Collins *
31446fc033eSDavid Collins * This function is used in the regulator_ops for VRM type RPMh regulator
31546fc033eSDavid Collins * devices.
31646fc033eSDavid Collins *
31746fc033eSDavid Collins * Return: 0 on success, errno on failure
31846fc033eSDavid Collins */
rpmh_regulator_vrm_get_optimum_mode(struct regulator_dev * rdev,int input_uV,int output_uV,int load_uA)319efb0cb50SDouglas Anderson static unsigned int rpmh_regulator_vrm_get_optimum_mode(
320efb0cb50SDouglas Anderson struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA)
32146fc033eSDavid Collins {
32246fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
32346fc033eSDavid Collins
32446fc033eSDavid Collins if (load_uA >= vreg->hw_data->hpm_min_load_uA)
325efb0cb50SDouglas Anderson return REGULATOR_MODE_NORMAL;
32646fc033eSDavid Collins else
327efb0cb50SDouglas Anderson return REGULATOR_MODE_IDLE;
32846fc033eSDavid Collins }
32946fc033eSDavid Collins
rpmh_regulator_vrm_set_bypass(struct regulator_dev * rdev,bool enable)33046fc033eSDavid Collins static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev,
33146fc033eSDavid Collins bool enable)
33246fc033eSDavid Collins {
33346fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
33446fc033eSDavid Collins int ret;
33546fc033eSDavid Collins
33646fc033eSDavid Collins if (vreg->bypassed == enable)
33746fc033eSDavid Collins return 0;
33846fc033eSDavid Collins
33946fc033eSDavid Collins ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable);
34046fc033eSDavid Collins if (!ret)
34146fc033eSDavid Collins vreg->bypassed = enable;
34246fc033eSDavid Collins
34346fc033eSDavid Collins return ret;
34446fc033eSDavid Collins }
34546fc033eSDavid Collins
rpmh_regulator_vrm_get_bypass(struct regulator_dev * rdev,bool * enable)34646fc033eSDavid Collins static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev,
34746fc033eSDavid Collins bool *enable)
34846fc033eSDavid Collins {
34946fc033eSDavid Collins struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
35046fc033eSDavid Collins
35146fc033eSDavid Collins *enable = vreg->bypassed;
35246fc033eSDavid Collins
35346fc033eSDavid Collins return 0;
35446fc033eSDavid Collins }
35546fc033eSDavid Collins
35646fc033eSDavid Collins static const struct regulator_ops rpmh_regulator_vrm_ops = {
35746fc033eSDavid Collins .enable = rpmh_regulator_enable,
35846fc033eSDavid Collins .disable = rpmh_regulator_disable,
35946fc033eSDavid Collins .is_enabled = rpmh_regulator_is_enabled,
36046fc033eSDavid Collins .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel,
36146fc033eSDavid Collins .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel,
36246fc033eSDavid Collins .list_voltage = regulator_list_voltage_linear_range,
36346fc033eSDavid Collins .set_mode = rpmh_regulator_vrm_set_mode,
36446fc033eSDavid Collins .get_mode = rpmh_regulator_vrm_get_mode,
36546fc033eSDavid Collins };
36646fc033eSDavid Collins
36746fc033eSDavid Collins static const struct regulator_ops rpmh_regulator_vrm_drms_ops = {
36846fc033eSDavid Collins .enable = rpmh_regulator_enable,
36946fc033eSDavid Collins .disable = rpmh_regulator_disable,
37046fc033eSDavid Collins .is_enabled = rpmh_regulator_is_enabled,
37146fc033eSDavid Collins .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel,
37246fc033eSDavid Collins .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel,
37346fc033eSDavid Collins .list_voltage = regulator_list_voltage_linear_range,
37446fc033eSDavid Collins .set_mode = rpmh_regulator_vrm_set_mode,
37546fc033eSDavid Collins .get_mode = rpmh_regulator_vrm_get_mode,
376efb0cb50SDouglas Anderson .get_optimum_mode = rpmh_regulator_vrm_get_optimum_mode,
37746fc033eSDavid Collins };
37846fc033eSDavid Collins
37946fc033eSDavid Collins static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = {
38046fc033eSDavid Collins .enable = rpmh_regulator_enable,
38146fc033eSDavid Collins .disable = rpmh_regulator_disable,
38246fc033eSDavid Collins .is_enabled = rpmh_regulator_is_enabled,
38346fc033eSDavid Collins .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel,
38446fc033eSDavid Collins .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel,
38546fc033eSDavid Collins .list_voltage = regulator_list_voltage_linear_range,
38646fc033eSDavid Collins .set_mode = rpmh_regulator_vrm_set_mode,
38746fc033eSDavid Collins .get_mode = rpmh_regulator_vrm_get_mode,
38846fc033eSDavid Collins .set_bypass = rpmh_regulator_vrm_set_bypass,
38946fc033eSDavid Collins .get_bypass = rpmh_regulator_vrm_get_bypass,
39046fc033eSDavid Collins };
39146fc033eSDavid Collins
39246fc033eSDavid Collins static const struct regulator_ops rpmh_regulator_xob_ops = {
39346fc033eSDavid Collins .enable = rpmh_regulator_enable,
39446fc033eSDavid Collins .disable = rpmh_regulator_disable,
39546fc033eSDavid Collins .is_enabled = rpmh_regulator_is_enabled,
39646fc033eSDavid Collins };
39746fc033eSDavid Collins
39846fc033eSDavid Collins /**
39946fc033eSDavid Collins * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator
4007cb5f692SLee Jones * @vreg: Pointer to the individual rpmh-regulator resource
4017cb5f692SLee Jones * @dev: Pointer to the top level rpmh-regulator PMIC device
4027cb5f692SLee Jones * @node: Pointer to the individual rpmh-regulator resource
40346fc033eSDavid Collins * device node
4047cb5f692SLee Jones * @pmic_id: String used to identify the top level rpmh-regulator
40546fc033eSDavid Collins * PMIC device on the board
4067cb5f692SLee Jones * @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator
40746fc033eSDavid Collins * resources defined for the top level PMIC device
40846fc033eSDavid Collins *
40946fc033eSDavid Collins * Return: 0 on success, errno on failure
41046fc033eSDavid Collins */
rpmh_regulator_init_vreg(struct rpmh_vreg * vreg,struct device * dev,struct device_node * node,const char * pmic_id,const struct rpmh_vreg_init_data * pmic_rpmh_data)41146fc033eSDavid Collins static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev,
41246fc033eSDavid Collins struct device_node *node, const char *pmic_id,
41346fc033eSDavid Collins const struct rpmh_vreg_init_data *pmic_rpmh_data)
41446fc033eSDavid Collins {
41546fc033eSDavid Collins struct regulator_config reg_config = {};
41646fc033eSDavid Collins char rpmh_resource_name[20] = "";
41746fc033eSDavid Collins const struct rpmh_vreg_init_data *rpmh_data;
41846fc033eSDavid Collins struct regulator_init_data *init_data;
41946fc033eSDavid Collins struct regulator_dev *rdev;
42046fc033eSDavid Collins int ret;
42146fc033eSDavid Collins
42246fc033eSDavid Collins vreg->dev = dev;
42346fc033eSDavid Collins
42446fc033eSDavid Collins for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++)
425c32569e3SRob Herring if (of_node_name_eq(node, rpmh_data->name))
42646fc033eSDavid Collins break;
42746fc033eSDavid Collins
42846fc033eSDavid Collins if (!rpmh_data->name) {
4290c9721a5SRob Herring dev_err(dev, "Unknown regulator %pOFn\n", node);
43046fc033eSDavid Collins return -EINVAL;
43146fc033eSDavid Collins }
43246fc033eSDavid Collins
43346fc033eSDavid Collins scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name),
43446fc033eSDavid Collins rpmh_data->resource_name, pmic_id);
43546fc033eSDavid Collins
43646fc033eSDavid Collins vreg->addr = cmd_db_read_addr(rpmh_resource_name);
43746fc033eSDavid Collins if (!vreg->addr) {
4380c9721a5SRob Herring dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n",
4390c9721a5SRob Herring node, rpmh_resource_name);
44046fc033eSDavid Collins return -ENODEV;
44146fc033eSDavid Collins }
44246fc033eSDavid Collins
44346fc033eSDavid Collins vreg->rdesc.name = rpmh_data->name;
44446fc033eSDavid Collins vreg->rdesc.supply_name = rpmh_data->supply_name;
44546fc033eSDavid Collins vreg->hw_data = rpmh_data->hw_data;
44646fc033eSDavid Collins
44746fc033eSDavid Collins vreg->enabled = -EINVAL;
44846fc033eSDavid Collins vreg->voltage_selector = -ENOTRECOVERABLE;
44946fc033eSDavid Collins vreg->mode = REGULATOR_MODE_INVALID;
45046fc033eSDavid Collins
45146fc033eSDavid Collins if (rpmh_data->hw_data->n_voltages) {
45246fc033eSDavid Collins vreg->rdesc.linear_ranges = &rpmh_data->hw_data->voltage_range;
45346fc033eSDavid Collins vreg->rdesc.n_linear_ranges = 1;
45446fc033eSDavid Collins vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages;
45546fc033eSDavid Collins }
45646fc033eSDavid Collins
45746fc033eSDavid Collins vreg->always_wait_for_ack = of_property_read_bool(node,
45846fc033eSDavid Collins "qcom,always-wait-for-ack");
45946fc033eSDavid Collins
46046fc033eSDavid Collins vreg->rdesc.owner = THIS_MODULE;
46146fc033eSDavid Collins vreg->rdesc.type = REGULATOR_VOLTAGE;
46246fc033eSDavid Collins vreg->rdesc.ops = vreg->hw_data->ops;
46346fc033eSDavid Collins vreg->rdesc.of_map_mode = vreg->hw_data->of_map_mode;
46446fc033eSDavid Collins
46546fc033eSDavid Collins init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc);
46646fc033eSDavid Collins if (!init_data)
46746fc033eSDavid Collins return -ENOMEM;
46846fc033eSDavid Collins
46946fc033eSDavid Collins if (rpmh_data->hw_data->regulator_type == XOB &&
47046fc033eSDavid Collins init_data->constraints.min_uV &&
47146fc033eSDavid Collins init_data->constraints.min_uV == init_data->constraints.max_uV) {
47246fc033eSDavid Collins vreg->rdesc.fixed_uV = init_data->constraints.min_uV;
47346fc033eSDavid Collins vreg->rdesc.n_voltages = 1;
47446fc033eSDavid Collins }
47546fc033eSDavid Collins
47646fc033eSDavid Collins reg_config.dev = dev;
47746fc033eSDavid Collins reg_config.init_data = init_data;
47846fc033eSDavid Collins reg_config.of_node = node;
47946fc033eSDavid Collins reg_config.driver_data = vreg;
48046fc033eSDavid Collins
48146fc033eSDavid Collins rdev = devm_regulator_register(dev, &vreg->rdesc, ®_config);
48246fc033eSDavid Collins if (IS_ERR(rdev)) {
48346fc033eSDavid Collins ret = PTR_ERR(rdev);
4840c9721a5SRob Herring dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n",
4850c9721a5SRob Herring node, ret);
48646fc033eSDavid Collins return ret;
48746fc033eSDavid Collins }
48846fc033eSDavid Collins
4890c9721a5SRob Herring dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n",
4900c9721a5SRob Herring node, rpmh_resource_name, vreg->addr);
49146fc033eSDavid Collins
49246fc033eSDavid Collins return 0;
49346fc033eSDavid Collins }
49446fc033eSDavid Collins
49546fc033eSDavid Collins static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = {
49646fc033eSDavid Collins [REGULATOR_MODE_INVALID] = -EINVAL,
49746fc033eSDavid Collins [REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION,
49846fc033eSDavid Collins [REGULATOR_MODE_IDLE] = PMIC4_LDO_MODE_LPM,
49946fc033eSDavid Collins [REGULATOR_MODE_NORMAL] = PMIC4_LDO_MODE_HPM,
50046fc033eSDavid Collins [REGULATOR_MODE_FAST] = -EINVAL,
50146fc033eSDavid Collins };
50246fc033eSDavid Collins
503610f29e5SVinod Koul static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = {
504610f29e5SVinod Koul [REGULATOR_MODE_INVALID] = -EINVAL,
505610f29e5SVinod Koul [REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION,
506610f29e5SVinod Koul [REGULATOR_MODE_IDLE] = PMIC5_LDO_MODE_LPM,
507610f29e5SVinod Koul [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM,
508610f29e5SVinod Koul [REGULATOR_MODE_FAST] = -EINVAL,
509610f29e5SVinod Koul };
510610f29e5SVinod Koul
rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode)51146fc033eSDavid Collins static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode)
51246fc033eSDavid Collins {
51346fc033eSDavid Collins unsigned int mode;
51446fc033eSDavid Collins
51546fc033eSDavid Collins switch (rpmh_mode) {
51646fc033eSDavid Collins case RPMH_REGULATOR_MODE_HPM:
51746fc033eSDavid Collins mode = REGULATOR_MODE_NORMAL;
51846fc033eSDavid Collins break;
51946fc033eSDavid Collins case RPMH_REGULATOR_MODE_LPM:
52046fc033eSDavid Collins mode = REGULATOR_MODE_IDLE;
52146fc033eSDavid Collins break;
52246fc033eSDavid Collins case RPMH_REGULATOR_MODE_RET:
52346fc033eSDavid Collins mode = REGULATOR_MODE_STANDBY;
52446fc033eSDavid Collins break;
52546fc033eSDavid Collins default:
52646fc033eSDavid Collins mode = REGULATOR_MODE_INVALID;
527beb5a17fSDouglas Anderson break;
52846fc033eSDavid Collins }
52946fc033eSDavid Collins
53046fc033eSDavid Collins return mode;
53146fc033eSDavid Collins }
53246fc033eSDavid Collins
53346fc033eSDavid Collins static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = {
53446fc033eSDavid Collins [REGULATOR_MODE_INVALID] = -EINVAL,
53546fc033eSDavid Collins [REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION,
53646fc033eSDavid Collins [REGULATOR_MODE_IDLE] = PMIC4_SMPS_MODE_PFM,
53746fc033eSDavid Collins [REGULATOR_MODE_NORMAL] = PMIC4_SMPS_MODE_AUTO,
53846fc033eSDavid Collins [REGULATOR_MODE_FAST] = PMIC4_SMPS_MODE_PWM,
53946fc033eSDavid Collins };
54046fc033eSDavid Collins
541610f29e5SVinod Koul static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = {
542610f29e5SVinod Koul [REGULATOR_MODE_INVALID] = -EINVAL,
543610f29e5SVinod Koul [REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION,
544610f29e5SVinod Koul [REGULATOR_MODE_IDLE] = PMIC5_SMPS_MODE_PFM,
545610f29e5SVinod Koul [REGULATOR_MODE_NORMAL] = PMIC5_SMPS_MODE_AUTO,
546610f29e5SVinod Koul [REGULATOR_MODE_FAST] = PMIC5_SMPS_MODE_PWM,
547610f29e5SVinod Koul };
548610f29e5SVinod Koul
54946fc033eSDavid Collins static unsigned int
rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode)55046fc033eSDavid Collins rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode)
55146fc033eSDavid Collins {
55246fc033eSDavid Collins unsigned int mode;
55346fc033eSDavid Collins
55446fc033eSDavid Collins switch (rpmh_mode) {
55546fc033eSDavid Collins case RPMH_REGULATOR_MODE_HPM:
55646fc033eSDavid Collins mode = REGULATOR_MODE_FAST;
55746fc033eSDavid Collins break;
55846fc033eSDavid Collins case RPMH_REGULATOR_MODE_AUTO:
55946fc033eSDavid Collins mode = REGULATOR_MODE_NORMAL;
56046fc033eSDavid Collins break;
56146fc033eSDavid Collins case RPMH_REGULATOR_MODE_LPM:
56246fc033eSDavid Collins mode = REGULATOR_MODE_IDLE;
56346fc033eSDavid Collins break;
56446fc033eSDavid Collins case RPMH_REGULATOR_MODE_RET:
56546fc033eSDavid Collins mode = REGULATOR_MODE_STANDBY;
56646fc033eSDavid Collins break;
56746fc033eSDavid Collins default:
56846fc033eSDavid Collins mode = REGULATOR_MODE_INVALID;
569beb5a17fSDouglas Anderson break;
57046fc033eSDavid Collins }
57146fc033eSDavid Collins
57246fc033eSDavid Collins return mode;
57346fc033eSDavid Collins }
57446fc033eSDavid Collins
57546fc033eSDavid Collins static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = {
57646fc033eSDavid Collins [REGULATOR_MODE_INVALID] = -EINVAL,
57746fc033eSDavid Collins [REGULATOR_MODE_STANDBY] = -EINVAL,
57846fc033eSDavid Collins [REGULATOR_MODE_IDLE] = PMIC4_BOB_MODE_PFM,
57946fc033eSDavid Collins [REGULATOR_MODE_NORMAL] = PMIC4_BOB_MODE_AUTO,
58046fc033eSDavid Collins [REGULATOR_MODE_FAST] = PMIC4_BOB_MODE_PWM,
58146fc033eSDavid Collins };
58246fc033eSDavid Collins
583610f29e5SVinod Koul static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = {
584610f29e5SVinod Koul [REGULATOR_MODE_INVALID] = -EINVAL,
585610f29e5SVinod Koul [REGULATOR_MODE_STANDBY] = -EINVAL,
586610f29e5SVinod Koul [REGULATOR_MODE_IDLE] = PMIC5_BOB_MODE_PFM,
587610f29e5SVinod Koul [REGULATOR_MODE_NORMAL] = PMIC5_BOB_MODE_AUTO,
588610f29e5SVinod Koul [REGULATOR_MODE_FAST] = PMIC5_BOB_MODE_PWM,
589610f29e5SVinod Koul };
590610f29e5SVinod Koul
rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode)59146fc033eSDavid Collins static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode)
59246fc033eSDavid Collins {
59346fc033eSDavid Collins unsigned int mode;
59446fc033eSDavid Collins
59546fc033eSDavid Collins switch (rpmh_mode) {
59646fc033eSDavid Collins case RPMH_REGULATOR_MODE_HPM:
59746fc033eSDavid Collins mode = REGULATOR_MODE_FAST;
59846fc033eSDavid Collins break;
59946fc033eSDavid Collins case RPMH_REGULATOR_MODE_AUTO:
60046fc033eSDavid Collins mode = REGULATOR_MODE_NORMAL;
60146fc033eSDavid Collins break;
60246fc033eSDavid Collins case RPMH_REGULATOR_MODE_LPM:
60346fc033eSDavid Collins mode = REGULATOR_MODE_IDLE;
60446fc033eSDavid Collins break;
60546fc033eSDavid Collins default:
60646fc033eSDavid Collins mode = REGULATOR_MODE_INVALID;
607beb5a17fSDouglas Anderson break;
60846fc033eSDavid Collins }
60946fc033eSDavid Collins
61046fc033eSDavid Collins return mode;
61146fc033eSDavid Collins }
61246fc033eSDavid Collins
61346fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_pldo = {
61446fc033eSDavid Collins .regulator_type = VRM,
61546fc033eSDavid Collins .ops = &rpmh_regulator_vrm_drms_ops,
61646fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),
61746fc033eSDavid Collins .n_voltages = 256,
61846fc033eSDavid Collins .hpm_min_load_uA = 10000,
61946fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_ldo,
62046fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
62146fc033eSDavid Collins };
62246fc033eSDavid Collins
62346fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_pldo_lv = {
62446fc033eSDavid Collins .regulator_type = VRM,
62546fc033eSDavid Collins .ops = &rpmh_regulator_vrm_drms_ops,
62646fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),
62746fc033eSDavid Collins .n_voltages = 128,
62846fc033eSDavid Collins .hpm_min_load_uA = 10000,
62946fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_ldo,
63046fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
63146fc033eSDavid Collins };
63246fc033eSDavid Collins
63346fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_nldo = {
63446fc033eSDavid Collins .regulator_type = VRM,
63546fc033eSDavid Collins .ops = &rpmh_regulator_vrm_drms_ops,
63646fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
63746fc033eSDavid Collins .n_voltages = 128,
63846fc033eSDavid Collins .hpm_min_load_uA = 30000,
63946fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_ldo,
64046fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
64146fc033eSDavid Collins };
64246fc033eSDavid Collins
64346fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = {
64446fc033eSDavid Collins .regulator_type = VRM,
64546fc033eSDavid Collins .ops = &rpmh_regulator_vrm_ops,
64646fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
64746fc033eSDavid Collins .n_voltages = 216,
64846fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_smps,
64946fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
65046fc033eSDavid Collins };
65146fc033eSDavid Collins
65246fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = {
65346fc033eSDavid Collins .regulator_type = VRM,
65446fc033eSDavid Collins .ops = &rpmh_regulator_vrm_ops,
65546fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),
65646fc033eSDavid Collins .n_voltages = 259,
65746fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_smps,
65846fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
65946fc033eSDavid Collins };
66046fc033eSDavid Collins
66146fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_bob = {
66246fc033eSDavid Collins .regulator_type = VRM,
66346fc033eSDavid Collins .ops = &rpmh_regulator_vrm_bypass_ops,
66446fc033eSDavid Collins .voltage_range = REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),
66546fc033eSDavid Collins .n_voltages = 84,
66646fc033eSDavid Collins .pmic_mode_map = pmic_mode_map_pmic4_bob,
66746fc033eSDavid Collins .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
66846fc033eSDavid Collins };
66946fc033eSDavid Collins
67046fc033eSDavid Collins static const struct rpmh_vreg_hw_data pmic4_lvs = {
67146fc033eSDavid Collins .regulator_type = XOB,
67246fc033eSDavid Collins .ops = &rpmh_regulator_xob_ops,
67346fc033eSDavid Collins /* LVS hardware does not support voltage or mode configuration. */
67446fc033eSDavid Collins };
67546fc033eSDavid Collins
67606369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_pldo = {
67706369bccSVinod Koul .regulator_type = VRM,
67806369bccSVinod Koul .ops = &rpmh_regulator_vrm_drms_ops,
67906369bccSVinod Koul .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
68006369bccSVinod Koul .n_voltages = 256,
68106369bccSVinod Koul .hpm_min_load_uA = 10000,
682610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_ldo,
68306369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
68406369bccSVinod Koul };
68506369bccSVinod Koul
68606369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_pldo_lv = {
68706369bccSVinod Koul .regulator_type = VRM,
68806369bccSVinod Koul .ops = &rpmh_regulator_vrm_drms_ops,
68906369bccSVinod Koul .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),
69006369bccSVinod Koul .n_voltages = 63,
69106369bccSVinod Koul .hpm_min_load_uA = 10000,
692610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_ldo,
69306369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
69406369bccSVinod Koul };
69506369bccSVinod Koul
69665f1b1dcSBartosz Golaszewski static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = {
69765f1b1dcSBartosz Golaszewski .regulator_type = VRM,
69865f1b1dcSBartosz Golaszewski .ops = &rpmh_regulator_vrm_drms_ops,
69965f1b1dcSBartosz Golaszewski .voltage_range = REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000),
70065f1b1dcSBartosz Golaszewski .n_voltages = 188,
70165f1b1dcSBartosz Golaszewski .hpm_min_load_uA = 10000,
70265f1b1dcSBartosz Golaszewski .pmic_mode_map = pmic_mode_map_pmic5_ldo,
70365f1b1dcSBartosz Golaszewski .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
70465f1b1dcSBartosz Golaszewski };
70565f1b1dcSBartosz Golaszewski
70606369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_nldo = {
70706369bccSVinod Koul .regulator_type = VRM,
70806369bccSVinod Koul .ops = &rpmh_regulator_vrm_drms_ops,
70906369bccSVinod Koul .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),
71006369bccSVinod Koul .n_voltages = 124,
71106369bccSVinod Koul .hpm_min_load_uA = 30000,
712610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_ldo,
71306369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
71406369bccSVinod Koul };
71506369bccSVinod Koul
71665f1b1dcSBartosz Golaszewski static const struct rpmh_vreg_hw_data pmic5_nldo515 = {
71765f1b1dcSBartosz Golaszewski .regulator_type = VRM,
71865f1b1dcSBartosz Golaszewski .ops = &rpmh_regulator_vrm_drms_ops,
71965f1b1dcSBartosz Golaszewski .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000),
72065f1b1dcSBartosz Golaszewski .n_voltages = 211,
72165f1b1dcSBartosz Golaszewski .hpm_min_load_uA = 30000,
72265f1b1dcSBartosz Golaszewski .pmic_mode_map = pmic_mode_map_pmic5_ldo,
72365f1b1dcSBartosz Golaszewski .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
72465f1b1dcSBartosz Golaszewski };
72565f1b1dcSBartosz Golaszewski
72606369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = {
72706369bccSVinod Koul .regulator_type = VRM,
72806369bccSVinod Koul .ops = &rpmh_regulator_vrm_ops,
72906369bccSVinod Koul .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
73006369bccSVinod Koul .n_voltages = 216,
731610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_smps,
73206369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
73306369bccSVinod Koul };
73406369bccSVinod Koul
73506369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {
73606369bccSVinod Koul .regulator_type = VRM,
73706369bccSVinod Koul .ops = &rpmh_regulator_vrm_ops,
73806369bccSVinod Koul .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
73906369bccSVinod Koul .n_voltages = 264,
740610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_smps,
74106369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
74206369bccSVinod Koul };
74306369bccSVinod Koul
7449405b4f7Ssatya priya static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = {
7459405b4f7Ssatya priya .regulator_type = VRM,
7469405b4f7Ssatya priya .ops = &rpmh_regulator_vrm_ops,
7479405b4f7Ssatya priya .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
7489405b4f7Ssatya priya .n_voltages = 264,
7499405b4f7Ssatya priya .pmic_mode_map = pmic_mode_map_pmic5_smps,
7509405b4f7Ssatya priya .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
7519405b4f7Ssatya priya };
7529405b4f7Ssatya priya
753e6e3776dSAbel Vesa static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = {
754e6e3776dSAbel Vesa .regulator_type = VRM,
755e6e3776dSAbel Vesa .ops = &rpmh_regulator_vrm_ops,
756e6e3776dSAbel Vesa .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000),
757e6e3776dSAbel Vesa .n_voltages = 268,
758e6e3776dSAbel Vesa .pmic_mode_map = pmic_mode_map_pmic5_smps,
759e6e3776dSAbel Vesa .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
760e6e3776dSAbel Vesa };
761e6e3776dSAbel Vesa
762e6e3776dSAbel Vesa static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = {
763e6e3776dSAbel Vesa .regulator_type = VRM,
764e6e3776dSAbel Vesa .ops = &rpmh_regulator_vrm_ops,
765e6e3776dSAbel Vesa .voltage_range = REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000),
766e6e3776dSAbel Vesa .n_voltages = 268,
767e6e3776dSAbel Vesa .pmic_mode_map = pmic_mode_map_pmic5_smps,
768e6e3776dSAbel Vesa .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
769e6e3776dSAbel Vesa };
770e6e3776dSAbel Vesa
77165f1b1dcSBartosz Golaszewski static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = {
77265f1b1dcSBartosz Golaszewski .regulator_type = VRM,
77365f1b1dcSBartosz Golaszewski .ops = &rpmh_regulator_vrm_ops,
77465f1b1dcSBartosz Golaszewski .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
77565f1b1dcSBartosz Golaszewski .n_voltages = 215,
77665f1b1dcSBartosz Golaszewski .pmic_mode_map = pmic_mode_map_pmic5_smps,
77765f1b1dcSBartosz Golaszewski .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
77865f1b1dcSBartosz Golaszewski };
77965f1b1dcSBartosz Golaszewski
78006369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {
78106369bccSVinod Koul .regulator_type = VRM,
78206369bccSVinod Koul .ops = &rpmh_regulator_vrm_ops,
783e610e072Ssatya priya .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),
784e610e072Ssatya priya .n_voltages = 236,
785610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_smps,
78606369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
78706369bccSVinod Koul };
78806369bccSVinod Koul
789951384caSDmitry Baryshkov static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = {
790951384caSDmitry Baryshkov .regulator_type = VRM,
791951384caSDmitry Baryshkov .ops = &rpmh_regulator_vrm_ops,
792951384caSDmitry Baryshkov .voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000),
793951384caSDmitry Baryshkov .n_voltages = 5,
794951384caSDmitry Baryshkov .pmic_mode_map = pmic_mode_map_pmic5_smps,
795951384caSDmitry Baryshkov .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
796951384caSDmitry Baryshkov };
797951384caSDmitry Baryshkov
79806369bccSVinod Koul static const struct rpmh_vreg_hw_data pmic5_bob = {
79906369bccSVinod Koul .regulator_type = VRM,
80006369bccSVinod Koul .ops = &rpmh_regulator_vrm_bypass_ops,
80177fd66c9SKiran Gunda .voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000),
80277fd66c9SKiran Gunda .n_voltages = 32,
803610f29e5SVinod Koul .pmic_mode_map = pmic_mode_map_pmic5_bob,
80406369bccSVinod Koul .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
80506369bccSVinod Koul };
80606369bccSVinod Koul
80746fc033eSDavid Collins #define RPMH_VREG(_name, _resource_name, _hw_data, _supply_name) \
80846fc033eSDavid Collins { \
80946fc033eSDavid Collins .name = _name, \
81046fc033eSDavid Collins .resource_name = _resource_name, \
81146fc033eSDavid Collins .hw_data = _hw_data, \
81246fc033eSDavid Collins .supply_name = _supply_name, \
81346fc033eSDavid Collins }
81446fc033eSDavid Collins
81546fc033eSDavid Collins static const struct rpmh_vreg_init_data pm8998_vreg_data[] = {
81646fc033eSDavid Collins RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"),
81746fc033eSDavid Collins RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"),
81846fc033eSDavid Collins RPMH_VREG("smps3", "smp%s3", &pmic4_hfsmps3, "vdd-s3"),
81946fc033eSDavid Collins RPMH_VREG("smps4", "smp%s4", &pmic4_hfsmps3, "vdd-s4"),
82046fc033eSDavid Collins RPMH_VREG("smps5", "smp%s5", &pmic4_hfsmps3, "vdd-s5"),
82146fc033eSDavid Collins RPMH_VREG("smps6", "smp%s6", &pmic4_ftsmps426, "vdd-s6"),
82246fc033eSDavid Collins RPMH_VREG("smps7", "smp%s7", &pmic4_ftsmps426, "vdd-s7"),
82346fc033eSDavid Collins RPMH_VREG("smps8", "smp%s8", &pmic4_ftsmps426, "vdd-s8"),
82446fc033eSDavid Collins RPMH_VREG("smps9", "smp%s9", &pmic4_ftsmps426, "vdd-s9"),
82546fc033eSDavid Collins RPMH_VREG("smps10", "smp%s10", &pmic4_ftsmps426, "vdd-s10"),
82646fc033eSDavid Collins RPMH_VREG("smps11", "smp%s11", &pmic4_ftsmps426, "vdd-s11"),
82746fc033eSDavid Collins RPMH_VREG("smps12", "smp%s12", &pmic4_ftsmps426, "vdd-s12"),
82846fc033eSDavid Collins RPMH_VREG("smps13", "smp%s13", &pmic4_ftsmps426, "vdd-s13"),
82946fc033eSDavid Collins RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l27"),
83046fc033eSDavid Collins RPMH_VREG("ldo2", "ldo%s2", &pmic4_nldo, "vdd-l2-l8-l17"),
83146fc033eSDavid Collins RPMH_VREG("ldo3", "ldo%s3", &pmic4_nldo, "vdd-l3-l11"),
83246fc033eSDavid Collins RPMH_VREG("ldo4", "ldo%s4", &pmic4_nldo, "vdd-l4-l5"),
83346fc033eSDavid Collins RPMH_VREG("ldo5", "ldo%s5", &pmic4_nldo, "vdd-l4-l5"),
83446fc033eSDavid Collins RPMH_VREG("ldo6", "ldo%s6", &pmic4_pldo, "vdd-l6"),
83546fc033eSDavid Collins RPMH_VREG("ldo7", "ldo%s7", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"),
83646fc033eSDavid Collins RPMH_VREG("ldo8", "ldo%s8", &pmic4_nldo, "vdd-l2-l8-l17"),
83746fc033eSDavid Collins RPMH_VREG("ldo9", "ldo%s9", &pmic4_pldo, "vdd-l9"),
83846fc033eSDavid Collins RPMH_VREG("ldo10", "ldo%s10", &pmic4_pldo, "vdd-l10-l23-l25"),
83946fc033eSDavid Collins RPMH_VREG("ldo11", "ldo%s11", &pmic4_nldo, "vdd-l3-l11"),
84046fc033eSDavid Collins RPMH_VREG("ldo12", "ldo%s12", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"),
84146fc033eSDavid Collins RPMH_VREG("ldo13", "ldo%s13", &pmic4_pldo, "vdd-l13-l19-l21"),
84246fc033eSDavid Collins RPMH_VREG("ldo14", "ldo%s14", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"),
84346fc033eSDavid Collins RPMH_VREG("ldo15", "ldo%s15", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"),
84446fc033eSDavid Collins RPMH_VREG("ldo16", "ldo%s16", &pmic4_pldo, "vdd-l16-l28"),
84546fc033eSDavid Collins RPMH_VREG("ldo17", "ldo%s17", &pmic4_nldo, "vdd-l2-l8-l17"),
84646fc033eSDavid Collins RPMH_VREG("ldo18", "ldo%s18", &pmic4_pldo, "vdd-l18-l22"),
84746fc033eSDavid Collins RPMH_VREG("ldo19", "ldo%s19", &pmic4_pldo, "vdd-l13-l19-l21"),
84846fc033eSDavid Collins RPMH_VREG("ldo20", "ldo%s20", &pmic4_pldo, "vdd-l20-l24"),
84946fc033eSDavid Collins RPMH_VREG("ldo21", "ldo%s21", &pmic4_pldo, "vdd-l13-l19-l21"),
85046fc033eSDavid Collins RPMH_VREG("ldo22", "ldo%s22", &pmic4_pldo, "vdd-l18-l22"),
85146fc033eSDavid Collins RPMH_VREG("ldo23", "ldo%s23", &pmic4_pldo, "vdd-l10-l23-l25"),
85246fc033eSDavid Collins RPMH_VREG("ldo24", "ldo%s24", &pmic4_pldo, "vdd-l20-l24"),
85346fc033eSDavid Collins RPMH_VREG("ldo25", "ldo%s25", &pmic4_pldo, "vdd-l10-l23-l25"),
85446fc033eSDavid Collins RPMH_VREG("ldo26", "ldo%s26", &pmic4_nldo, "vdd-l26"),
85546fc033eSDavid Collins RPMH_VREG("ldo27", "ldo%s27", &pmic4_nldo, "vdd-l1-l27"),
85646fc033eSDavid Collins RPMH_VREG("ldo28", "ldo%s28", &pmic4_pldo, "vdd-l16-l28"),
85746fc033eSDavid Collins RPMH_VREG("lvs1", "vs%s1", &pmic4_lvs, "vin-lvs-1-2"),
85846fc033eSDavid Collins RPMH_VREG("lvs2", "vs%s2", &pmic4_lvs, "vin-lvs-1-2"),
859ba5dabf4SBhupesh Sharma {}
86046fc033eSDavid Collins };
86146fc033eSDavid Collins
86259eadd2aSSatya Priya static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = {
86359eadd2aSSatya Priya RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
86459eadd2aSSatya Priya {}
86559eadd2aSSatya Priya };
86659eadd2aSSatya Priya
86746fc033eSDavid Collins static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = {
86846fc033eSDavid Collins RPMH_VREG("bob", "bob%s1", &pmic4_bob, "vdd-bob"),
869ba5dabf4SBhupesh Sharma {}
87046fc033eSDavid Collins };
87146fc033eSDavid Collins
87246fc033eSDavid Collins static const struct rpmh_vreg_init_data pm8005_vreg_data[] = {
87346fc033eSDavid Collins RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"),
87446fc033eSDavid Collins RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"),
87546fc033eSDavid Collins RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3"),
87646fc033eSDavid Collins RPMH_VREG("smps4", "smp%s4", &pmic4_ftsmps426, "vdd-s4"),
877ba5dabf4SBhupesh Sharma {}
87846fc033eSDavid Collins };
87946fc033eSDavid Collins
88006369bccSVinod Koul static const struct rpmh_vreg_init_data pm8150_vreg_data[] = {
88106369bccSVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
88206369bccSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
88306369bccSVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
88406369bccSVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"),
88506369bccSVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"),
88606369bccSVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
88706369bccSVinod Koul RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
88806369bccSVinod Koul RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"),
88906369bccSVinod Koul RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"),
89006369bccSVinod Koul RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
89106369bccSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l8-l11"),
89206369bccSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l10"),
89306369bccSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
89406369bccSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
89506369bccSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
89606369bccSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9"),
89706369bccSVinod Koul RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l12-l14-l15"),
89806369bccSVinod Koul RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l1-l8-l11"),
89906369bccSVinod Koul RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9"),
90006369bccSVinod Koul RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l2-l10"),
90106369bccSVinod Koul RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo, "vdd-l1-l8-l11"),
90206369bccSVinod Koul RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
903906746baSBjorn Andersson RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l13-l16-l17"),
90406369bccSVinod Koul RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
90506369bccSVinod Koul RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
906906746baSBjorn Andersson RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l13-l16-l17"),
907906746baSBjorn Andersson RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l13-l16-l17"),
90806369bccSVinod Koul RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
909ba5dabf4SBhupesh Sharma {}
91006369bccSVinod Koul };
91106369bccSVinod Koul
91206369bccSVinod Koul static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = {
91306369bccSVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
91406369bccSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
91506369bccSVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
91606369bccSVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"),
91706369bccSVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"),
91806369bccSVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
91906369bccSVinod Koul RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
92006369bccSVinod Koul RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"),
92106369bccSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"),
92206369bccSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"),
92306369bccSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"),
92406369bccSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"),
92506369bccSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"),
92606369bccSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"),
92706369bccSVinod Koul RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"),
928906746baSBjorn Andersson RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo_lv, "vdd-l1-l8"),
92906369bccSVinod Koul RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"),
93006369bccSVinod Koul RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"),
93106369bccSVinod Koul RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"),
93206369bccSVinod Koul RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"),
933ba5dabf4SBhupesh Sharma {}
93406369bccSVinod Koul };
93506369bccSVinod Koul
9369a336ed9SBhupesh Sharma static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = {
9379a336ed9SBhupesh Sharma RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
9389a336ed9SBhupesh Sharma RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
9399a336ed9SBhupesh Sharma RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
9409a336ed9SBhupesh Sharma RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"),
9419a336ed9SBhupesh Sharma RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"),
9429a336ed9SBhupesh Sharma RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
9439a336ed9SBhupesh Sharma RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
9449a336ed9SBhupesh Sharma RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"),
9459a336ed9SBhupesh Sharma RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"),
9469a336ed9SBhupesh Sharma RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
9479a336ed9SBhupesh Sharma RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l8-l11"),
9489a336ed9SBhupesh Sharma RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l10"),
9499a336ed9SBhupesh Sharma RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
9509a336ed9SBhupesh Sharma RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
9519a336ed9SBhupesh Sharma RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
9529a336ed9SBhupesh Sharma RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9"),
9539a336ed9SBhupesh Sharma RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
9549a336ed9SBhupesh Sharma RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l1-l8-l11"),
9559a336ed9SBhupesh Sharma RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9"),
9569a336ed9SBhupesh Sharma RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l2-l10"),
9579a336ed9SBhupesh Sharma RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo, "vdd-l1-l8-l11"),
9589a336ed9SBhupesh Sharma RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
9599a336ed9SBhupesh Sharma RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l13-l16-l17"),
9609a336ed9SBhupesh Sharma RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
9619a336ed9SBhupesh Sharma RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"),
9629a336ed9SBhupesh Sharma RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l13-l16-l17"),
9639a336ed9SBhupesh Sharma RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l13-l16-l17"),
9649a336ed9SBhupesh Sharma RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, "vdd-l3-l4-l5-l18"),
9659a336ed9SBhupesh Sharma {}
9669a336ed9SBhupesh Sharma };
9679a336ed9SBhupesh Sharma
96865f1b1dcSBartosz Golaszewski static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = {
96965f1b1dcSBartosz Golaszewski RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps527, "vdd-s1"),
97065f1b1dcSBartosz Golaszewski RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps527, "vdd-s2"),
97165f1b1dcSBartosz Golaszewski RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps527, "vdd-s3"),
97265f1b1dcSBartosz Golaszewski RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps527, "vdd-s4"),
97365f1b1dcSBartosz Golaszewski RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps527, "vdd-s5"),
97465f1b1dcSBartosz Golaszewski RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps527, "vdd-s6"),
97565f1b1dcSBartosz Golaszewski RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps527, "vdd-s7"),
97665f1b1dcSBartosz Golaszewski RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps527, "vdd-s8"),
97765f1b1dcSBartosz Golaszewski RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps527, "vdd-s9"),
97865f1b1dcSBartosz Golaszewski RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-s9"),
97965f1b1dcSBartosz Golaszewski RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2-l3"),
98065f1b1dcSBartosz Golaszewski RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l2-l3"),
98165f1b1dcSBartosz Golaszewski RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-s9"),
98265f1b1dcSBartosz Golaszewski RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo515, "vdd-s9"),
98365f1b1dcSBartosz Golaszewski RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo515, "vdd-l6-l7"),
98465f1b1dcSBartosz Golaszewski RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo515, "vdd-l6-l7"),
98565f1b1dcSBartosz Golaszewski RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo515_mv, "vdd-l8-l9"),
98665f1b1dcSBartosz Golaszewski RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l8-l9"),
98765f1b1dcSBartosz Golaszewski {}
98865f1b1dcSBartosz Golaszewski };
98965f1b1dcSBartosz Golaszewski
990bebb2c6dSVinod Koul static const struct rpmh_vreg_init_data pm8350_vreg_data[] = {
991bebb2c6dSVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
992bebb2c6dSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
993bebb2c6dSVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
994bebb2c6dSVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"),
995bebb2c6dSVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"),
996bebb2c6dSVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
997bebb2c6dSVinod Koul RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
998bebb2c6dSVinod Koul RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"),
999bebb2c6dSVinod Koul RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"),
1000bebb2c6dSVinod Koul RPMH_VREG("smps10", "smp%s10", &pmic5_hfsmps510, "vdd-s10"),
1001bebb2c6dSVinod Koul RPMH_VREG("smps11", "smp%s11", &pmic5_hfsmps510, "vdd-s11"),
1002bebb2c6dSVinod Koul RPMH_VREG("smps12", "smp%s12", &pmic5_hfsmps510, "vdd-s12"),
1003bebb2c6dSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l4"),
1004bebb2c6dSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l7"),
1005bebb2c6dSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l5"),
1006bebb2c6dSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l1-l4"),
1007bebb2c6dSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l5"),
1008bebb2c6dSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9-l10"),
1009bebb2c6dSVinod Koul RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l2-l7"),
1010bebb2c6dSVinod Koul RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8"),
1011bebb2c6dSVinod Koul RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9-l10"),
1012bebb2c6dSVinod Koul RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l6-l9-l10"),
1013ba5dabf4SBhupesh Sharma {}
1014bebb2c6dSVinod Koul };
1015bebb2c6dSVinod Koul
1016bebb2c6dSVinod Koul static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = {
1017dfe03bcaSsatya priya RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps515, "vdd-s1"),
1018bebb2c6dSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
1019bebb2c6dSVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
1020bebb2c6dSVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"),
1021bebb2c6dSVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"),
1022bebb2c6dSVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
1023bebb2c6dSVinod Koul RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
1024bebb2c6dSVinod Koul RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"),
1025bebb2c6dSVinod Koul RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"),
1026bebb2c6dSVinod Koul RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
1027bebb2c6dSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l12"),
1028bebb2c6dSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo_lv, "vdd-l2-l8"),
1029bebb2c6dSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"),
1030bebb2c6dSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"),
1031bebb2c6dSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"),
1032bebb2c6dSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l6-l9-l11"),
1033bebb2c6dSVinod Koul RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"),
1034bebb2c6dSVinod Koul RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo_lv, "vdd-l2-l8"),
1035bebb2c6dSVinod Koul RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l6-l9-l11"),
1036bebb2c6dSVinod Koul RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l10"),
1037bebb2c6dSVinod Koul RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l6-l9-l11"),
1038bebb2c6dSVinod Koul RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l1-l12"),
1039bebb2c6dSVinod Koul RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"),
1040bebb2c6dSVinod Koul RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"),
1041ba5dabf4SBhupesh Sharma {}
1042bebb2c6dSVinod Koul };
1043bebb2c6dSVinod Koul
1044d69e1972SVinod Koul static const struct rpmh_vreg_init_data pm8450_vreg_data[] = {
1045d69e1972SVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps520, "vdd-s1"),
1046d69e1972SVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"),
1047d69e1972SVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps520, "vdd-s3"),
1048d69e1972SVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps520, "vdd-s4"),
1049d69e1972SVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps520, "vdd-s5"),
1050d69e1972SVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps520, "vdd-s6"),
1051d69e1972SVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"),
1052d69e1972SVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"),
1053d69e1972SVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
1054d69e1972SVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo_lv, "vdd-l4"),
1055d69e1972SVinod Koul {}
1056d69e1972SVinod Koul };
1057d69e1972SVinod Koul
1058e6e3776dSAbel Vesa static const struct rpmh_vreg_init_data pm8550_vreg_data[] = {
1059b00de000SAbel Vesa RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1-l4-l10"),
1060e6e3776dSAbel Vesa RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l13-l14"),
1061b00de000SAbel Vesa RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"),
1062b00de000SAbel Vesa RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-l1-l4-l10"),
1063e6e3776dSAbel Vesa RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l16"),
1064b00de000SAbel Vesa RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l6-l7"),
1065b00de000SAbel Vesa RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l6-l7"),
1066b00de000SAbel Vesa RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, "vdd-l8-l9"),
1067e6e3776dSAbel Vesa RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l8-l9"),
1068b00de000SAbel Vesa RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo515, "vdd-l1-l4-l10"),
1069b00de000SAbel Vesa RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo515, "vdd-l11"),
10707cdf5546SAbel Vesa RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo515, "vdd-l12"),
1071e6e3776dSAbel Vesa RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l2-l13-l14"),
1072e6e3776dSAbel Vesa RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo, "vdd-l2-l13-l14"),
1073b00de000SAbel Vesa RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo515, "vdd-l15"),
1074e6e3776dSAbel Vesa RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l16"),
1075e6e3776dSAbel Vesa RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l17"),
1076e6e3776dSAbel Vesa RPMH_VREG("bob1", "bob%s1", &pmic5_bob, "vdd-bob1"),
1077e6e3776dSAbel Vesa RPMH_VREG("bob2", "bob%s2", &pmic5_bob, "vdd-bob2"),
1078e6e3776dSAbel Vesa {}
1079e6e3776dSAbel Vesa };
1080e6e3776dSAbel Vesa
1081e6e3776dSAbel Vesa static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = {
1082e6e3776dSAbel Vesa RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),
1083e6e3776dSAbel Vesa RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),
1084e6e3776dSAbel Vesa RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),
1085e6e3776dSAbel Vesa RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_lv, "vdd-s4"),
1086e6e3776dSAbel Vesa RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),
1087e6e3776dSAbel Vesa RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_mv, "vdd-s6"),
1088b00de000SAbel Vesa RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"),
1089b00de000SAbel Vesa RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2"),
1090b00de000SAbel Vesa RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"),
1091e6e3776dSAbel Vesa {}
1092e6e3776dSAbel Vesa };
1093e6e3776dSAbel Vesa
1094e6e3776dSAbel Vesa static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = {
1095e6e3776dSAbel Vesa RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),
1096e6e3776dSAbel Vesa RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),
1097e6e3776dSAbel Vesa RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),
1098*d51b96c9SAbel Vesa RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"),
1099e6e3776dSAbel Vesa RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),
1100e6e3776dSAbel Vesa RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"),
1101e6e3776dSAbel Vesa RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"),
1102e6e3776dSAbel Vesa RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"),
1103b00de000SAbel Vesa RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"),
1104b00de000SAbel Vesa RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2"),
1105b00de000SAbel Vesa RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"),
1106e6e3776dSAbel Vesa {}
1107e6e3776dSAbel Vesa };
1108e6e3776dSAbel Vesa
110906369bccSVinod Koul static const struct rpmh_vreg_init_data pm8009_vreg_data[] = {
111006369bccSVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"),
111106369bccSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515, "vdd-s2"),
111206369bccSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"),
111306369bccSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"),
111406369bccSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
111506369bccSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"),
111606369bccSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"),
111706369bccSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"),
111820ccc362SJonathan Marek RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7"),
1119ba5dabf4SBhupesh Sharma {}
112006369bccSVinod Koul };
112106369bccSVinod Koul
1122951384caSDmitry Baryshkov static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = {
1123951384caSDmitry Baryshkov RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"),
1124951384caSDmitry Baryshkov RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515_1, "vdd-s2"),
1125951384caSDmitry Baryshkov RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"),
1126951384caSDmitry Baryshkov RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"),
1127951384caSDmitry Baryshkov RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
1128951384caSDmitry Baryshkov RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"),
1129951384caSDmitry Baryshkov RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"),
1130951384caSDmitry Baryshkov RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"),
113186358041SDmitry Baryshkov RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7"),
1132ba5dabf4SBhupesh Sharma {}
1133951384caSDmitry Baryshkov };
1134951384caSDmitry Baryshkov
113575bb518eSKiran Gunda static const struct rpmh_vreg_init_data pm6150_vreg_data[] = {
113675bb518eSKiran Gunda RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
113775bb518eSKiran Gunda RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
113875bb518eSKiran Gunda RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
113975bb518eSKiran Gunda RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"),
114075bb518eSKiran Gunda RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"),
114175bb518eSKiran Gunda RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"),
114275bb518eSKiran Gunda RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"),
114375bb518eSKiran Gunda RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"),
114475bb518eSKiran Gunda RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4-l7-l8"),
114575bb518eSKiran Gunda RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"),
114675bb518eSKiran Gunda RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6"),
114775bb518eSKiran Gunda RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l4-l7-l8"),
114875bb518eSKiran Gunda RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l4-l7-l8"),
114975bb518eSKiran Gunda RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l9"),
115075bb518eSKiran Gunda RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo_lv, "vdd-l10-l14-l15"),
115175bb518eSKiran Gunda RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo_lv, "vdd-l11-l12-l13"),
115275bb518eSKiran Gunda RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l11-l12-l13"),
115375bb518eSKiran Gunda RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo_lv, "vdd-l11-l12-l13"),
115475bb518eSKiran Gunda RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l10-l14-l15"),
115575bb518eSKiran Gunda RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l10-l14-l15"),
115675bb518eSKiran Gunda RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"),
115775bb518eSKiran Gunda RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"),
115875bb518eSKiran Gunda RPMH_VREG("ldo18", "ldo%s18", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"),
115975bb518eSKiran Gunda RPMH_VREG("ldo19", "ldo%s19", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"),
1160ba5dabf4SBhupesh Sharma {}
116175bb518eSKiran Gunda };
116275bb518eSKiran Gunda
116375bb518eSKiran Gunda static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = {
116475bb518eSKiran Gunda RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
116575bb518eSKiran Gunda RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"),
116675bb518eSKiran Gunda RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"),
116775bb518eSKiran Gunda RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"),
116875bb518eSKiran Gunda RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"),
116975bb518eSKiran Gunda RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
117075bb518eSKiran Gunda RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"),
117175bb518eSKiran Gunda RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"),
117275bb518eSKiran Gunda RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"),
117375bb518eSKiran Gunda RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"),
117475bb518eSKiran Gunda RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"),
117575bb518eSKiran Gunda RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"),
117675bb518eSKiran Gunda RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"),
117775bb518eSKiran Gunda RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"),
117875bb518eSKiran Gunda RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"),
117975bb518eSKiran Gunda RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, "vdd-l1-l8"),
118075bb518eSKiran Gunda RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"),
118175bb518eSKiran Gunda RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"),
118275bb518eSKiran Gunda RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"),
118375bb518eSKiran Gunda RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"),
1184ba5dabf4SBhupesh Sharma {}
118575bb518eSKiran Gunda };
118675bb518eSKiran Gunda
11870adafd62SLuca Weiss static const struct rpmh_vreg_init_data pm6350_vreg_data[] = {
11880adafd62SLuca Weiss RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, NULL),
11890adafd62SLuca Weiss RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, NULL),
11900adafd62SLuca Weiss /* smps3 - smps5 not configured */
11910adafd62SLuca Weiss RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, NULL),
11920adafd62SLuca Weiss RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, NULL),
11930adafd62SLuca Weiss RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo, NULL),
11940adafd62SLuca Weiss RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, NULL),
11950adafd62SLuca Weiss RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, NULL),
11960adafd62SLuca Weiss RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, NULL),
11970adafd62SLuca Weiss RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, NULL),
11980adafd62SLuca Weiss RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, NULL),
11990adafd62SLuca Weiss RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, NULL),
12000adafd62SLuca Weiss RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, NULL),
12010adafd62SLuca Weiss RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, NULL),
12020adafd62SLuca Weiss RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo, NULL),
12030adafd62SLuca Weiss RPMH_VREG("ldo13", "ldo%s13", &pmic5_nldo, NULL),
12040adafd62SLuca Weiss RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo, NULL),
12050adafd62SLuca Weiss RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, NULL),
12060adafd62SLuca Weiss RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo, NULL),
12070adafd62SLuca Weiss /* ldo17 not configured */
12080adafd62SLuca Weiss RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, NULL),
12090adafd62SLuca Weiss RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo, NULL),
12100adafd62SLuca Weiss RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo, NULL),
12110adafd62SLuca Weiss RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo, NULL),
12120adafd62SLuca Weiss RPMH_VREG("ldo22", "ldo%s22", &pmic5_nldo, NULL),
12130adafd62SLuca Weiss };
12140adafd62SLuca Weiss
121536dd70ceSVinod Koul static const struct rpmh_vreg_init_data pmx55_vreg_data[] = {
121636dd70ceSVinod Koul RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
121736dd70ceSVinod Koul RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, "vdd-s2"),
121836dd70ceSVinod Koul RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps510, "vdd-s3"),
121936dd70ceSVinod Koul RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"),
122036dd70ceSVinod Koul RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"),
122136dd70ceSVinod Koul RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
122236dd70ceSVinod Koul RPMH_VREG("smps7", "smp%s7", &pmic5_hfsmps510, "vdd-s7"),
122336dd70ceSVinod Koul RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l2"),
122436dd70ceSVinod Koul RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l1-l2"),
122536dd70ceSVinod Koul RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l9"),
122636dd70ceSVinod Koul RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4-l12"),
122736dd70ceSVinod Koul RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"),
122836dd70ceSVinod Koul RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"),
122936dd70ceSVinod Koul RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l7-l8"),
123036dd70ceSVinod Koul RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l7-l8"),
123136dd70ceSVinod Koul RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l3-l9"),
123236dd70ceSVinod Koul RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10-l11-l13"),
123336dd70ceSVinod Koul RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l10-l11-l13"),
123436dd70ceSVinod Koul RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l4-l12"),
123536dd70ceSVinod Koul RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l10-l11-l13"),
123636dd70ceSVinod Koul RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14"),
123736dd70ceSVinod Koul RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l15"),
123836dd70ceSVinod Koul RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l16"),
1239ba5dabf4SBhupesh Sharma {}
124036dd70ceSVinod Koul };
124136dd70ceSVinod Koul
12425999f85dSRohit Agarwal static const struct rpmh_vreg_init_data pmx65_vreg_data[] = {
12435999f85dSRohit Agarwal RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"),
12445999f85dSRohit Agarwal RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, "vdd-s2"),
12455999f85dSRohit Agarwal RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps510, "vdd-s3"),
12465999f85dSRohit Agarwal RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"),
12475999f85dSRohit Agarwal RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"),
12485999f85dSRohit Agarwal RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"),
12495999f85dSRohit Agarwal RPMH_VREG("smps7", "smp%s7", &pmic5_hfsmps510, "vdd-s7"),
12505999f85dSRohit Agarwal RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"),
12515999f85dSRohit Agarwal RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"),
12525999f85dSRohit Agarwal RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l18"),
12535999f85dSRohit Agarwal RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
12545999f85dSRohit Agarwal RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"),
12555999f85dSRohit Agarwal RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6-l16"),
12565999f85dSRohit Agarwal RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6-l16"),
12575999f85dSRohit Agarwal RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l7"),
12585999f85dSRohit Agarwal RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8-l9"),
12595999f85dSRohit Agarwal RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l8-l9"),
12605999f85dSRohit Agarwal RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10"),
12615999f85dSRohit Agarwal RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l11-l13"),
12625999f85dSRohit Agarwal RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l12"),
12635999f85dSRohit Agarwal RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l11-l13"),
12645999f85dSRohit Agarwal RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14"),
12655999f85dSRohit Agarwal RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l15"),
12665999f85dSRohit Agarwal RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l6-l16"),
12675999f85dSRohit Agarwal RPMH_VREG("ldo17", "ldo%s17", &pmic5_nldo, "vdd-l17"),
12685999f85dSRohit Agarwal /* ldo18 not configured */
12695999f85dSRohit Agarwal RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo, "vdd-l19"),
12705999f85dSRohit Agarwal RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo, "vdd-l20"),
12715999f85dSRohit Agarwal RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo, "vdd-l21"),
12725999f85dSRohit Agarwal {}
12735999f85dSRohit Agarwal };
12745999f85dSRohit Agarwal
12750b294ed6SRohit Agarwal static const struct rpmh_vreg_init_data pmx75_vreg_data[] = {
12760b294ed6SRohit Agarwal RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),
12770b294ed6SRohit Agarwal RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),
12780b294ed6SRohit Agarwal RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),
12790b294ed6SRohit Agarwal RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"),
12800b294ed6SRohit Agarwal RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),
12810b294ed6SRohit Agarwal RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"),
12820b294ed6SRohit Agarwal RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"),
12830b294ed6SRohit Agarwal RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"),
12840b294ed6SRohit Agarwal RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps525_lv, "vdd-s9"),
12850b294ed6SRohit Agarwal RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps525_lv, "vdd-s10"),
12860b294ed6SRohit Agarwal RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"),
12870b294ed6SRohit Agarwal RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2-18"),
12880b294ed6SRohit Agarwal RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"),
12890b294ed6SRohit Agarwal RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-l4-l16"),
12900b294ed6SRohit Agarwal RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo_lv, "vdd-l5-l6"),
12910b294ed6SRohit Agarwal RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo_lv, "vdd-l5-l6"),
12920b294ed6SRohit Agarwal RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo515, "vdd-l7"),
12930b294ed6SRohit Agarwal RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo515, "vdd-l8-l9"),
12940b294ed6SRohit Agarwal RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo515, "vdd-l8-l9"),
12950b294ed6SRohit Agarwal RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10"),
12960b294ed6SRohit Agarwal RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l11-l13"),
12970b294ed6SRohit Agarwal RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo515, "vdd-l12"),
12980b294ed6SRohit Agarwal RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l11-l13"),
12990b294ed6SRohit Agarwal RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo515, "vdd-l14"),
13000b294ed6SRohit Agarwal RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo515, "vdd-l15"),
13010b294ed6SRohit Agarwal RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo515, "vdd-l4-l16"),
13020b294ed6SRohit Agarwal RPMH_VREG("ldo17", "ldo%s17", &pmic5_nldo515, "vdd-l17"),
13030b294ed6SRohit Agarwal /* ldo18 not configured */
13040b294ed6SRohit Agarwal RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo515, "vdd-l19"),
13050b294ed6SRohit Agarwal RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo515, "vdd-l20-l21"),
13060b294ed6SRohit Agarwal RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo515, "vdd-l20-l21"),
13070b294ed6SRohit Agarwal };
13080b294ed6SRohit Agarwal
1309c4e5aa3dSsatya priya static const struct rpmh_vreg_init_data pm7325_vreg_data[] = {
1310c4e5aa3dSsatya priya RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"),
1311c4e5aa3dSsatya priya RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"),
1312c4e5aa3dSsatya priya RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps520, "vdd-s3"),
1313c4e5aa3dSsatya priya RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps520, "vdd-s4"),
1314c4e5aa3dSsatya priya RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps520, "vdd-s5"),
1315c4e5aa3dSsatya priya RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps520, "vdd-s6"),
1316c4e5aa3dSsatya priya RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps520, "vdd-s7"),
1317c4e5aa3dSsatya priya RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"),
1318c4e5aa3dSsatya priya RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l4-l12-l15"),
1319c4e5aa3dSsatya priya RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l7"),
1320c4e5aa3dSsatya priya RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
1321c4e5aa3dSsatya priya RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l1-l4-l12-l15"),
1322c4e5aa3dSsatya priya RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l5"),
1323c4e5aa3dSsatya priya RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9-l10"),
1324c4e5aa3dSsatya priya RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l2-l7"),
1325c4e5aa3dSsatya priya RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8"),
1326c4e5aa3dSsatya priya RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9-l10"),
1327c4e5aa3dSsatya priya RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l6-l9-l10"),
1328c4e5aa3dSsatya priya RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"),
1329c4e5aa3dSsatya priya RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l1-l4-l12-l15"),
1330c4e5aa3dSsatya priya RPMH_VREG("ldo13", "ldo%s13", &pmic5_nldo, "vdd-l13"),
1331c4e5aa3dSsatya priya RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14-l16"),
1332c4e5aa3dSsatya priya RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l1-l4-l12-l15"),
1333c4e5aa3dSsatya priya RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo, "vdd-l14-l16"),
1334c4e5aa3dSsatya priya RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"),
1335c4e5aa3dSsatya priya RPMH_VREG("ldo18", "ldo%s18", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"),
1336c4e5aa3dSsatya priya RPMH_VREG("ldo19", "ldo%s19", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"),
1337f26cdadaSBhupesh Sharma {}
1338c4e5aa3dSsatya priya };
1339c4e5aa3dSsatya priya
1340c4e5aa3dSsatya priya static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = {
1341c4e5aa3dSsatya priya RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps520, "vdd-s1"),
1342c4e5aa3dSsatya priya RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"),
1343dd801b22SKonrad Dybcio RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps515, "vdd-s3"),
1344c4e5aa3dSsatya priya RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l2"),
1345c4e5aa3dSsatya priya RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l1-l2"),
1346c4e5aa3dSsatya priya RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"),
1347c4e5aa3dSsatya priya RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo_lv, "vdd-l4"),
1348c4e5aa3dSsatya priya RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l5-l6"),
1349c4e5aa3dSsatya priya RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l5-l6"),
1350c4e5aa3dSsatya priya RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-bob"),
1351f26cdadaSBhupesh Sharma {}
1352c4e5aa3dSsatya priya };
1353c4e5aa3dSsatya priya
1354911ce7cfSRichard Acayan static const struct rpmh_vreg_init_data pm660_vreg_data[] = {
1355911ce7cfSRichard Acayan RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"),
1356911ce7cfSRichard Acayan RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"),
1357911ce7cfSRichard Acayan RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3"),
1358911ce7cfSRichard Acayan RPMH_VREG("smps4", "smp%s4", &pmic4_hfsmps3, "vdd-s4"),
1359911ce7cfSRichard Acayan RPMH_VREG("smps5", "smp%s5", &pmic4_hfsmps3, "vdd-s5"),
1360911ce7cfSRichard Acayan RPMH_VREG("smps6", "smp%s6", &pmic4_hfsmps3, "vdd-s6"),
1361911ce7cfSRichard Acayan RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l6-l7"),
1362911ce7cfSRichard Acayan RPMH_VREG("ldo2", "ldo%s2", &pmic4_nldo, "vdd-l2-l3"),
1363911ce7cfSRichard Acayan RPMH_VREG("ldo3", "ldo%s3", &pmic4_nldo, "vdd-l2-l3"),
1364911ce7cfSRichard Acayan /* ldo4 is inaccessible on PM660 */
1365911ce7cfSRichard Acayan RPMH_VREG("ldo5", "ldo%s5", &pmic4_nldo, "vdd-l5"),
1366911ce7cfSRichard Acayan RPMH_VREG("ldo6", "ldo%s6", &pmic4_nldo, "vdd-l1-l6-l7"),
1367911ce7cfSRichard Acayan RPMH_VREG("ldo7", "ldo%s7", &pmic4_nldo, "vdd-l1-l6-l7"),
1368911ce7cfSRichard Acayan RPMH_VREG("ldo8", "ldo%s8", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1369911ce7cfSRichard Acayan RPMH_VREG("ldo9", "ldo%s9", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1370911ce7cfSRichard Acayan RPMH_VREG("ldo10", "ldo%s10", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1371911ce7cfSRichard Acayan RPMH_VREG("ldo11", "ldo%s11", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1372911ce7cfSRichard Acayan RPMH_VREG("ldo12", "ldo%s12", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1373911ce7cfSRichard Acayan RPMH_VREG("ldo13", "ldo%s13", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1374911ce7cfSRichard Acayan RPMH_VREG("ldo14", "ldo%s14", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"),
1375911ce7cfSRichard Acayan RPMH_VREG("ldo15", "ldo%s15", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"),
1376911ce7cfSRichard Acayan RPMH_VREG("ldo16", "ldo%s16", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"),
1377911ce7cfSRichard Acayan RPMH_VREG("ldo17", "ldo%s17", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"),
1378911ce7cfSRichard Acayan RPMH_VREG("ldo18", "ldo%s18", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"),
1379911ce7cfSRichard Acayan RPMH_VREG("ldo19", "ldo%s19", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"),
1380911ce7cfSRichard Acayan {}
1381911ce7cfSRichard Acayan };
1382911ce7cfSRichard Acayan
1383911ce7cfSRichard Acayan static const struct rpmh_vreg_init_data pm660l_vreg_data[] = {
1384911ce7cfSRichard Acayan RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"),
1385911ce7cfSRichard Acayan RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"),
1386911ce7cfSRichard Acayan RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3-s4"),
1387911ce7cfSRichard Acayan RPMH_VREG("smps5", "smp%s5", &pmic4_ftsmps426, "vdd-s5"),
1388911ce7cfSRichard Acayan RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l9-l10"),
1389911ce7cfSRichard Acayan RPMH_VREG("ldo2", "ldo%s2", &pmic4_pldo, "vdd-l2"),
1390911ce7cfSRichard Acayan RPMH_VREG("ldo3", "ldo%s3", &pmic4_pldo, "vdd-l3-l5-l7-l8"),
1391911ce7cfSRichard Acayan RPMH_VREG("ldo4", "ldo%s4", &pmic4_pldo, "vdd-l4-l6"),
1392911ce7cfSRichard Acayan RPMH_VREG("ldo5", "ldo%s5", &pmic4_pldo, "vdd-l3-l5-l7-l8"),
1393911ce7cfSRichard Acayan RPMH_VREG("ldo6", "ldo%s6", &pmic4_pldo, "vdd-l4-l6"),
1394911ce7cfSRichard Acayan RPMH_VREG("ldo7", "ldo%s7", &pmic4_pldo, "vdd-l3-l5-l7-l8"),
1395911ce7cfSRichard Acayan RPMH_VREG("ldo8", "ldo%s8", &pmic4_pldo, "vdd-l3-l5-l7-l8"),
1396911ce7cfSRichard Acayan RPMH_VREG("bob", "bob%s1", &pmic4_bob, "vdd-bob"),
1397911ce7cfSRichard Acayan {}
1398911ce7cfSRichard Acayan };
1399911ce7cfSRichard Acayan
rpmh_regulator_probe(struct platform_device * pdev)140046fc033eSDavid Collins static int rpmh_regulator_probe(struct platform_device *pdev)
140146fc033eSDavid Collins {
140246fc033eSDavid Collins struct device *dev = &pdev->dev;
140346fc033eSDavid Collins const struct rpmh_vreg_init_data *vreg_data;
140446fc033eSDavid Collins struct device_node *node;
140546fc033eSDavid Collins struct rpmh_vreg *vreg;
140646fc033eSDavid Collins const char *pmic_id;
140746fc033eSDavid Collins int ret;
140846fc033eSDavid Collins
140946fc033eSDavid Collins vreg_data = of_device_get_match_data(dev);
141046fc033eSDavid Collins if (!vreg_data)
141146fc033eSDavid Collins return -ENODEV;
141246fc033eSDavid Collins
141346fc033eSDavid Collins ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id);
141446fc033eSDavid Collins if (ret < 0) {
141546fc033eSDavid Collins dev_err(dev, "qcom,pmic-id missing in DT node\n");
141646fc033eSDavid Collins return ret;
141746fc033eSDavid Collins }
141846fc033eSDavid Collins
141946fc033eSDavid Collins for_each_available_child_of_node(dev->of_node, node) {
142046fc033eSDavid Collins vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
142146fc033eSDavid Collins if (!vreg) {
142246fc033eSDavid Collins of_node_put(node);
142346fc033eSDavid Collins return -ENOMEM;
142446fc033eSDavid Collins }
142546fc033eSDavid Collins
142646fc033eSDavid Collins ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id,
142746fc033eSDavid Collins vreg_data);
142846fc033eSDavid Collins if (ret < 0) {
142946fc033eSDavid Collins of_node_put(node);
143046fc033eSDavid Collins return ret;
143146fc033eSDavid Collins }
143246fc033eSDavid Collins }
143346fc033eSDavid Collins
143446fc033eSDavid Collins return 0;
143546fc033eSDavid Collins }
143646fc033eSDavid Collins
1437a2508eebSJisheng Zhang static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {
143846fc033eSDavid Collins {
143946fc033eSDavid Collins .compatible = "qcom,pm8005-rpmh-regulators",
144046fc033eSDavid Collins .data = pm8005_vreg_data,
144146fc033eSDavid Collins },
144206369bccSVinod Koul {
14437172fb7fSVinod Koul .compatible = "qcom,pm8009-rpmh-regulators",
14447172fb7fSVinod Koul .data = pm8009_vreg_data,
14457172fb7fSVinod Koul },
14467172fb7fSVinod Koul {
1447951384caSDmitry Baryshkov .compatible = "qcom,pm8009-1-rpmh-regulators",
1448951384caSDmitry Baryshkov .data = pm8009_1_vreg_data,
1449951384caSDmitry Baryshkov },
1450951384caSDmitry Baryshkov {
145106369bccSVinod Koul .compatible = "qcom,pm8150-rpmh-regulators",
145206369bccSVinod Koul .data = pm8150_vreg_data,
145306369bccSVinod Koul },
145406369bccSVinod Koul {
145506369bccSVinod Koul .compatible = "qcom,pm8150l-rpmh-regulators",
145606369bccSVinod Koul .data = pm8150l_vreg_data,
145706369bccSVinod Koul },
145806369bccSVinod Koul {
1459bebb2c6dSVinod Koul .compatible = "qcom,pm8350-rpmh-regulators",
1460bebb2c6dSVinod Koul .data = pm8350_vreg_data,
1461bebb2c6dSVinod Koul },
1462bebb2c6dSVinod Koul {
1463bebb2c6dSVinod Koul .compatible = "qcom,pm8350c-rpmh-regulators",
1464bebb2c6dSVinod Koul .data = pm8350c_vreg_data,
1465bebb2c6dSVinod Koul },
1466bebb2c6dSVinod Koul {
1467d69e1972SVinod Koul .compatible = "qcom,pm8450-rpmh-regulators",
1468d69e1972SVinod Koul .data = pm8450_vreg_data,
1469d69e1972SVinod Koul },
1470d69e1972SVinod Koul {
1471e6e3776dSAbel Vesa .compatible = "qcom,pm8550-rpmh-regulators",
1472e6e3776dSAbel Vesa .data = pm8550_vreg_data,
1473e6e3776dSAbel Vesa },
1474e6e3776dSAbel Vesa {
1475e6e3776dSAbel Vesa .compatible = "qcom,pm8550ve-rpmh-regulators",
1476e6e3776dSAbel Vesa .data = pm8550ve_vreg_data,
1477e6e3776dSAbel Vesa },
1478e6e3776dSAbel Vesa {
1479e6e3776dSAbel Vesa .compatible = "qcom,pm8550vs-rpmh-regulators",
1480e6e3776dSAbel Vesa .data = pm8550vs_vreg_data,
1481e6e3776dSAbel Vesa },
1482e6e3776dSAbel Vesa {
14837172fb7fSVinod Koul .compatible = "qcom,pm8998-rpmh-regulators",
14847172fb7fSVinod Koul .data = pm8998_vreg_data,
14857172fb7fSVinod Koul },
14867172fb7fSVinod Koul {
148759eadd2aSSatya Priya .compatible = "qcom,pmg1110-rpmh-regulators",
148859eadd2aSSatya Priya .data = pmg1110_vreg_data,
148959eadd2aSSatya Priya },
149059eadd2aSSatya Priya {
14917172fb7fSVinod Koul .compatible = "qcom,pmi8998-rpmh-regulators",
14927172fb7fSVinod Koul .data = pmi8998_vreg_data,
149306369bccSVinod Koul },
149475bb518eSKiran Gunda {
149575bb518eSKiran Gunda .compatible = "qcom,pm6150-rpmh-regulators",
149675bb518eSKiran Gunda .data = pm6150_vreg_data,
149775bb518eSKiran Gunda },
149875bb518eSKiran Gunda {
149975bb518eSKiran Gunda .compatible = "qcom,pm6150l-rpmh-regulators",
150075bb518eSKiran Gunda .data = pm6150l_vreg_data,
150175bb518eSKiran Gunda },
150236dd70ceSVinod Koul {
15030adafd62SLuca Weiss .compatible = "qcom,pm6350-rpmh-regulators",
15040adafd62SLuca Weiss .data = pm6350_vreg_data,
15050adafd62SLuca Weiss },
15060adafd62SLuca Weiss {
1507e46c52f7SBjorn Andersson .compatible = "qcom,pmc8180-rpmh-regulators",
1508e46c52f7SBjorn Andersson .data = pm8150_vreg_data,
1509e46c52f7SBjorn Andersson },
1510e46c52f7SBjorn Andersson {
1511e46c52f7SBjorn Andersson .compatible = "qcom,pmc8180c-rpmh-regulators",
1512e46c52f7SBjorn Andersson .data = pm8150l_vreg_data,
1513e46c52f7SBjorn Andersson },
1514e46c52f7SBjorn Andersson {
15159a336ed9SBhupesh Sharma .compatible = "qcom,pmm8155au-rpmh-regulators",
15169a336ed9SBhupesh Sharma .data = pmm8155au_vreg_data,
15179a336ed9SBhupesh Sharma },
15189a336ed9SBhupesh Sharma {
151965f1b1dcSBartosz Golaszewski .compatible = "qcom,pmm8654au-rpmh-regulators",
152065f1b1dcSBartosz Golaszewski .data = pmm8654au_vreg_data,
152165f1b1dcSBartosz Golaszewski },
152265f1b1dcSBartosz Golaszewski {
152336dd70ceSVinod Koul .compatible = "qcom,pmx55-rpmh-regulators",
152436dd70ceSVinod Koul .data = pmx55_vreg_data,
152536dd70ceSVinod Koul },
1526c4e5aa3dSsatya priya {
15275999f85dSRohit Agarwal .compatible = "qcom,pmx65-rpmh-regulators",
15285999f85dSRohit Agarwal .data = pmx65_vreg_data,
15295999f85dSRohit Agarwal },
15305999f85dSRohit Agarwal {
15310b294ed6SRohit Agarwal .compatible = "qcom,pmx75-rpmh-regulators",
15320b294ed6SRohit Agarwal .data = pmx75_vreg_data,
15330b294ed6SRohit Agarwal },
15340b294ed6SRohit Agarwal {
1535c4e5aa3dSsatya priya .compatible = "qcom,pm7325-rpmh-regulators",
1536c4e5aa3dSsatya priya .data = pm7325_vreg_data,
1537c4e5aa3dSsatya priya },
1538c4e5aa3dSsatya priya {
1539c4e5aa3dSsatya priya .compatible = "qcom,pmr735a-rpmh-regulators",
1540c4e5aa3dSsatya priya .data = pmr735a_vreg_data,
1541c4e5aa3dSsatya priya },
1542911ce7cfSRichard Acayan {
1543911ce7cfSRichard Acayan .compatible = "qcom,pm660-rpmh-regulators",
1544911ce7cfSRichard Acayan .data = pm660_vreg_data,
1545911ce7cfSRichard Acayan },
1546911ce7cfSRichard Acayan {
1547911ce7cfSRichard Acayan .compatible = "qcom,pm660l-rpmh-regulators",
1548911ce7cfSRichard Acayan .data = pm660l_vreg_data,
1549911ce7cfSRichard Acayan },
155046fc033eSDavid Collins {}
155146fc033eSDavid Collins };
155246fc033eSDavid Collins MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table);
155346fc033eSDavid Collins
155446fc033eSDavid Collins static struct platform_driver rpmh_regulator_driver = {
155546fc033eSDavid Collins .driver = {
155646fc033eSDavid Collins .name = "qcom-rpmh-regulator",
1557ad44ac08SDouglas Anderson .probe_type = PROBE_PREFER_ASYNCHRONOUS,
155846fc033eSDavid Collins .of_match_table = of_match_ptr(rpmh_regulator_match_table),
155946fc033eSDavid Collins },
156046fc033eSDavid Collins .probe = rpmh_regulator_probe,
156146fc033eSDavid Collins };
156246fc033eSDavid Collins module_platform_driver(rpmh_regulator_driver);
156346fc033eSDavid Collins
156446fc033eSDavid Collins MODULE_DESCRIPTION("Qualcomm RPMh regulator driver");
156546fc033eSDavid Collins MODULE_LICENSE("GPL v2");
1566