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, &reg_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