xref: /linux/drivers/regulator/qcom-rpmh-regulator.c (revision 4bd7e2c200b2d3634d459ad918c4fb79e2d6cb8d)
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
3 // Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4 
5 #define pr_fmt(fmt) "%s: " fmt, __func__
6 
7 #include <linux/err.h>
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/of.h>
11 #include <linux/platform_device.h>
12 #include <linux/slab.h>
13 #include <linux/string.h>
14 #include <linux/regulator/driver.h>
15 #include <linux/regulator/machine.h>
16 #include <linux/regulator/of_regulator.h>
17 
18 #include <soc/qcom/cmd-db.h>
19 #include <soc/qcom/rpmh.h>
20 
21 #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
22 
23 /**
24  * enum rpmh_regulator_type - supported RPMh accelerator types
25  * @VRM:	RPMh VRM accelerator which supports voting on enable, voltage,
26  *		and mode of LDO, SMPS, and BOB type PMIC regulators.
27  * @XOB:	RPMh XOB accelerator which supports voting on the enable state
28  *		of PMIC regulators.
29  */
30 enum rpmh_regulator_type {
31 	VRM,
32 	XOB,
33 };
34 
35 /**
36  * enum regulator_hw_type - supported regulator types
37  * @SMPS:			Switch mode power supply.
38  * @LDO:			Linear Dropout regulator.
39  * @BOB:			Buck/Boost type regulator.
40  * @VS:			Simple voltage ON/OFF switch.
41  * @NUM_REGULATOR_TYPES:	Number of regulator types.
42  */
43 enum regulator_hw_type {
44 	SMPS,
45 	LDO,
46 	BOB,
47 	VS,
48 	NUM_REGULATOR_TYPES,
49 };
50 
51 struct resource_name_formats {
52 	const char *rsc_name_fmt;
53 	const char *rsc_name_fmt1;
54 };
55 
56 static const struct resource_name_formats vreg_rsc_name_lookup[NUM_REGULATOR_TYPES] = {
57 	[SMPS]	= {"S%d%s", "smp%s%d"},
58 	[LDO]	= {"L%d%s", "ldo%s%d"},
59 	[BOB]	= {"B%d%s", "bob%s%d"},
60 	[VS]	= {"VS%d%s", "vs%s%d"},
61 };
62 
63 #define RPMH_REGULATOR_REG_VRM_VOLTAGE		0x0
64 #define RPMH_REGULATOR_REG_ENABLE		0x4
65 #define RPMH_REGULATOR_REG_VRM_MODE		0x8
66 
67 #define PMIC4_LDO_MODE_RETENTION		4
68 #define PMIC4_LDO_MODE_LPM			5
69 #define PMIC4_LDO_MODE_HPM			7
70 
71 #define PMIC4_SMPS_MODE_RETENTION		4
72 #define PMIC4_SMPS_MODE_PFM			5
73 #define PMIC4_SMPS_MODE_AUTO			6
74 #define PMIC4_SMPS_MODE_PWM			7
75 
76 #define PMIC4_BOB_MODE_PASS			0
77 #define PMIC4_BOB_MODE_PFM			1
78 #define PMIC4_BOB_MODE_AUTO			2
79 #define PMIC4_BOB_MODE_PWM			3
80 
81 #define PMIC5_LDO_MODE_RETENTION		3
82 #define PMIC5_LDO_MODE_LPM			4
83 #define PMIC5_LDO_MODE_HPM			7
84 
85 #define PMIC5_SMPS_MODE_RETENTION		3
86 #define PMIC5_SMPS_MODE_PFM			4
87 #define PMIC5_SMPS_MODE_AUTO			6
88 #define PMIC5_SMPS_MODE_PWM			7
89 
90 #define PMIC5_BOB_MODE_PASS			2
91 #define PMIC5_BOB_MODE_PFM			4
92 #define PMIC5_BOB_MODE_AUTO			6
93 #define PMIC5_BOB_MODE_PWM			7
94 
95 #define PMIC530_LDO_MODE_RETENTION		3
96 #define PMIC530_LDO_MODE_LPM			4
97 #define PMIC530_LDO_MODE_OPM			5
98 #define PMIC530_LDO_MODE_HPM			7
99 
100 #define PMIC_ID_LEN				4
101 /**
102  * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations
103  * @regulator_type:		RPMh accelerator type used to manage this
104  *				regulator
105  * @ops:			Pointer to regulator ops callback structure
106  * @voltage_ranges:		The possible ranges of voltages supported by this
107  * 				PMIC regulator type
108  * @n_linear_ranges:		Number of entries in voltage_ranges
109  * @n_voltages:			The number of unique voltage set points defined
110  *				by voltage_ranges
111  * @hpm_min_load_uA:		Minimum load current in microamps that requires
112  *				high power mode (HPM) operation.  This is used
113  *				for LDO hardware type regulators only.
114  * @pmic_mode_map:		Array indexed by regulator framework mode
115  *				containing PMIC hardware modes.  Must be large
116  *				enough to index all framework modes supported
117  *				by this regulator hardware type.
118  * @of_map_mode:		Maps an RPMH_REGULATOR_MODE_* mode value defined
119  *				in device tree to a regulator framework mode
120  */
121 struct rpmh_vreg_hw_data {
122 	enum rpmh_regulator_type		regulator_type;
123 	const struct regulator_ops		*ops;
124 	const struct linear_range		*voltage_ranges;
125 	int					n_linear_ranges;
126 	int					n_voltages;
127 	int					hpm_min_load_uA;
128 	const int				*pmic_mode_map;
129 	unsigned int			      (*of_map_mode)(unsigned int mode);
130 };
131 
132 /**
133  * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a
134  *		single regulator device
135  * @dev:			Device pointer for the top-level PMIC RPMh
136  *				regulator parent device.  This is used as a
137  *				handle in RPMh write requests.
138  * @addr:			Base address of the regulator resource within
139  *				an RPMh accelerator
140  * @rdesc:			Regulator descriptor
141  * @hw_data:			PMIC regulator configuration data for this RPMh
142  *				regulator
143  * @always_wait_for_ack:	Boolean flag indicating if a request must always
144  *				wait for an ACK from RPMh before continuing even
145  *				if it corresponds to a strictly lower power
146  *				state (e.g. enabled --> disabled).
147  * @enabled:			Flag indicating if the regulator is enabled or
148  *				not
149  * @bypassed:			Boolean indicating if the regulator is in
150  *				bypass (pass-through) mode or not.  This is
151  *				only used by BOB rpmh-regulator resources.
152  * @voltage_selector:		Selector used for get_voltage_sel() and
153  *				set_voltage_sel() callbacks
154  * @mode:			RPMh VRM regulator current framework mode
155  */
156 struct rpmh_vreg {
157 	struct device			*dev;
158 	u32				addr;
159 	struct regulator_desc		rdesc;
160 	const struct rpmh_vreg_hw_data	*hw_data;
161 	bool				always_wait_for_ack;
162 
163 	int				enabled;
164 	bool				bypassed;
165 	int				voltage_selector;
166 	unsigned int			mode;
167 };
168 
169 /**
170  * struct rpmh_vreg_init_data - initialization data for an RPMh regulator
171  * @name:			Name for the regulator which also corresponds
172  *				to the device tree subnode name of the regulator
173  * @index:			This is the index number of the regulator present
174  *				on the PMIC.
175  * @vreg_hw_type:		Regulator HW type enum, this must be BOB, SMPS,
176  *				LDO, VS, based on the regulator HW type.
177  * @supply_name:		Parent supply regulator name
178  * @hw_data:			Configuration data for this PMIC regulator type
179  */
180 struct rpmh_vreg_init_data {
181 	const char			*name;
182 	enum regulator_hw_type		vreg_hw_type;
183 	int				index;
184 	const char			*supply_name;
185 	const struct rpmh_vreg_hw_data	*hw_data;
186 };
187 
188 /**
189  * rpmh_regulator_send_request() - send the request to RPMh
190  * @vreg:		Pointer to the RPMh regulator
191  * @cmd:		Pointer to the RPMh command to send
192  * @wait_for_ack:	Boolean indicating if execution must wait until the
193  *			request has been acknowledged as complete
194  *
195  * Return: 0 on success, or a negative error number on failure
196  */
197 static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,
198 			struct tcs_cmd *cmd, bool wait_for_ack)
199 {
200 	int ret;
201 
202 	if (wait_for_ack || vreg->always_wait_for_ack)
203 		ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1);
204 	else
205 		ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd,
206 					1);
207 
208 	return ret;
209 }
210 
211 static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
212 				unsigned int selector, bool wait_for_ack)
213 {
214 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
215 	struct tcs_cmd cmd = {
216 		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE,
217 	};
218 	int ret;
219 
220 	/* VRM voltage control register is set with voltage in millivolts. */
221 	cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev,
222 							selector), 1000);
223 
224 	ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack);
225 	if (!ret)
226 		vreg->voltage_selector = selector;
227 
228 	return ret;
229 }
230 
231 static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
232 					unsigned int selector)
233 {
234 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
235 
236 	if (vreg->enabled == -EINVAL) {
237 		/*
238 		 * Cache the voltage and send it later when the regulator is
239 		 * enabled or disabled.
240 		 */
241 		vreg->voltage_selector = selector;
242 		return 0;
243 	}
244 
245 	return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector,
246 					selector > vreg->voltage_selector);
247 }
248 
249 static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev)
250 {
251 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
252 
253 	return vreg->voltage_selector;
254 }
255 
256 static int rpmh_regulator_is_enabled(struct regulator_dev *rdev)
257 {
258 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
259 
260 	return vreg->enabled;
261 }
262 
263 static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev,
264 					bool enable)
265 {
266 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
267 	struct tcs_cmd cmd = {
268 		.addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE,
269 		.data = enable,
270 	};
271 	int ret;
272 
273 	if (vreg->enabled == -EINVAL &&
274 	    vreg->voltage_selector != -ENOTRECOVERABLE) {
275 		ret = _rpmh_regulator_vrm_set_voltage_sel(rdev,
276 						vreg->voltage_selector, true);
277 		if (ret < 0)
278 			return ret;
279 	}
280 
281 	ret = rpmh_regulator_send_request(vreg, &cmd, enable);
282 	if (!ret)
283 		vreg->enabled = enable;
284 
285 	return ret;
286 }
287 
288 static int rpmh_regulator_enable(struct regulator_dev *rdev)
289 {
290 	return rpmh_regulator_set_enable_state(rdev, true);
291 }
292 
293 static int rpmh_regulator_disable(struct regulator_dev *rdev)
294 {
295 	return rpmh_regulator_set_enable_state(rdev, false);
296 }
297 
298 static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg,
299 					unsigned int mode, bool bypassed)
300 {
301 	struct tcs_cmd cmd = {
302 		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE,
303 	};
304 	int pmic_mode;
305 
306 	if (mode > REGULATOR_MODE_STANDBY)
307 		return -EINVAL;
308 
309 	pmic_mode = vreg->hw_data->pmic_mode_map[mode];
310 	if (pmic_mode < 0)
311 		return pmic_mode;
312 
313 	if (bypassed)
314 		cmd.data = PMIC4_BOB_MODE_PASS;
315 	else
316 		cmd.data = pmic_mode;
317 
318 	return rpmh_regulator_send_request(vreg, &cmd, true);
319 }
320 
321 static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev,
322 					unsigned int mode)
323 {
324 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
325 	int ret;
326 
327 	if (mode == vreg->mode)
328 		return 0;
329 
330 	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed);
331 	if (!ret)
332 		vreg->mode = mode;
333 
334 	return ret;
335 }
336 
337 static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)
338 {
339 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
340 
341 	return vreg->mode;
342 }
343 
344 /**
345  * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the  load
346  * @rdev:		Regulator device pointer for the rpmh-regulator
347  * @input_uV:		Input voltage
348  * @output_uV:		Output voltage
349  * @load_uA:		Aggregated load current in microamps
350  *
351  * This function is used in the regulator_ops for VRM type RPMh regulator
352  * devices.
353  *
354  * Return: 0 on success, or a negative error number on failure
355  */
356 static unsigned int rpmh_regulator_vrm_get_optimum_mode(
357 	struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA)
358 {
359 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
360 
361 	if (load_uA >= vreg->hw_data->hpm_min_load_uA)
362 		return REGULATOR_MODE_NORMAL;
363 	else
364 		return REGULATOR_MODE_IDLE;
365 }
366 
367 static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev,
368 				bool enable)
369 {
370 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
371 	int ret;
372 
373 	if (vreg->bypassed == enable)
374 		return 0;
375 
376 	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable);
377 	if (!ret)
378 		vreg->bypassed = enable;
379 
380 	return ret;
381 }
382 
383 static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev,
384 				bool *enable)
385 {
386 	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
387 
388 	*enable = vreg->bypassed;
389 
390 	return 0;
391 }
392 
393 static const struct regulator_ops rpmh_regulator_vrm_ops = {
394 	.enable			= rpmh_regulator_enable,
395 	.disable		= rpmh_regulator_disable,
396 	.is_enabled		= rpmh_regulator_is_enabled,
397 	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
398 	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
399 	.list_voltage		= regulator_list_voltage_linear_range,
400 	.set_mode		= rpmh_regulator_vrm_set_mode,
401 	.get_mode		= rpmh_regulator_vrm_get_mode,
402 };
403 
404 static const struct regulator_ops rpmh_regulator_vrm_drms_ops = {
405 	.enable			= rpmh_regulator_enable,
406 	.disable		= rpmh_regulator_disable,
407 	.is_enabled		= rpmh_regulator_is_enabled,
408 	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
409 	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
410 	.list_voltage		= regulator_list_voltage_linear_range,
411 	.set_mode		= rpmh_regulator_vrm_set_mode,
412 	.get_mode		= rpmh_regulator_vrm_get_mode,
413 	.get_optimum_mode	= rpmh_regulator_vrm_get_optimum_mode,
414 };
415 
416 static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = {
417 	.enable			= rpmh_regulator_enable,
418 	.disable		= rpmh_regulator_disable,
419 	.is_enabled		= rpmh_regulator_is_enabled,
420 	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
421 	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
422 	.list_voltage		= regulator_list_voltage_linear_range,
423 	.set_mode		= rpmh_regulator_vrm_set_mode,
424 	.get_mode		= rpmh_regulator_vrm_get_mode,
425 	.set_bypass		= rpmh_regulator_vrm_set_bypass,
426 	.get_bypass		= rpmh_regulator_vrm_get_bypass,
427 };
428 
429 static const struct regulator_ops rpmh_regulator_xob_ops = {
430 	.enable			= rpmh_regulator_enable,
431 	.disable		= rpmh_regulator_disable,
432 	.is_enabled		= rpmh_regulator_is_enabled,
433 };
434 
435 /**
436  * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator
437  * @vreg:		Pointer to the individual rpmh-regulator resource
438  * @dev:			Pointer to the top level rpmh-regulator PMIC device
439  * @node:		Pointer to the individual rpmh-regulator resource
440  *			device node
441  * @pmic_id:		String used to identify the top level rpmh-regulator
442  *			PMIC device on the board
443  * @pmic_rpmh_data:	Pointer to a null-terminated array of rpmh-regulator
444  *			resources defined for the top level PMIC device
445  *
446  * Return: 0 on success, or a negative error number on failure
447  */
448 static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev,
449 			struct device_node *node, const char *pmic_id,
450 			const struct rpmh_vreg_init_data *pmic_rpmh_data)
451 {
452 	struct regulator_config reg_config = {};
453 	char rpmh_resource_name[20] = "";
454 	const char *rsc_name;
455 	const struct rpmh_vreg_init_data *rpmh_data;
456 	struct regulator_init_data *init_data;
457 	struct regulator_dev *rdev;
458 	int ret;
459 
460 	vreg->dev = dev;
461 
462 	for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++)
463 		if (of_node_name_eq(node, rpmh_data->name))
464 			break;
465 
466 	if (!rpmh_data->name) {
467 		dev_err(dev, "Unknown regulator %pOFn\n", node);
468 		return -EINVAL;
469 	}
470 
471 	if (strnlen(pmic_id, PMIC_ID_LEN) > 1 && strnstr(pmic_id, "_E", PMIC_ID_LEN)) {
472 		rsc_name = vreg_rsc_name_lookup[rpmh_data->vreg_hw_type].rsc_name_fmt;
473 		scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name),
474 			  rsc_name, rpmh_data->index, pmic_id);
475 
476 	} else {
477 		rsc_name = vreg_rsc_name_lookup[rpmh_data->vreg_hw_type].rsc_name_fmt1;
478 		scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name),
479 			  rsc_name, pmic_id, rpmh_data->index);
480 	}
481 
482 	vreg->addr = cmd_db_read_addr(rpmh_resource_name);
483 	if (!vreg->addr) {
484 		dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n",
485 			node, rpmh_resource_name);
486 		return -ENODEV;
487 	}
488 
489 	vreg->rdesc.name = rpmh_data->name;
490 	vreg->rdesc.supply_name = rpmh_data->supply_name;
491 	vreg->hw_data = rpmh_data->hw_data;
492 
493 	vreg->enabled = -EINVAL;
494 	vreg->voltage_selector = -ENOTRECOVERABLE;
495 	vreg->mode = REGULATOR_MODE_INVALID;
496 
497 	if (rpmh_data->hw_data->n_voltages) {
498 		vreg->rdesc.linear_ranges = rpmh_data->hw_data->voltage_ranges;
499 		vreg->rdesc.n_linear_ranges = rpmh_data->hw_data->n_linear_ranges;
500 		vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages;
501 	}
502 
503 	vreg->always_wait_for_ack = of_property_read_bool(node,
504 						"qcom,always-wait-for-ack");
505 
506 	vreg->rdesc.owner	= THIS_MODULE;
507 	vreg->rdesc.type	= REGULATOR_VOLTAGE;
508 	vreg->rdesc.ops		= vreg->hw_data->ops;
509 	vreg->rdesc.of_map_mode	= vreg->hw_data->of_map_mode;
510 
511 	init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc);
512 	if (!init_data)
513 		return -ENOMEM;
514 
515 	if (rpmh_data->hw_data->regulator_type == XOB &&
516 	    init_data->constraints.min_uV &&
517 	    init_data->constraints.min_uV == init_data->constraints.max_uV) {
518 		vreg->rdesc.fixed_uV = init_data->constraints.min_uV;
519 		vreg->rdesc.n_voltages = 1;
520 	}
521 
522 	reg_config.dev		= dev;
523 	reg_config.init_data	= init_data;
524 	reg_config.of_node	= node;
525 	reg_config.driver_data	= vreg;
526 
527 	rdev = devm_regulator_register(dev, &vreg->rdesc, &reg_config);
528 	if (IS_ERR(rdev)) {
529 		ret = PTR_ERR(rdev);
530 		dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n",
531 			node, ret);
532 		return ret;
533 	}
534 
535 	dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n",
536 		node, rpmh_resource_name, vreg->addr);
537 
538 	return 0;
539 }
540 
541 static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = {
542 	[REGULATOR_MODE_INVALID] = -EINVAL,
543 	[REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION,
544 	[REGULATOR_MODE_IDLE]    = PMIC4_LDO_MODE_LPM,
545 	[REGULATOR_MODE_NORMAL]  = PMIC4_LDO_MODE_HPM,
546 	[REGULATOR_MODE_FAST]    = -EINVAL,
547 };
548 
549 static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = {
550 	[REGULATOR_MODE_INVALID] = -EINVAL,
551 	[REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION,
552 	[REGULATOR_MODE_IDLE]    = PMIC5_LDO_MODE_LPM,
553 	[REGULATOR_MODE_NORMAL]  = PMIC5_LDO_MODE_HPM,
554 	[REGULATOR_MODE_FAST]    = -EINVAL,
555 };
556 
557 static const int pmic_mode_map_pmic5_ldo_hpm[REGULATOR_MODE_STANDBY + 1] = {
558 	[REGULATOR_MODE_INVALID] = -EINVAL,
559 	[REGULATOR_MODE_STANDBY] = -EINVAL,
560 	[REGULATOR_MODE_IDLE]    = -EINVAL,
561 	[REGULATOR_MODE_NORMAL]  = PMIC5_LDO_MODE_HPM,
562 	[REGULATOR_MODE_FAST]    = -EINVAL,
563 };
564 
565 static const int pmic_mode_map_pmic530_ldo[REGULATOR_MODE_STANDBY + 1] = {
566 	[REGULATOR_MODE_INVALID] = -EINVAL,
567 	[REGULATOR_MODE_STANDBY] = PMIC530_LDO_MODE_RETENTION,
568 	[REGULATOR_MODE_IDLE]    = PMIC530_LDO_MODE_LPM,
569 	[REGULATOR_MODE_NORMAL]  = PMIC530_LDO_MODE_OPM,
570 	[REGULATOR_MODE_FAST]    = PMIC530_LDO_MODE_HPM,
571 };
572 
573 static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode)
574 {
575 	unsigned int mode;
576 
577 	switch (rpmh_mode) {
578 	case RPMH_REGULATOR_MODE_HPM:
579 		mode = REGULATOR_MODE_NORMAL;
580 		break;
581 	case RPMH_REGULATOR_MODE_LPM:
582 		mode = REGULATOR_MODE_IDLE;
583 		break;
584 	case RPMH_REGULATOR_MODE_RET:
585 		mode = REGULATOR_MODE_STANDBY;
586 		break;
587 	default:
588 		mode = REGULATOR_MODE_INVALID;
589 		break;
590 	}
591 
592 	return mode;
593 }
594 
595 static unsigned int rpmh_regulator_pmic530_ldo_of_map_mode(unsigned int rpmh_mode)
596 {
597 	unsigned int mode;
598 
599 	switch (rpmh_mode) {
600 	case RPMH_REGULATOR_MODE_HPM:
601 		mode = REGULATOR_MODE_FAST;
602 		break;
603 	case RPMH_REGULATOR_MODE_AUTO:
604 		mode = REGULATOR_MODE_NORMAL;
605 		break;
606 	case RPMH_REGULATOR_MODE_LPM:
607 		mode = REGULATOR_MODE_IDLE;
608 		break;
609 	case RPMH_REGULATOR_MODE_RET:
610 		mode = REGULATOR_MODE_STANDBY;
611 		break;
612 	default:
613 		mode = REGULATOR_MODE_INVALID;
614 		break;
615 	}
616 	return mode;
617 }
618 
619 static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = {
620 	[REGULATOR_MODE_INVALID] = -EINVAL,
621 	[REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION,
622 	[REGULATOR_MODE_IDLE]    = PMIC4_SMPS_MODE_PFM,
623 	[REGULATOR_MODE_NORMAL]  = PMIC4_SMPS_MODE_AUTO,
624 	[REGULATOR_MODE_FAST]    = PMIC4_SMPS_MODE_PWM,
625 };
626 
627 static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = {
628 	[REGULATOR_MODE_INVALID] = -EINVAL,
629 	[REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION,
630 	[REGULATOR_MODE_IDLE]    = PMIC5_SMPS_MODE_PFM,
631 	[REGULATOR_MODE_NORMAL]  = PMIC5_SMPS_MODE_AUTO,
632 	[REGULATOR_MODE_FAST]    = PMIC5_SMPS_MODE_PWM,
633 };
634 
635 static unsigned int
636 rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode)
637 {
638 	unsigned int mode;
639 
640 	switch (rpmh_mode) {
641 	case RPMH_REGULATOR_MODE_HPM:
642 		mode = REGULATOR_MODE_FAST;
643 		break;
644 	case RPMH_REGULATOR_MODE_AUTO:
645 		mode = REGULATOR_MODE_NORMAL;
646 		break;
647 	case RPMH_REGULATOR_MODE_LPM:
648 		mode = REGULATOR_MODE_IDLE;
649 		break;
650 	case RPMH_REGULATOR_MODE_RET:
651 		mode = REGULATOR_MODE_STANDBY;
652 		break;
653 	default:
654 		mode = REGULATOR_MODE_INVALID;
655 		break;
656 	}
657 
658 	return mode;
659 }
660 
661 static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = {
662 	[REGULATOR_MODE_INVALID] = -EINVAL,
663 	[REGULATOR_MODE_STANDBY] = -EINVAL,
664 	[REGULATOR_MODE_IDLE]    = PMIC4_BOB_MODE_PFM,
665 	[REGULATOR_MODE_NORMAL]  = PMIC4_BOB_MODE_AUTO,
666 	[REGULATOR_MODE_FAST]    = PMIC4_BOB_MODE_PWM,
667 };
668 
669 static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = {
670 	[REGULATOR_MODE_INVALID] = -EINVAL,
671 	[REGULATOR_MODE_STANDBY] = -EINVAL,
672 	[REGULATOR_MODE_IDLE]    = PMIC5_BOB_MODE_PFM,
673 	[REGULATOR_MODE_NORMAL]  = PMIC5_BOB_MODE_AUTO,
674 	[REGULATOR_MODE_FAST]    = PMIC5_BOB_MODE_PWM,
675 };
676 
677 static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode)
678 {
679 	unsigned int mode;
680 
681 	switch (rpmh_mode) {
682 	case RPMH_REGULATOR_MODE_HPM:
683 		mode = REGULATOR_MODE_FAST;
684 		break;
685 	case RPMH_REGULATOR_MODE_AUTO:
686 		mode = REGULATOR_MODE_NORMAL;
687 		break;
688 	case RPMH_REGULATOR_MODE_LPM:
689 		mode = REGULATOR_MODE_IDLE;
690 		break;
691 	default:
692 		mode = REGULATOR_MODE_INVALID;
693 		break;
694 	}
695 
696 	return mode;
697 }
698 
699 static const struct rpmh_vreg_hw_data pmic4_pldo = {
700 	.regulator_type = VRM,
701 	.ops = &rpmh_regulator_vrm_drms_ops,
702 	.voltage_ranges = (struct linear_range[]) {
703 		REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),
704 	},
705 	.n_linear_ranges = 1,
706 	.n_voltages = 256,
707 	.hpm_min_load_uA = 10000,
708 	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
709 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
710 };
711 
712 static const struct rpmh_vreg_hw_data pmic4_pldo_lv = {
713 	.regulator_type = VRM,
714 	.ops = &rpmh_regulator_vrm_drms_ops,
715 	.voltage_ranges = (struct linear_range[]) {
716 	       REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),
717 	},
718 	.n_linear_ranges = 1,
719 	.n_voltages = 128,
720 	.hpm_min_load_uA = 10000,
721 	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
722 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
723 };
724 
725 static const struct rpmh_vreg_hw_data pmic4_nldo = {
726 	.regulator_type = VRM,
727 	.ops = &rpmh_regulator_vrm_drms_ops,
728 	.voltage_ranges = (struct linear_range[]) {
729 		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
730 	},
731 	.n_linear_ranges = 1,
732 	.n_voltages = 128,
733 	.hpm_min_load_uA = 30000,
734 	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
735 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
736 };
737 
738 static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = {
739 	.regulator_type = VRM,
740 	.ops = &rpmh_regulator_vrm_ops,
741 	.voltage_ranges = (struct linear_range[]) {
742 		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
743 	},
744 	.n_linear_ranges = 1,
745 	.n_voltages = 216,
746 	.pmic_mode_map = pmic_mode_map_pmic4_smps,
747 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
748 };
749 
750 static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = {
751 	.regulator_type = VRM,
752 	.ops = &rpmh_regulator_vrm_ops,
753 	.voltage_ranges = (struct linear_range[]) {
754 		REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),
755 	},
756 	.n_linear_ranges = 1,
757 	.n_voltages = 259,
758 	.pmic_mode_map = pmic_mode_map_pmic4_smps,
759 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
760 };
761 
762 static const struct rpmh_vreg_hw_data pmic4_bob = {
763 	.regulator_type = VRM,
764 	.ops = &rpmh_regulator_vrm_bypass_ops,
765 	.voltage_ranges = (struct linear_range[]) {
766 		REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),
767 	},
768 	.n_linear_ranges = 1,
769 	.n_voltages = 84,
770 	.pmic_mode_map = pmic_mode_map_pmic4_bob,
771 	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
772 };
773 
774 static const struct rpmh_vreg_hw_data pmic4_lvs = {
775 	.regulator_type = XOB,
776 	.ops = &rpmh_regulator_xob_ops,
777 	/* LVS hardware does not support voltage or mode configuration. */
778 };
779 
780 static const struct rpmh_vreg_hw_data pmic5_pldo = {
781 	.regulator_type = VRM,
782 	.ops = &rpmh_regulator_vrm_drms_ops,
783 	.voltage_ranges = (struct linear_range[]) {
784 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
785 	},
786 	.n_linear_ranges = 1,
787 	.n_voltages = 256,
788 	.hpm_min_load_uA = 10000,
789 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
790 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
791 };
792 
793 static const struct rpmh_vreg_hw_data pmic5_pldo_lv = {
794 	.regulator_type = VRM,
795 	.ops = &rpmh_regulator_vrm_drms_ops,
796 	.voltage_ranges = (struct linear_range[]) {
797 		REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),
798 	},
799 	.n_linear_ranges = 1,
800 	.n_voltages = 63,
801 	.hpm_min_load_uA = 10000,
802 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
803 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
804 };
805 
806 static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = {
807 	.regulator_type = VRM,
808 	.ops = &rpmh_regulator_vrm_drms_ops,
809 	.voltage_ranges = (struct linear_range[]) {
810 		REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000),
811 	},
812 	.n_linear_ranges = 1,
813 	.n_voltages = 188,
814 	.hpm_min_load_uA = 10000,
815 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
816 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
817 };
818 
819 static const struct rpmh_vreg_hw_data pmic5_pldo502 = {
820 	.regulator_type = VRM,
821 	.ops = &rpmh_regulator_vrm_ops,
822 	.voltage_ranges = (struct linear_range[]) {
823 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
824 	},
825 	.n_linear_ranges = 1,
826 	.n_voltages = 256,
827 	.pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm,
828 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
829 };
830 
831 static const struct rpmh_vreg_hw_data pmic5_pldo502ln = {
832 	.regulator_type = VRM,
833 	.ops = &rpmh_regulator_vrm_ops,
834 	.voltage_ranges = (struct linear_range[]) {
835 		REGULATOR_LINEAR_RANGE(1800000, 0,  2,  200000),
836 		REGULATOR_LINEAR_RANGE(2608000, 3,  28, 16000),
837 		REGULATOR_LINEAR_RANGE(3104000, 29, 30, 96000),
838 		REGULATOR_LINEAR_RANGE(3312000, 31, 31, 0),
839 	},
840 	.n_linear_ranges = 4,
841 	.n_voltages = 32,
842 	.pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm,
843 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
844 };
845 
846 static const struct rpmh_vreg_hw_data pmic5_nldo = {
847 	.regulator_type = VRM,
848 	.ops = &rpmh_regulator_vrm_drms_ops,
849 	.voltage_ranges = (struct linear_range[]) {
850 		REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),
851 	},
852 	.n_linear_ranges = 1,
853 	.n_voltages = 124,
854 	.hpm_min_load_uA = 30000,
855 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
856 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
857 };
858 
859 static const struct rpmh_vreg_hw_data pmic5_nldo515 = {
860 	.regulator_type = VRM,
861 	.ops = &rpmh_regulator_vrm_drms_ops,
862 	.voltage_ranges = (struct linear_range[]) {
863 		REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000),
864 	},
865 	.n_linear_ranges = 1,
866 	.n_voltages = 211,
867 	.hpm_min_load_uA = 30000,
868 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
869 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
870 };
871 
872 static const struct rpmh_vreg_hw_data pmic5_nldo502 = {
873 	.regulator_type = VRM,
874 	.ops = &rpmh_regulator_vrm_drms_ops,
875 	.voltage_ranges = (struct linear_range[]) {
876 		REGULATOR_LINEAR_RANGE(528000, 0, 127, 8000),
877 	},
878 	.n_linear_ranges = 1,
879 	.n_voltages = 128,
880 	.hpm_min_load_uA = 30000,
881 	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
882 	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
883 };
884 
885 static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = {
886 	.regulator_type = VRM,
887 	.ops = &rpmh_regulator_vrm_ops,
888 	.voltage_ranges = (struct linear_range[]) {
889 		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
890 	},
891 	.n_linear_ranges = 1,
892 	.n_voltages = 216,
893 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
894 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
895 };
896 
897 static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {
898 	.regulator_type = VRM,
899 	.ops = &rpmh_regulator_vrm_ops,
900 	.voltage_ranges = (struct linear_range[]) {
901 		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
902 	},
903 	.n_linear_ranges = 1,
904 	.n_voltages = 264,
905 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
906 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
907 };
908 
909 static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = {
910 	.regulator_type = VRM,
911 	.ops = &rpmh_regulator_vrm_ops,
912 	.voltage_ranges = (struct linear_range[]) {
913 		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
914 	},
915 	.n_linear_ranges = 1,
916 	.n_voltages = 264,
917 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
918 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
919 };
920 
921 static const struct rpmh_vreg_hw_data pmic5_ftsmps525 = {
922 	.regulator_type = VRM,
923 	.ops = &rpmh_regulator_vrm_ops,
924 	.voltage_ranges = (struct linear_range[]) {
925 		REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000),
926 		REGULATOR_LINEAR_RANGE(1376000, 268, 438, 8000),
927 	},
928 	.n_linear_ranges = 2,
929 	.n_voltages = 439,
930 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
931 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
932 };
933 
934 static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = {
935 	.regulator_type = VRM,
936 	.ops = &rpmh_regulator_vrm_ops,
937 	.voltage_ranges = (struct linear_range[]) {
938 		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
939 	},
940 	.n_linear_ranges = 1,
941 	.n_voltages = 215,
942 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
943 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
944 };
945 
946 static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {
947 	.regulator_type = VRM,
948 	.ops = &rpmh_regulator_vrm_ops,
949 	.voltage_ranges = (struct linear_range[]) {
950 		REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),
951 	},
952 	.n_linear_ranges = 1,
953 	.n_voltages = 236,
954 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
955 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
956 };
957 
958 static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = {
959 	.regulator_type = VRM,
960 	.ops = &rpmh_regulator_vrm_ops,
961 	.voltage_ranges = (struct linear_range[]) {
962 		REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000),
963 	},
964 	.n_linear_ranges = 1,
965 	.n_voltages = 5,
966 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
967 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
968 };
969 
970 static const struct rpmh_vreg_hw_data pmic5_bob = {
971 	.regulator_type = VRM,
972 	.ops = &rpmh_regulator_vrm_bypass_ops,
973 	.voltage_ranges = (struct linear_range[]) {
974 		REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000),
975 	},
976 	.n_linear_ranges = 1,
977 	.n_voltages = 32,
978 	.pmic_mode_map = pmic_mode_map_pmic5_bob,
979 	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
980 };
981 
982 static const struct rpmh_vreg_hw_data pmic5_nldo530 = {
983 	.regulator_type = VRM,
984 	.ops = &rpmh_regulator_vrm_drms_ops,
985 	.voltage_ranges = (struct linear_range[]) {
986 		REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000),
987 	},
988 	.n_linear_ranges = 1,
989 	.n_voltages = 211,
990 	.hpm_min_load_uA = 30000,
991 	.pmic_mode_map = pmic_mode_map_pmic530_ldo,
992 	.of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode,
993 };
994 
995 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp150 = {
996 	.regulator_type = VRM,
997 	.ops = &rpmh_regulator_vrm_drms_ops,
998 	.voltage_ranges = (struct linear_range[]) {
999 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
1000 	},
1001 	.n_linear_ranges = 1,
1002 	.n_voltages = 256,
1003 	.hpm_min_load_uA = 10000,
1004 	.pmic_mode_map = pmic_mode_map_pmic530_ldo,
1005 	.of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode,
1006 };
1007 
1008 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp300 = {
1009 	.regulator_type = VRM,
1010 	.ops = &rpmh_regulator_vrm_drms_ops,
1011 	.voltage_ranges = (struct linear_range[]) {
1012 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
1013 	},
1014 	.n_linear_ranges = 1,
1015 	.n_voltages = 256,
1016 	.hpm_min_load_uA = 20000,
1017 	.pmic_mode_map = pmic_mode_map_pmic530_ldo,
1018 	.of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode,
1019 };
1020 
1021 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp600 = {
1022 	.regulator_type = VRM,
1023 	.ops = &rpmh_regulator_vrm_drms_ops,
1024 	.voltage_ranges = (struct linear_range[]) {
1025 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
1026 	},
1027 	.n_linear_ranges = 1,
1028 	.n_voltages = 256,
1029 	.hpm_min_load_uA = 40000,
1030 	.pmic_mode_map = pmic_mode_map_pmic530_ldo,
1031 	.of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode,
1032 };
1033 
1034 static const struct rpmh_vreg_hw_data pmic5_ftsmps530 = {
1035 	.regulator_type = VRM,
1036 	.ops = &rpmh_regulator_vrm_ops,
1037 	.voltage_ranges = (struct linear_range[]) {
1038 		REGULATOR_LINEAR_RANGE(252000, 0, 305, 4000),
1039 		REGULATOR_LINEAR_RANGE(1480000, 306, 464, 8000),
1040 	},
1041 	.n_linear_ranges = 2,
1042 	.n_voltages = 465,
1043 	.pmic_mode_map = pmic_mode_map_pmic5_smps,
1044 	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
1045 };
1046 
1047 #define RPMH_VREG(_name, _vreg_hw_type, _index, _hw_data, _supply_name) \
1048 { \
1049 	.name		= _name, \
1050 	.vreg_hw_type	= _vreg_hw_type, \
1051 	.index		= _index, \
1052 	.hw_data	= _hw_data, \
1053 	.supply_name	= _supply_name, \
1054 }
1055 
1056 static const struct rpmh_vreg_init_data pm8998_vreg_data[] = {
1057 	RPMH_VREG("smps1",  SMPS, 1,  &pmic4_ftsmps426, "vdd-s1"),
1058 	RPMH_VREG("smps2",  SMPS, 2,  &pmic4_ftsmps426, "vdd-s2"),
1059 	RPMH_VREG("smps3",  SMPS, 3,  &pmic4_hfsmps3,   "vdd-s3"),
1060 	RPMH_VREG("smps4",  SMPS, 4,  &pmic4_hfsmps3,   "vdd-s4"),
1061 	RPMH_VREG("smps5",  SMPS, 5,  &pmic4_hfsmps3,   "vdd-s5"),
1062 	RPMH_VREG("smps6",  SMPS, 6,  &pmic4_ftsmps426, "vdd-s6"),
1063 	RPMH_VREG("smps7",  SMPS, 7,  &pmic4_ftsmps426, "vdd-s7"),
1064 	RPMH_VREG("smps8",  SMPS, 8,  &pmic4_ftsmps426, "vdd-s8"),
1065 	RPMH_VREG("smps9",  SMPS, 9,  &pmic4_ftsmps426, "vdd-s9"),
1066 	RPMH_VREG("smps10", SMPS, 10, &pmic4_ftsmps426, "vdd-s10"),
1067 	RPMH_VREG("smps11", SMPS, 11, &pmic4_ftsmps426, "vdd-s11"),
1068 	RPMH_VREG("smps12", SMPS, 12, &pmic4_ftsmps426, "vdd-s12"),
1069 	RPMH_VREG("smps13", SMPS, 13, &pmic4_ftsmps426, "vdd-s13"),
1070 	RPMH_VREG("ldo1",   LDO,  1,  &pmic4_nldo,      "vdd-l1-l27"),
1071 	RPMH_VREG("ldo2",   LDO,  2,  &pmic4_nldo,      "vdd-l2-l8-l17"),
1072 	RPMH_VREG("ldo3",   LDO,  3,  &pmic4_nldo,      "vdd-l3-l11"),
1073 	RPMH_VREG("ldo4",   LDO,  4,  &pmic4_nldo,      "vdd-l4-l5"),
1074 	RPMH_VREG("ldo5",   LDO,  5,  &pmic4_nldo,      "vdd-l4-l5"),
1075 	RPMH_VREG("ldo6",   LDO,  6,  &pmic4_pldo,      "vdd-l6"),
1076 	RPMH_VREG("ldo7",   LDO,  7,  &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
1077 	RPMH_VREG("ldo8",   LDO,  8,  &pmic4_nldo,      "vdd-l2-l8-l17"),
1078 	RPMH_VREG("ldo9",   LDO,  9,  &pmic4_pldo,      "vdd-l9"),
1079 	RPMH_VREG("ldo10",  LDO,  10, &pmic4_pldo,      "vdd-l10-l23-l25"),
1080 	RPMH_VREG("ldo11",  LDO,  11, &pmic4_nldo,      "vdd-l3-l11"),
1081 	RPMH_VREG("ldo12",  LDO,  12, &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
1082 	RPMH_VREG("ldo13",  LDO,  13, &pmic4_pldo,      "vdd-l13-l19-l21"),
1083 	RPMH_VREG("ldo14",  LDO,  14, &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
1084 	RPMH_VREG("ldo15",  LDO,  15, &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
1085 	RPMH_VREG("ldo16",  LDO,  16, &pmic4_pldo,      "vdd-l16-l28"),
1086 	RPMH_VREG("ldo17",  LDO,  17, &pmic4_nldo,      "vdd-l2-l8-l17"),
1087 	RPMH_VREG("ldo18",  LDO,  18, &pmic4_pldo,      "vdd-l18-l22"),
1088 	RPMH_VREG("ldo19",  LDO,  19, &pmic4_pldo,      "vdd-l13-l19-l21"),
1089 	RPMH_VREG("ldo20",  LDO,  20, &pmic4_pldo,      "vdd-l20-l24"),
1090 	RPMH_VREG("ldo21",  LDO,  21, &pmic4_pldo,      "vdd-l13-l19-l21"),
1091 	RPMH_VREG("ldo22",  LDO,  22, &pmic4_pldo,      "vdd-l18-l22"),
1092 	RPMH_VREG("ldo23",  LDO,  23, &pmic4_pldo,      "vdd-l10-l23-l25"),
1093 	RPMH_VREG("ldo24",  LDO,  24, &pmic4_pldo,      "vdd-l20-l24"),
1094 	RPMH_VREG("ldo25",  LDO,  25, &pmic4_pldo,      "vdd-l10-l23-l25"),
1095 	RPMH_VREG("ldo26",  LDO,  26, &pmic4_nldo,      "vdd-l26"),
1096 	RPMH_VREG("ldo27",  LDO,  27, &pmic4_nldo,      "vdd-l1-l27"),
1097 	RPMH_VREG("ldo28",  LDO,  28, &pmic4_pldo,      "vdd-l16-l28"),
1098 	RPMH_VREG("lvs1",   VS,   1,  &pmic4_lvs,       "vin-lvs-1-2"),
1099 	RPMH_VREG("lvs2",   VS,   2,  &pmic4_lvs,       "vin-lvs-1-2"),
1100 	{}
1101 };
1102 
1103 static const struct rpmh_vreg_init_data pmau0102_vreg_data[] = {
1104 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps527,  "vdd-s1"),
1105 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps527,  "vdd-s2"),
1106 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps527,  "vdd-s3"),
1107 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_ftsmps527,  "vdd-s4"),
1108 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_ftsmps527,  "vdd-s5"),
1109 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps527,  "vdd-s6"),
1110 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps527,  "vdd-s7"),
1111 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps527,  "vdd-s8"),
1112 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo515,    "vdd-l1"),
1113 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_nldo515,    "vdd-l2"),
1114 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_pldo515_mv, "vdd-l3"),
1115 	{}
1116 };
1117 
1118 static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = {
1119 	RPMH_VREG("smps1",  SMPS, 1, &pmic5_ftsmps510,  "vdd-s1"),
1120 	{}
1121 };
1122 
1123 static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = {
1124 	RPMH_VREG("bob",    BOB,  1, &pmic4_bob,       "vdd-bob"),
1125 	{}
1126 };
1127 
1128 static const struct rpmh_vreg_init_data pm8005_vreg_data[] = {
1129 	RPMH_VREG("smps1",  SMPS, 1, &pmic4_ftsmps426, "vdd-s1"),
1130 	RPMH_VREG("smps2",  SMPS, 2, &pmic4_ftsmps426, "vdd-s2"),
1131 	RPMH_VREG("smps3",  SMPS, 3, &pmic4_ftsmps426, "vdd-s3"),
1132 	RPMH_VREG("smps4",  SMPS, 4, &pmic4_ftsmps426, "vdd-s4"),
1133 	{}
1134 };
1135 
1136 static const struct rpmh_vreg_init_data pm8150_vreg_data[] = {
1137 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps510, "vdd-s1"),
1138 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps510, "vdd-s2"),
1139 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps510, "vdd-s3"),
1140 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_hfsmps510, "vdd-s4"),
1141 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_hfsmps510, "vdd-s5"),
1142 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1143 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps510, "vdd-s7"),
1144 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps510, "vdd-s8"),
1145 	RPMH_VREG("smps9",  SMPS, 9,  &pmic5_ftsmps510, "vdd-s9"),
1146 	RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"),
1147 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      "vdd-l1-l8-l11"),
1148 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,      "vdd-l2-l10"),
1149 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1150 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1151 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1152 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo,      "vdd-l6-l9"),
1153 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,      "vdd-l7-l12-l14-l15"),
1154 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_nldo,      "vdd-l1-l8-l11"),
1155 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_nldo,      "vdd-l6-l9"),
1156 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      "vdd-l2-l10"),
1157 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_nldo,      "vdd-l1-l8-l11"),
1158 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1159 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_pldo,      "vdd-l13-l16-l17"),
1160 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1161 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1162 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_pldo,      "vdd-l13-l16-l17"),
1163 	RPMH_VREG("ldo17",  LDO,  17, &pmic5_pldo,      "vdd-l13-l16-l17"),
1164 	RPMH_VREG("ldo18",  LDO,  18, &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1165 	{}
1166 };
1167 
1168 static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = {
1169 	RPMH_VREG("smps1",  SMPS, 1, &pmic5_ftsmps510, "vdd-s1"),
1170 	RPMH_VREG("smps2",  SMPS, 2, &pmic5_ftsmps510, "vdd-s2"),
1171 	RPMH_VREG("smps3",  SMPS, 3, &pmic5_ftsmps510, "vdd-s3"),
1172 	RPMH_VREG("smps4",  SMPS, 4, &pmic5_ftsmps510, "vdd-s4"),
1173 	RPMH_VREG("smps5",  SMPS, 5, &pmic5_ftsmps510, "vdd-s5"),
1174 	RPMH_VREG("smps6",  SMPS, 6, &pmic5_ftsmps510, "vdd-s6"),
1175 	RPMH_VREG("smps7",  SMPS, 7, &pmic5_ftsmps510, "vdd-s7"),
1176 	RPMH_VREG("smps8",  SMPS, 8, &pmic5_hfsmps510, "vdd-s8"),
1177 	RPMH_VREG("ldo1",   LDO,  1, &pmic5_pldo_lv,   "vdd-l1-l8"),
1178 	RPMH_VREG("ldo2",   LDO,  2, &pmic5_nldo,      "vdd-l2-l3"),
1179 	RPMH_VREG("ldo3",   LDO,  3, &pmic5_nldo,      "vdd-l2-l3"),
1180 	RPMH_VREG("ldo4",   LDO,  4, &pmic5_pldo,      "vdd-l4-l5-l6"),
1181 	RPMH_VREG("ldo5",   LDO,  5, &pmic5_pldo,      "vdd-l4-l5-l6"),
1182 	RPMH_VREG("ldo6",   LDO,  6, &pmic5_pldo,      "vdd-l4-l5-l6"),
1183 	RPMH_VREG("ldo7",   LDO,  7, &pmic5_pldo,      "vdd-l7-l11"),
1184 	RPMH_VREG("ldo8",   LDO,  8, &pmic5_pldo_lv,   "vdd-l1-l8"),
1185 	RPMH_VREG("ldo9",   LDO,  9, &pmic5_pldo,      "vdd-l9-l10"),
1186 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      "vdd-l9-l10"),
1187 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo,      "vdd-l7-l11"),
1188 	RPMH_VREG("bob",    BOB,  1, &pmic5_bob,       "vdd-bob"),
1189 	{}
1190 };
1191 
1192 static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = {
1193 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps510, "vdd-s1"),
1194 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps510, "vdd-s2"),
1195 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps510, "vdd-s3"),
1196 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_hfsmps510, "vdd-s4"),
1197 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_hfsmps510, "vdd-s5"),
1198 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1199 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps510, "vdd-s7"),
1200 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps510, "vdd-s8"),
1201 	RPMH_VREG("smps9",  SMPS, 9,  &pmic5_ftsmps510, "vdd-s9"),
1202 	RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"),
1203 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      "vdd-l1-l8-l11"),
1204 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,      "vdd-l2-l10"),
1205 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1206 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1207 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1208 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo,      "vdd-l6-l9"),
1209 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1210 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_nldo,      "vdd-l1-l8-l11"),
1211 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_nldo,      "vdd-l6-l9"),
1212 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      "vdd-l2-l10"),
1213 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_nldo,      "vdd-l1-l8-l11"),
1214 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1215 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_pldo,      "vdd-l13-l16-l17"),
1216 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1217 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
1218 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_pldo,      "vdd-l13-l16-l17"),
1219 	RPMH_VREG("ldo17",  LDO,  17, &pmic5_pldo,      "vdd-l13-l16-l17"),
1220 	RPMH_VREG("ldo18",  LDO,  18, &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
1221 	{}
1222 };
1223 
1224 static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = {
1225 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps527,  "vdd-s1"),
1226 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps527,  "vdd-s2"),
1227 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps527,  "vdd-s3"),
1228 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_ftsmps527,  "vdd-s4"),
1229 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_ftsmps527,  "vdd-s5"),
1230 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps527,  "vdd-s6"),
1231 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps527,  "vdd-s7"),
1232 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps527,  "vdd-s8"),
1233 	RPMH_VREG("smps9",  SMPS, 9,  &pmic5_ftsmps527,  "vdd-s9"),
1234 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo515,    "vdd-s9"),
1235 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_nldo515,    "vdd-l2-l3"),
1236 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo515,    "vdd-l2-l3"),
1237 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo515,    "vdd-s9"),
1238 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo515,    "vdd-s9"),
1239 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo515,    "vdd-l6-l7"),
1240 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_nldo515,    "vdd-l6-l7"),
1241 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_pldo515_mv, "vdd-l8-l9"),
1242 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_pldo,       "vdd-l8-l9"),
1243 	{}
1244 };
1245 
1246 static const struct rpmh_vreg_init_data pm8350_vreg_data[] = {
1247 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps510, "vdd-s1"),
1248 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps510, "vdd-s2"),
1249 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps510, "vdd-s3"),
1250 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_ftsmps510, "vdd-s4"),
1251 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_ftsmps510, "vdd-s5"),
1252 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1253 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps510, "vdd-s7"),
1254 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps510, "vdd-s8"),
1255 	RPMH_VREG("smps9",  SMPS, 9,  &pmic5_ftsmps510, "vdd-s9"),
1256 	RPMH_VREG("smps10", SMPS, 10, &pmic5_hfsmps510, "vdd-s10"),
1257 	RPMH_VREG("smps11", SMPS, 11, &pmic5_hfsmps510, "vdd-s11"),
1258 	RPMH_VREG("smps12", SMPS, 12, &pmic5_hfsmps510, "vdd-s12"),
1259 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      "vdd-l1-l4"),
1260 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,      "vdd-l2-l7"),
1261 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo,      "vdd-l3-l5"),
1262 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      "vdd-l1-l4"),
1263 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo,      "vdd-l3-l5"),
1264 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo,      "vdd-l6-l9-l10"),
1265 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,      "vdd-l2-l7"),
1266 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_nldo,      "vdd-l8"),
1267 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_nldo,      "vdd-l6-l9-l10"),
1268 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_nldo,      "vdd-l6-l9-l10"),
1269 	{}
1270 };
1271 
1272 static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = {
1273 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_hfsmps515, "vdd-s1"),
1274 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps510, "vdd-s2"),
1275 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps510, "vdd-s3"),
1276 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_ftsmps510, "vdd-s4"),
1277 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_ftsmps510, "vdd-s5"),
1278 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1279 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps510, "vdd-s7"),
1280 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_ftsmps510, "vdd-s8"),
1281 	RPMH_VREG("smps9",  SMPS, 9,  &pmic5_ftsmps510, "vdd-s9"),
1282 	RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"),
1283 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_pldo_lv,   "vdd-l1-l12"),
1284 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo_lv,   "vdd-l2-l8"),
1285 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1286 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1287 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1288 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_pldo,      "vdd-l6-l9-l11"),
1289 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1290 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_pldo_lv,   "vdd-l2-l8"),
1291 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_pldo,      "vdd-l6-l9-l11"),
1292 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_nldo,      "vdd-l10"),
1293 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo,      "vdd-l6-l9-l11"),
1294 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_pldo_lv,   "vdd-l1-l12"),
1295 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1296 	RPMH_VREG("bob",    BOB,  1,  &pmic5_bob,       "vdd-bob"),
1297 	{}
1298 };
1299 
1300 static const struct rpmh_vreg_init_data pm8450_vreg_data[] = {
1301 	RPMH_VREG("smps1",  SMPS, 1, &pmic5_ftsmps520, "vdd-s1"),
1302 	RPMH_VREG("smps2",  SMPS, 2, &pmic5_ftsmps520, "vdd-s2"),
1303 	RPMH_VREG("smps3",  SMPS, 3, &pmic5_ftsmps520, "vdd-s3"),
1304 	RPMH_VREG("smps4",  SMPS, 4, &pmic5_ftsmps520, "vdd-s4"),
1305 	RPMH_VREG("smps5",  SMPS, 5, &pmic5_ftsmps520, "vdd-s5"),
1306 	RPMH_VREG("smps6",  SMPS, 6, &pmic5_ftsmps520, "vdd-s6"),
1307 	RPMH_VREG("ldo1",   LDO,  1, &pmic5_nldo,      "vdd-l1"),
1308 	RPMH_VREG("ldo2",   LDO,  2, &pmic5_nldo,      "vdd-l2"),
1309 	RPMH_VREG("ldo3",   LDO,  3, &pmic5_nldo,      "vdd-l3"),
1310 	RPMH_VREG("ldo4",   LDO,  4, &pmic5_pldo_lv,   "vdd-l4"),
1311 	{}
1312 };
1313 
1314 static const struct rpmh_vreg_init_data pm8550_vreg_data[] = {
1315 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo515,    "vdd-l1-l4-l10"),
1316 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,       "vdd-l2-l13-l14"),
1317 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo515,    "vdd-l3"),
1318 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo515,    "vdd-l1-l4-l10"),
1319 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_pldo,       "vdd-l5-l16"),
1320 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_pldo,       "vdd-l6-l7"),
1321 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,       "vdd-l6-l7"),
1322 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_pldo,       "vdd-l8-l9"),
1323 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_pldo,       "vdd-l8-l9"),
1324 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_nldo515,    "vdd-l1-l4-l10"),
1325 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_nldo515,    "vdd-l11"),
1326 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_nldo515,    "vdd-l12"),
1327 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_pldo,       "vdd-l2-l13-l14"),
1328 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_pldo,       "vdd-l2-l13-l14"),
1329 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_nldo515,    "vdd-l15"),
1330 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_pldo,       "vdd-l5-l16"),
1331 	RPMH_VREG("ldo17",  LDO,  17, &pmic5_pldo,       "vdd-l17"),
1332 	RPMH_VREG("bob1",   BOB,  1,  &pmic5_bob,        "vdd-bob1"),
1333 	RPMH_VREG("bob2",   BOB,  2,  &pmic5_bob,        "vdd-bob2"),
1334 	{}
1335 };
1336 
1337 static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = {
1338 	RPMH_VREG("smps1",  SMPS, 1, &pmic5_ftsmps525, "vdd-s1"),
1339 	RPMH_VREG("smps2",  SMPS, 2, &pmic5_ftsmps525, "vdd-s2"),
1340 	RPMH_VREG("smps3",  SMPS, 3, &pmic5_ftsmps525, "vdd-s3"),
1341 	RPMH_VREG("smps4",  SMPS, 4, &pmic5_ftsmps525, "vdd-s4"),
1342 	RPMH_VREG("smps5",  SMPS, 5, &pmic5_ftsmps525, "vdd-s5"),
1343 	RPMH_VREG("smps6",  SMPS, 6, &pmic5_ftsmps525, "vdd-s6"),
1344 	RPMH_VREG("ldo1",   LDO,  1, &pmic5_nldo515,   "vdd-l1"),
1345 	RPMH_VREG("ldo2",   LDO,  2, &pmic5_nldo515,   "vdd-l2"),
1346 	RPMH_VREG("ldo3",   LDO,  3, &pmic5_nldo515,   "vdd-l3"),
1347 	{}
1348 };
1349 
1350 static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = {
1351 	RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"),
1352 	RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"),
1353 	RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"),
1354 	RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"),
1355 	RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"),
1356 	RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"),
1357 	RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps525, "vdd-s7"),
1358 	RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps525, "vdd-s8"),
1359 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo515,   "vdd-l1"),
1360 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo515,   "vdd-l2"),
1361 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo515,   "vdd-l3"),
1362 	{}
1363 };
1364 
1365 static const struct rpmh_vreg_init_data pmc8380_vreg_data[] = {
1366 	RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"),
1367 	RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"),
1368 	RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"),
1369 	RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"),
1370 	RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"),
1371 	RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"),
1372 	RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps525, "vdd-s7"),
1373 	RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps525, "vdd-s8"),
1374 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo515,   "vdd-l1"),
1375 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo515,   "vdd-l2"),
1376 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo515,   "vdd-l3"),
1377 	{}
1378 };
1379 
1380 static const struct rpmh_vreg_init_data pm8009_vreg_data[] = {
1381 	RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps510, "vdd-s1"),
1382 	RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps515, "vdd-s2"),
1383 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo,      "vdd-l1"),
1384 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo,      "vdd-l2"),
1385 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo,      "vdd-l3"),
1386 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_nldo,      "vdd-l4"),
1387 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_pldo,      "vdd-l5-l6"),
1388 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_pldo,      "vdd-l5-l6"),
1389 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_pldo_lv,   "vdd-l7"),
1390 	{}
1391 };
1392 
1393 static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = {
1394 	RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps510, "vdd-s1"),
1395 	RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps515_1, "vdd-s2"),
1396 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo,      "vdd-l1"),
1397 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo,      "vdd-l2"),
1398 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo,      "vdd-l3"),
1399 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_nldo,      "vdd-l4"),
1400 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_pldo,      "vdd-l5-l6"),
1401 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_pldo,      "vdd-l5-l6"),
1402 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_pldo_lv,   "vdd-l7"),
1403 	{}
1404 };
1405 
1406 static const struct rpmh_vreg_init_data pm8010_vreg_data[] = {
1407 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo502,   "vdd-l1-l2"),
1408 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo502,   "vdd-l1-l2"),
1409 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_pldo502ln, "vdd-l3-l4"),
1410 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_pldo502ln, "vdd-l3-l4"),
1411 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_pldo502,   "vdd-l5"),
1412 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_pldo502ln, "vdd-l6"),
1413 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_pldo502,   "vdd-l7"),
1414 };
1415 
1416 static const struct rpmh_vreg_init_data pm6150_vreg_data[] = {
1417 	RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"),
1418 	RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"),
1419 	RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"),
1420 	RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"),
1421 	RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"),
1422 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo,      "vdd-l1"),
1423 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo,      "vdd-l2-l3"),
1424 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo,      "vdd-l2-l3"),
1425 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_nldo,      "vdd-l4-l7-l8"),
1426 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_pldo,      "vdd-l5-l16-l17-l18-l19"),
1427 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_nldo,      "vdd-l6"),
1428 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_nldo,      "vdd-l4-l7-l8"),
1429 	RPMH_VREG("ldo8",  LDO,  8, &pmic5_nldo,      "vdd-l4-l7-l8"),
1430 	RPMH_VREG("ldo9",  LDO,  9, &pmic5_nldo,      "vdd-l9"),
1431 	RPMH_VREG("ldo10", LDO,  10, &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1432 	RPMH_VREG("ldo11", LDO,  11, &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1433 	RPMH_VREG("ldo12", LDO,  12, &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1434 	RPMH_VREG("ldo13", LDO,  13, &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1435 	RPMH_VREG("ldo14", LDO,  14, &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1436 	RPMH_VREG("ldo15", LDO,  15, &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1437 	RPMH_VREG("ldo16", LDO,  16, &pmic5_pldo,      "vdd-l5-l16-l17-l18-l19"),
1438 	RPMH_VREG("ldo17", LDO,  17, &pmic5_pldo,      "vdd-l5-l16-l17-l18-l19"),
1439 	RPMH_VREG("ldo18", LDO,  18, &pmic5_pldo,      "vdd-l5-l16-l17-l18-l19"),
1440 	RPMH_VREG("ldo19", LDO,  19, &pmic5_pldo,      "vdd-l5-l16-l17-l18-l19"),
1441 	{}
1442 };
1443 
1444 static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = {
1445 	RPMH_VREG("smps1",  SMPS, 1, &pmic5_ftsmps510, "vdd-s1"),
1446 	RPMH_VREG("smps2",  SMPS, 2, &pmic5_ftsmps510, "vdd-s2"),
1447 	RPMH_VREG("smps3",  SMPS, 3, &pmic5_ftsmps510, "vdd-s3"),
1448 	RPMH_VREG("smps4",  SMPS, 4, &pmic5_ftsmps510, "vdd-s4"),
1449 	RPMH_VREG("smps5",  SMPS, 5, &pmic5_ftsmps510, "vdd-s5"),
1450 	RPMH_VREG("smps6",  SMPS, 6, &pmic5_ftsmps510, "vdd-s6"),
1451 	RPMH_VREG("smps7",  SMPS, 7, &pmic5_ftsmps510, "vdd-s7"),
1452 	RPMH_VREG("smps8",  SMPS, 8, &pmic5_hfsmps510, "vdd-s8"),
1453 	RPMH_VREG("ldo1",   LDO,  1, &pmic5_pldo_lv,   "vdd-l1-l8"),
1454 	RPMH_VREG("ldo2",   LDO,  2, &pmic5_nldo,      "vdd-l2-l3"),
1455 	RPMH_VREG("ldo3",   LDO,  3, &pmic5_nldo,      "vdd-l2-l3"),
1456 	RPMH_VREG("ldo4",   LDO,  4, &pmic5_pldo,      "vdd-l4-l5-l6"),
1457 	RPMH_VREG("ldo5",   LDO,  5, &pmic5_pldo,      "vdd-l4-l5-l6"),
1458 	RPMH_VREG("ldo6",   LDO,  6, &pmic5_pldo,      "vdd-l4-l5-l6"),
1459 	RPMH_VREG("ldo7",   LDO,  7, &pmic5_pldo,      "vdd-l7-l11"),
1460 	RPMH_VREG("ldo8",   LDO,  8, &pmic5_pldo,      "vdd-l1-l8"),
1461 	RPMH_VREG("ldo9",   LDO,  9, &pmic5_pldo,      "vdd-l9-l10"),
1462 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      "vdd-l9-l10"),
1463 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo,      "vdd-l7-l11"),
1464 	RPMH_VREG("bob",    BOB,  1, &pmic5_bob,       "vdd-bob"),
1465 	{}
1466 };
1467 
1468 static const struct rpmh_vreg_init_data pm6350_vreg_data[] = {
1469 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps510, NULL),
1470 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_hfsmps510, NULL),
1471 	/* smps3 - smps5 not configured */
1472 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      NULL),
1473 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,      NULL),
1474 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_pldo,      NULL),
1475 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      NULL),
1476 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_pldo,      NULL),
1477 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_pldo,      NULL),
1478 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,      NULL),
1479 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_pldo,      NULL),
1480 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_pldo,      NULL),
1481 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      NULL),
1482 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo,      NULL),
1483 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_pldo,      NULL),
1484 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_nldo,      NULL),
1485 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_pldo,      NULL),
1486 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_nldo,      NULL),
1487 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_nldo,      NULL),
1488 	/* ldo17 not configured */
1489 	RPMH_VREG("ldo18",  LDO,  18, &pmic5_nldo,      NULL),
1490 	RPMH_VREG("ldo19",  LDO,  19, &pmic5_nldo,      NULL),
1491 	RPMH_VREG("ldo20",  LDO,  20, &pmic5_nldo,      NULL),
1492 	RPMH_VREG("ldo21",  LDO,  21, &pmic5_nldo,      NULL),
1493 	RPMH_VREG("ldo22",  LDO,  22, &pmic5_nldo,      NULL),
1494 };
1495 
1496 static const struct rpmh_vreg_init_data pmcx0102_vreg_data[] = {
1497 	RPMH_VREG("smps1",   SMPS, 1,    &pmic5_ftsmps530, "vdd-s1"),
1498 	RPMH_VREG("smps2",   SMPS, 2,    &pmic5_ftsmps530, "vdd-s2"),
1499 	RPMH_VREG("smps3",   SMPS, 3,    &pmic5_ftsmps530, "vdd-s3"),
1500 	RPMH_VREG("smps4",   SMPS, 4,    &pmic5_ftsmps530, "vdd-s4"),
1501 	RPMH_VREG("smps5",   SMPS, 5,    &pmic5_ftsmps530, "vdd-s5"),
1502 	RPMH_VREG("smps6",   SMPS, 6,    &pmic5_ftsmps530, "vdd-s6"),
1503 	RPMH_VREG("smps7",   SMPS, 7,    &pmic5_ftsmps530, "vdd-s7"),
1504 	RPMH_VREG("smps8",   SMPS, 8,    &pmic5_ftsmps530, "vdd-s8"),
1505 	RPMH_VREG("smps9",   SMPS, 9,    &pmic5_ftsmps530, "vdd-s9"),
1506 	RPMH_VREG("smps10",  SMPS, 10,   &pmic5_ftsmps530, "vdd-s10"),
1507 	RPMH_VREG("ldo1",   LDO,  1,    &pmic5_nldo530,      "vdd-l1"),
1508 	RPMH_VREG("ldo2",   LDO,  2,    &pmic5_nldo530,      "vdd-l2"),
1509 	RPMH_VREG("ldo3",   LDO,  3,    &pmic5_nldo530,      "vdd-l3"),
1510 	RPMH_VREG("ldo4",   LDO,  4,    &pmic5_nldo530,      "vdd-l4"),
1511 	{}
1512 };
1513 
1514 static const struct rpmh_vreg_init_data pmh0101_vreg_data[] = {
1515 	RPMH_VREG("ldo1",   LDO, 1,  &pmic5_nldo530,      "vdd-l1-l4-l10"),
1516 	RPMH_VREG("ldo2",   LDO, 2,  &pmic5_pldo530_mvp300,      "vdd-l2-l13-l14"),
1517 	RPMH_VREG("ldo3",   LDO, 3,  &pmic5_nldo530,      "vdd-l3-l11"),
1518 	RPMH_VREG("ldo4",   LDO, 4,  &pmic5_nldo530,      "vdd-l1-l4-l10"),
1519 	RPMH_VREG("ldo5",   LDO, 5,  &pmic5_pldo530_mvp150,      "vdd-l5-l16"),
1520 	RPMH_VREG("ldo6",   LDO, 6,  &pmic5_pldo530_mvp300,      "vdd-l6-l7"),
1521 	RPMH_VREG("ldo7",   LDO, 7,  &pmic5_pldo530_mvp300,      "vdd-l6-l7"),
1522 	RPMH_VREG("ldo8",   LDO, 8,  &pmic5_pldo530_mvp150,      "vdd-l8-l9"),
1523 	RPMH_VREG("ldo9",   LDO, 9,  &pmic5_pldo515_mv,      "vdd-l8-l9"),
1524 	RPMH_VREG("ldo10",  LDO, 10, &pmic5_nldo530,      "vdd-l1-l4-l10"),
1525 	RPMH_VREG("ldo11",  LDO, 11, &pmic5_nldo530,      "vdd-l3-l11"),
1526 	RPMH_VREG("ldo12",  LDO, 12, &pmic5_nldo530,      "vdd-l12"),
1527 	RPMH_VREG("ldo13",  LDO, 13, &pmic5_pldo530_mvp150,     "vdd-l2-l13-l14"),
1528 	RPMH_VREG("ldo14",  LDO, 14, &pmic5_pldo530_mvp150,     "vdd-l2-l13-l14"),
1529 	RPMH_VREG("ldo15",  LDO, 15, &pmic5_nldo530,      "vdd-l15"),
1530 	RPMH_VREG("ldo16",  LDO, 16, &pmic5_pldo530_mvp600,      "vdd-l5-l16"),
1531 	RPMH_VREG("ldo17",  LDO, 17, &pmic5_pldo515_mv,   "vdd-l17"),
1532 	RPMH_VREG("ldo18",  LDO, 18, &pmic5_nldo530,      "vdd-l18"),
1533 	RPMH_VREG("bob1",   BOB, 1,  &pmic5_bob,          "vdd-bob1"),
1534 	RPMH_VREG("bob2",   BOB, 2,  &pmic5_bob,          "vdd-bob2"),
1535 	{}
1536 };
1537 
1538 static const struct rpmh_vreg_init_data pmh0104_vreg_data[] = {
1539 	RPMH_VREG("smps1",   SMPS, 1,    &pmic5_ftsmps530, "vdd-s1"),
1540 	RPMH_VREG("smps2",   SMPS, 2,    &pmic5_ftsmps530, "vdd-s2"),
1541 	RPMH_VREG("smps3",   SMPS, 3,    &pmic5_ftsmps530, "vdd-s3"),
1542 	RPMH_VREG("smps4",   SMPS, 4,    &pmic5_ftsmps530, "vdd-s4"),
1543 	{}
1544 };
1545 
1546 static const struct rpmh_vreg_init_data pmh0110_vreg_data[] = {
1547 	RPMH_VREG("smps1",   SMPS, 1,    &pmic5_ftsmps530, "vdd-s1"),
1548 	RPMH_VREG("smps2",   SMPS, 2,    &pmic5_ftsmps530, "vdd-s2"),
1549 	RPMH_VREG("smps3",   SMPS, 3,    &pmic5_ftsmps530, "vdd-s3"),
1550 	RPMH_VREG("smps4",   SMPS, 4,    &pmic5_ftsmps530, "vdd-s4"),
1551 	RPMH_VREG("smps5",   SMPS, 5,    &pmic5_ftsmps530, "vdd-s5"),
1552 	RPMH_VREG("smps6",   SMPS, 6,    &pmic5_ftsmps530, "vdd-s6"),
1553 	RPMH_VREG("smps7",   SMPS, 7,    &pmic5_ftsmps530, "vdd-s7"),
1554 	RPMH_VREG("smps8",   SMPS, 8,    &pmic5_ftsmps530, "vdd-s8"),
1555 	RPMH_VREG("smps9",   SMPS, 9,    &pmic5_ftsmps530, "vdd-s9"),
1556 	RPMH_VREG("smps10",  SMPS, 10,   &pmic5_ftsmps530, "vdd-s10"),
1557 	RPMH_VREG("ldo1",   LDO,  1,    &pmic5_nldo530,      "vdd-l1"),
1558 	RPMH_VREG("ldo2",   LDO,  2,    &pmic5_nldo530,      "vdd-l2"),
1559 	RPMH_VREG("ldo3",   LDO,  3,    &pmic5_nldo530,      "vdd-l3"),
1560 	RPMH_VREG("ldo4",   LDO,  4,    &pmic5_nldo530,      "vdd-l4"),
1561 	{}
1562 };
1563 
1564 static const struct rpmh_vreg_init_data pmx55_vreg_data[] = {
1565 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_ftsmps510, "vdd-s1"),
1566 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_hfsmps510, "vdd-s2"),
1567 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_hfsmps510, "vdd-s3"),
1568 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_hfsmps510, "vdd-s4"),
1569 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_hfsmps510, "vdd-s5"),
1570 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1571 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_hfsmps510, "vdd-s7"),
1572 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      "vdd-l1-l2"),
1573 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_nldo,      "vdd-l1-l2"),
1574 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo,      "vdd-l3-l9"),
1575 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      "vdd-l4-l12"),
1576 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_pldo,      "vdd-l5-l6"),
1577 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_pldo,      "vdd-l5-l6"),
1578 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_nldo,      "vdd-l7-l8"),
1579 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_nldo,      "vdd-l7-l8"),
1580 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_nldo,      "vdd-l3-l9"),
1581 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_pldo,      "vdd-l10-l11-l13"),
1582 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo,      "vdd-l10-l11-l13"),
1583 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_nldo,      "vdd-l4-l12"),
1584 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_pldo,      "vdd-l10-l11-l13"),
1585 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_nldo,      "vdd-l14"),
1586 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_nldo,      "vdd-l15"),
1587 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_pldo,      "vdd-l16"),
1588 	{}
1589 };
1590 
1591 static const struct rpmh_vreg_init_data pmx65_vreg_data[] = {
1592 	RPMH_VREG("smps1",   SMPS, 1,  &pmic5_ftsmps510, "vdd-s1"),
1593 	RPMH_VREG("smps2",   SMPS, 2,  &pmic5_hfsmps510, "vdd-s2"),
1594 	RPMH_VREG("smps3",   SMPS, 3,  &pmic5_hfsmps510, "vdd-s3"),
1595 	RPMH_VREG("smps4",   SMPS, 4,  &pmic5_hfsmps510, "vdd-s4"),
1596 	RPMH_VREG("smps5",   SMPS, 5,  &pmic5_hfsmps510, "vdd-s5"),
1597 	RPMH_VREG("smps6",   SMPS, 6,  &pmic5_ftsmps510, "vdd-s6"),
1598 	RPMH_VREG("smps7",   SMPS, 7,  &pmic5_hfsmps510, "vdd-s7"),
1599 	RPMH_VREG("smps8",   SMPS, 8,  &pmic5_hfsmps510, "vdd-s8"),
1600 	RPMH_VREG("ldo1",    LDO,  1,  &pmic5_nldo,      "vdd-l1"),
1601 	RPMH_VREG("ldo2",    LDO,  2,  &pmic5_nldo,      "vdd-l2-l18"),
1602 	RPMH_VREG("ldo3",    LDO,  3,  &pmic5_nldo,      "vdd-l3"),
1603 	RPMH_VREG("ldo4",    LDO,  4,  &pmic5_nldo,      "vdd-l4"),
1604 	RPMH_VREG("ldo5",    LDO,  5,  &pmic5_pldo,      "vdd-l5-l6-l16"),
1605 	RPMH_VREG("ldo6",    LDO,  6,  &pmic5_pldo,      "vdd-l5-l6-l16"),
1606 	RPMH_VREG("ldo7",    LDO,  7,  &pmic5_nldo,      "vdd-l7"),
1607 	RPMH_VREG("ldo8",    LDO,  8,  &pmic5_nldo,      "vdd-l8-l9"),
1608 	RPMH_VREG("ldo9",    LDO,  9,  &pmic5_nldo,      "vdd-l8-l9"),
1609 	RPMH_VREG("ldo10",   LDO,  10, &pmic5_pldo,      "vdd-l10"),
1610 	RPMH_VREG("ldo11",   LDO,  11, &pmic5_pldo,      "vdd-l11-l13"),
1611 	RPMH_VREG("ldo12",   LDO,  12, &pmic5_nldo,      "vdd-l12"),
1612 	RPMH_VREG("ldo13",   LDO,  13, &pmic5_pldo,      "vdd-l11-l13"),
1613 	RPMH_VREG("ldo14",   LDO,  14, &pmic5_nldo,      "vdd-l14"),
1614 	RPMH_VREG("ldo15",   LDO,  15, &pmic5_nldo,      "vdd-l15"),
1615 	RPMH_VREG("ldo16",   LDO,  16, &pmic5_pldo,      "vdd-l5-l6-l16"),
1616 	RPMH_VREG("ldo17",   LDO,  17, &pmic5_nldo,      "vdd-l17"),
1617 	/* ldo18 not configured */
1618 	RPMH_VREG("ldo19",   LDO,  19, &pmic5_nldo,      "vdd-l19"),
1619 	RPMH_VREG("ldo20",   LDO,  20, &pmic5_nldo,      "vdd-l20"),
1620 	RPMH_VREG("ldo21",   LDO,  21, &pmic5_nldo,      "vdd-l21"),
1621 	{}
1622 };
1623 
1624 static const struct rpmh_vreg_init_data pmx75_vreg_data[] = {
1625 	RPMH_VREG("smps1",   SMPS, 1,  &pmic5_ftsmps525, "vdd-s1"),
1626 	RPMH_VREG("smps2",   SMPS, 2,  &pmic5_ftsmps525, "vdd-s2"),
1627 	RPMH_VREG("smps3",   SMPS, 3,  &pmic5_ftsmps525, "vdd-s3"),
1628 	RPMH_VREG("smps4",   SMPS, 4,  &pmic5_ftsmps525, "vdd-s4"),
1629 	RPMH_VREG("smps5",   SMPS, 5,  &pmic5_ftsmps525, "vdd-s5"),
1630 	RPMH_VREG("smps6",   SMPS, 6,  &pmic5_ftsmps525, "vdd-s6"),
1631 	RPMH_VREG("smps7",   SMPS, 7,  &pmic5_ftsmps525, "vdd-s7"),
1632 	RPMH_VREG("smps8",   SMPS, 8,  &pmic5_ftsmps525, "vdd-s8"),
1633 	RPMH_VREG("smps9",   SMPS, 9,  &pmic5_ftsmps525, "vdd-s9"),
1634 	RPMH_VREG("smps10",  SMPS, 10, &pmic5_ftsmps525, "vdd-s10"),
1635 	RPMH_VREG("ldo1",    LDO,  1,  &pmic5_nldo515,   "vdd-l1"),
1636 	RPMH_VREG("ldo2",    LDO,  2,  &pmic5_nldo515,   "vdd-l2-18"),
1637 	RPMH_VREG("ldo3",    LDO,  3,  &pmic5_nldo515,   "vdd-l3"),
1638 	RPMH_VREG("ldo4",    LDO,  4,  &pmic5_nldo515,   "vdd-l4-l16"),
1639 	RPMH_VREG("ldo5",    LDO,  5,  &pmic5_pldo_lv,   "vdd-l5-l6"),
1640 	RPMH_VREG("ldo6",    LDO,  6,  &pmic5_pldo_lv,   "vdd-l5-l6"),
1641 	RPMH_VREG("ldo7",    LDO,  7,  &pmic5_nldo515,   "vdd-l7"),
1642 	RPMH_VREG("ldo8",    LDO,  8,  &pmic5_nldo515,   "vdd-l8-l9"),
1643 	RPMH_VREG("ldo9",    LDO,  9,  &pmic5_nldo515,   "vdd-l8-l9"),
1644 	RPMH_VREG("ldo10",   LDO,  10, &pmic5_pldo,      "vdd-l10"),
1645 	RPMH_VREG("ldo11",   LDO,  11, &pmic5_pldo,      "vdd-l11-l13"),
1646 	RPMH_VREG("ldo12",   LDO,  12, &pmic5_nldo515,   "vdd-l12"),
1647 	RPMH_VREG("ldo13",   LDO,  13, &pmic5_pldo,      "vdd-l11-l13"),
1648 	RPMH_VREG("ldo14",   LDO,  14, &pmic5_nldo515,   "vdd-l14"),
1649 	RPMH_VREG("ldo15",   LDO,  15, &pmic5_nldo515,   "vdd-l15"),
1650 	RPMH_VREG("ldo16",   LDO,  16, &pmic5_nldo515,   "vdd-l4-l16"),
1651 	RPMH_VREG("ldo17",   LDO,  17, &pmic5_nldo515,   "vdd-l17"),
1652 	/* ldo18 not configured */
1653 	RPMH_VREG("ldo19",   LDO,  19, &pmic5_nldo515,   "vdd-l19"),
1654 	RPMH_VREG("ldo20",   LDO,  20, &pmic5_nldo515,   "vdd-l20-l21"),
1655 	RPMH_VREG("ldo21",   LDO,  21, &pmic5_nldo515,   "vdd-l20-l21"),
1656 };
1657 
1658 static const struct rpmh_vreg_init_data pm7325_vreg_data[] = {
1659 	RPMH_VREG("smps1",  SMPS, 1,  &pmic5_hfsmps510, "vdd-s1"),
1660 	RPMH_VREG("smps2",  SMPS, 2,  &pmic5_ftsmps520, "vdd-s2"),
1661 	RPMH_VREG("smps3",  SMPS, 3,  &pmic5_ftsmps520, "vdd-s3"),
1662 	RPMH_VREG("smps4",  SMPS, 4,  &pmic5_ftsmps520, "vdd-s4"),
1663 	RPMH_VREG("smps5",  SMPS, 5,  &pmic5_ftsmps520, "vdd-s5"),
1664 	RPMH_VREG("smps6",  SMPS, 6,  &pmic5_ftsmps520, "vdd-s6"),
1665 	RPMH_VREG("smps7",  SMPS, 7,  &pmic5_ftsmps520, "vdd-s7"),
1666 	RPMH_VREG("smps8",  SMPS, 8,  &pmic5_hfsmps510, "vdd-s8"),
1667 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1668 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_pldo,      "vdd-l2-l7"),
1669 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo,      "vdd-l3"),
1670 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1671 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo,      "vdd-l5"),
1672 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo,      "vdd-l6-l9-l10"),
1673 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_pldo,      "vdd-l2-l7"),
1674 	RPMH_VREG("ldo8",   LDO,  8,  &pmic5_nldo,      "vdd-l8"),
1675 	RPMH_VREG("ldo9",   LDO,  9,  &pmic5_nldo,      "vdd-l6-l9-l10"),
1676 	RPMH_VREG("ldo10",  LDO,  10, &pmic5_nldo,      "vdd-l6-l9-l10"),
1677 	RPMH_VREG("ldo11",  LDO,  11, &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1678 	RPMH_VREG("ldo12",  LDO,  12, &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1679 	RPMH_VREG("ldo13",  LDO,  13, &pmic5_nldo,      "vdd-l13"),
1680 	RPMH_VREG("ldo14",  LDO,  14, &pmic5_nldo,      "vdd-l14-l16"),
1681 	RPMH_VREG("ldo15",  LDO,  15, &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1682 	RPMH_VREG("ldo16",  LDO,  16, &pmic5_nldo,      "vdd-l14-l16"),
1683 	RPMH_VREG("ldo17",  LDO,  17, &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1684 	RPMH_VREG("ldo18",  LDO,  18, &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1685 	RPMH_VREG("ldo19",  LDO,  19, &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1686 	{}
1687 };
1688 
1689 static const struct rpmh_vreg_init_data pm7550_vreg_data[] = {
1690 	RPMH_VREG("smps1", SMPS, 1,  &pmic5_ftsmps525,    "vdd-s1"),
1691 	RPMH_VREG("smps2", SMPS, 2,  &pmic5_ftsmps525,    "vdd-s2"),
1692 	RPMH_VREG("smps3", SMPS, 3,  &pmic5_ftsmps525,    "vdd-s3"),
1693 	RPMH_VREG("smps4", SMPS, 4,  &pmic5_ftsmps525,    "vdd-s4"),
1694 	RPMH_VREG("smps5", SMPS, 5,  &pmic5_ftsmps525,    "vdd-s5"),
1695 	RPMH_VREG("smps6", SMPS, 6,  &pmic5_ftsmps525,    "vdd-s6"),
1696 	RPMH_VREG("ldo1",  LDO,  1,  &pmic5_nldo515,      "vdd-l1"),
1697 	RPMH_VREG("ldo2",  LDO,  2,  &pmic5_nldo515,      "vdd-l2-l3"),
1698 	RPMH_VREG("ldo3",  LDO,  3,  &pmic5_nldo515,      "vdd-l2-l3"),
1699 	RPMH_VREG("ldo4",  LDO,  4,  &pmic5_nldo515,      "vdd-l4-l5"),
1700 	RPMH_VREG("ldo5",  LDO,  5,  &pmic5_nldo515,      "vdd-l4-l5"),
1701 	RPMH_VREG("ldo6",  LDO,  6,  &pmic5_nldo515,      "vdd-l6"),
1702 	RPMH_VREG("ldo7",  LDO,  7,  &pmic5_nldo515,      "vdd-l7"),
1703 	RPMH_VREG("ldo8",  LDO,  8,  &pmic5_nldo515,      "vdd-l8"),
1704 	RPMH_VREG("ldo9",  LDO,  9,  &pmic5_nldo515,      "vdd-l9-l10"),
1705 	RPMH_VREG("ldo10", LDO,  10, &pmic5_nldo515,      "vdd-l9-l10"),
1706 	RPMH_VREG("ldo11", LDO,  11, &pmic5_nldo515,      "vdd-l11"),
1707 	RPMH_VREG("ldo12", LDO,  12, &pmic5_pldo515_mv,   "vdd-l12-l14"),
1708 	RPMH_VREG("ldo13", LDO,  13, &pmic5_pldo515_mv,   "vdd-l13-l16"),
1709 	RPMH_VREG("ldo14", LDO,  14, &pmic5_pldo,         "vdd-l12-l14"),
1710 	RPMH_VREG("ldo15", LDO,  15, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1711 	RPMH_VREG("ldo16", LDO,  16, &pmic5_pldo,         "vdd-l13-l16"),
1712 	RPMH_VREG("ldo17", LDO,  17, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1713 	RPMH_VREG("ldo18", LDO,  18, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1714 	RPMH_VREG("ldo19", LDO,  19, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1715 	RPMH_VREG("ldo20", LDO,  20, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1716 	RPMH_VREG("ldo21", LDO,  21, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1717 	RPMH_VREG("ldo22", LDO,  22, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1718 	RPMH_VREG("ldo23", LDO,  23, &pmic5_pldo,         "vdd-l15-l17-l18-l19-l20-l21-l22-l23"),
1719 	RPMH_VREG("bob",   BOB,  1,  &pmic5_bob,          "vdd-bob"),
1720 	{}
1721 };
1722 
1723 static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = {
1724 	RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps520, "vdd-s1"),
1725 	RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps520, "vdd-s2"),
1726 	RPMH_VREG("smps3", SMPS, 3, &pmic5_hfsmps515, "vdd-s3"),
1727 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo,      "vdd-l1-l2"),
1728 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo,      "vdd-l1-l2"),
1729 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo,      "vdd-l3"),
1730 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_pldo_lv,   "vdd-l4"),
1731 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_nldo,      "vdd-l5-l6"),
1732 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_nldo,      "vdd-l5-l6"),
1733 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_pldo,      "vdd-l7-bob"),
1734 	{}
1735 };
1736 
1737 static const struct rpmh_vreg_init_data pmr735b_vreg_data[] = {
1738 	RPMH_VREG("ldo1",  LDO,  1, &pmic5_nldo,      "vdd-l1-l2"),
1739 	RPMH_VREG("ldo2",  LDO,  2, &pmic5_nldo,      "vdd-l1-l2"),
1740 	RPMH_VREG("ldo3",  LDO,  3, &pmic5_nldo,      "vdd-l3"),
1741 	RPMH_VREG("ldo4",  LDO,  4, &pmic5_pldo_lv,   "vdd-l4"),
1742 	RPMH_VREG("ldo5",  LDO,  5, &pmic5_nldo,      "vdd-l5"),
1743 	RPMH_VREG("ldo6",  LDO,  6, &pmic5_nldo,      "vdd-l6"),
1744 	RPMH_VREG("ldo7",  LDO,  7, &pmic5_nldo,      "vdd-l7-l8"),
1745 	RPMH_VREG("ldo8",  LDO,  8, &pmic5_nldo,      "vdd-l7-l8"),
1746 	RPMH_VREG("ldo9",  LDO,  9, &pmic5_nldo,      "vdd-l9"),
1747 	RPMH_VREG("ldo10", LDO,  10, &pmic5_pldo_lv,   "vdd-l10"),
1748 	RPMH_VREG("ldo11", LDO,  11, &pmic5_nldo,      "vdd-l11"),
1749 	RPMH_VREG("ldo12", LDO,  12, &pmic5_nldo,      "vdd-l12"),
1750 	{}
1751 };
1752 
1753 static const struct rpmh_vreg_init_data pmr735d_vreg_data[] = {
1754 	RPMH_VREG("ldo1",   LDO,  1,  &pmic5_nldo515,      "vdd-l1-l2-l5"),
1755 	RPMH_VREG("ldo2",   LDO,  2,  &pmic5_nldo515,      "vdd-l1-l2-l5"),
1756 	RPMH_VREG("ldo3",   LDO,  3,  &pmic5_nldo515,      "vdd-l3-l4"),
1757 	RPMH_VREG("ldo4",   LDO,  4,  &pmic5_nldo515,      "vdd-l3-l4"),
1758 	RPMH_VREG("ldo5",   LDO,  5,  &pmic5_nldo515,      "vdd-l1-l2-l5"),
1759 	RPMH_VREG("ldo6",   LDO,  6,  &pmic5_nldo515,      "vdd-l6"),
1760 	RPMH_VREG("ldo7",   LDO,  7,  &pmic5_nldo515,      "vdd-l7"),
1761 	{}
1762 };
1763 
1764 static const struct rpmh_vreg_init_data pm660_vreg_data[] = {
1765 	RPMH_VREG("smps1", SMPS, 1,  &pmic4_ftsmps426, "vdd-s1"),
1766 	RPMH_VREG("smps2", SMPS, 2,  &pmic4_ftsmps426, "vdd-s2"),
1767 	RPMH_VREG("smps3", SMPS, 3,  &pmic4_ftsmps426, "vdd-s3"),
1768 	RPMH_VREG("smps4", SMPS, 4,  &pmic4_hfsmps3,   "vdd-s4"),
1769 	RPMH_VREG("smps5", SMPS, 5,  &pmic4_hfsmps3,   "vdd-s5"),
1770 	RPMH_VREG("smps6", SMPS, 6,  &pmic4_hfsmps3,   "vdd-s6"),
1771 	RPMH_VREG("ldo1",  LDO,  1,  &pmic4_nldo,      "vdd-l1-l6-l7"),
1772 	RPMH_VREG("ldo2",  LDO,  2,  &pmic4_nldo,      "vdd-l2-l3"),
1773 	RPMH_VREG("ldo3",  LDO,  3,  &pmic4_nldo,      "vdd-l2-l3"),
1774 	/* ldo4 is inaccessible on PM660 */
1775 	RPMH_VREG("ldo5",  LDO,  5,  &pmic4_nldo,      "vdd-l5"),
1776 	RPMH_VREG("ldo6",  LDO,  6,  &pmic4_nldo,      "vdd-l1-l6-l7"),
1777 	RPMH_VREG("ldo7",  LDO,  7,  &pmic4_nldo,      "vdd-l1-l6-l7"),
1778 	RPMH_VREG("ldo8",  LDO,  8,  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1779 	RPMH_VREG("ldo9",  LDO,  9,  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1780 	RPMH_VREG("ldo10", LDO,  10, &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1781 	RPMH_VREG("ldo11", LDO,  11, &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1782 	RPMH_VREG("ldo12", LDO,  12, &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1783 	RPMH_VREG("ldo13", LDO,  13, &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1784 	RPMH_VREG("ldo14", LDO,  14, &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1785 	RPMH_VREG("ldo15", LDO,  15, &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1786 	RPMH_VREG("ldo16", LDO,  16, &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1787 	RPMH_VREG("ldo17", LDO,  17, &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1788 	RPMH_VREG("ldo18", LDO,  18, &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1789 	RPMH_VREG("ldo19", LDO,  19, &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1790 	{}
1791 };
1792 
1793 static const struct rpmh_vreg_init_data pm660l_vreg_data[] = {
1794 	RPMH_VREG("smps1", SMPS, 1, &pmic4_ftsmps426, "vdd-s1"),
1795 	RPMH_VREG("smps2", SMPS, 2, &pmic4_ftsmps426, "vdd-s2"),
1796 	RPMH_VREG("smps3", SMPS, 3, &pmic4_ftsmps426, "vdd-s3-s4"),
1797 	RPMH_VREG("smps5", SMPS, 5, &pmic4_ftsmps426, "vdd-s5"),
1798 	RPMH_VREG("ldo1",  LDO,  1, &pmic4_nldo,      "vdd-l1-l9-l10"),
1799 	RPMH_VREG("ldo2",  LDO,  2, &pmic4_pldo,      "vdd-l2"),
1800 	RPMH_VREG("ldo3",  LDO,  3, &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1801 	RPMH_VREG("ldo4",  LDO,  4, &pmic4_pldo,      "vdd-l4-l6"),
1802 	RPMH_VREG("ldo5",  LDO,  5, &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1803 	RPMH_VREG("ldo6",  LDO,  6, &pmic4_pldo,      "vdd-l4-l6"),
1804 	RPMH_VREG("ldo7",  LDO,  7, &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1805 	RPMH_VREG("ldo8",  LDO,  8, &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1806 	RPMH_VREG("bob",   BOB,  1, &pmic4_bob,       "vdd-bob"),
1807 	{}
1808 };
1809 
1810 static int rpmh_regulator_probe(struct platform_device *pdev)
1811 {
1812 	struct device *dev = &pdev->dev;
1813 	const struct rpmh_vreg_init_data *vreg_data;
1814 	struct rpmh_vreg *vreg;
1815 	const char *pmic_id;
1816 	int ret;
1817 
1818 	vreg_data = of_device_get_match_data(dev);
1819 	if (!vreg_data)
1820 		return -ENODEV;
1821 
1822 	ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id);
1823 	if (ret < 0) {
1824 		dev_err(dev, "qcom,pmic-id missing in DT node\n");
1825 		return ret;
1826 	}
1827 
1828 	for_each_available_child_of_node_scoped(dev->of_node, node) {
1829 		vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
1830 		if (!vreg)
1831 			return -ENOMEM;
1832 
1833 		ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id,
1834 						vreg_data);
1835 		if (ret < 0)
1836 			return ret;
1837 	}
1838 
1839 	return 0;
1840 }
1841 
1842 static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {
1843 	{
1844 		.compatible = "qcom,pm8005-rpmh-regulators",
1845 		.data = pm8005_vreg_data,
1846 	},
1847 	{
1848 		.compatible = "qcom,pm8009-rpmh-regulators",
1849 		.data = pm8009_vreg_data,
1850 	},
1851 	{
1852 		.compatible = "qcom,pm8009-1-rpmh-regulators",
1853 		.data = pm8009_1_vreg_data,
1854 	},
1855 	{
1856 		.compatible = "qcom,pm8010-rpmh-regulators",
1857 		.data = pm8010_vreg_data,
1858 	},
1859 	{
1860 		.compatible = "qcom,pm8150-rpmh-regulators",
1861 		.data = pm8150_vreg_data,
1862 	},
1863 	{
1864 		.compatible = "qcom,pm8150l-rpmh-regulators",
1865 		.data = pm8150l_vreg_data,
1866 	},
1867 	{
1868 		.compatible = "qcom,pm8350-rpmh-regulators",
1869 		.data = pm8350_vreg_data,
1870 	},
1871 	{
1872 		.compatible = "qcom,pm8350c-rpmh-regulators",
1873 		.data = pm8350c_vreg_data,
1874 	},
1875 	{
1876 		.compatible = "qcom,pm8450-rpmh-regulators",
1877 		.data = pm8450_vreg_data,
1878 	},
1879 	{
1880 		.compatible = "qcom,pm8550-rpmh-regulators",
1881 		.data = pm8550_vreg_data,
1882 	},
1883 	{
1884 		.compatible = "qcom,pm8550ve-rpmh-regulators",
1885 		.data = pm8550ve_vreg_data,
1886 	},
1887 	{
1888 		.compatible = "qcom,pm8550vs-rpmh-regulators",
1889 		.data = pm8550vs_vreg_data,
1890 	},
1891 	{
1892 		.compatible = "qcom,pm8998-rpmh-regulators",
1893 		.data = pm8998_vreg_data,
1894 	},
1895 	{
1896 		.compatible = "qcom,pmau0102-rpmh-regulators",
1897 		.data = pmau0102_vreg_data,
1898 	},
1899 	{
1900 		.compatible = "qcom,pmg1110-rpmh-regulators",
1901 		.data = pmg1110_vreg_data,
1902 	},
1903 	{
1904 		.compatible = "qcom,pmi8998-rpmh-regulators",
1905 		.data = pmi8998_vreg_data,
1906 	},
1907 	{
1908 		.compatible = "qcom,pm6150-rpmh-regulators",
1909 		.data = pm6150_vreg_data,
1910 	},
1911 	{
1912 		.compatible = "qcom,pm6150l-rpmh-regulators",
1913 		.data = pm6150l_vreg_data,
1914 	},
1915 	{
1916 		.compatible = "qcom,pm6350-rpmh-regulators",
1917 		.data = pm6350_vreg_data,
1918 	},
1919 	{
1920 		.compatible = "qcom,pmc8180-rpmh-regulators",
1921 		.data = pm8150_vreg_data,
1922 	},
1923 	{
1924 		.compatible = "qcom,pmc8180c-rpmh-regulators",
1925 		.data = pm8150l_vreg_data,
1926 	},
1927 	{
1928 		.compatible = "qcom,pmc8380-rpmh-regulators",
1929 		.data = pmc8380_vreg_data,
1930 	},
1931 	{
1932 		.compatible = "qcom,pmcx0102-rpmh-regulators",
1933 		.data = pmcx0102_vreg_data,
1934 	},
1935 	{
1936 		.compatible = "qcom,pmh0101-rpmh-regulators",
1937 		.data = pmh0101_vreg_data,
1938 	},
1939 	{
1940 		.compatible = "qcom,pmh0104-rpmh-regulators",
1941 		.data = pmh0104_vreg_data,
1942 	},
1943 	{
1944 		.compatible = "qcom,pmh0110-rpmh-regulators",
1945 		.data = pmh0110_vreg_data,
1946 	},
1947 	{
1948 		.compatible = "qcom,pmm8155au-rpmh-regulators",
1949 		.data = pmm8155au_vreg_data,
1950 	},
1951 	{
1952 		.compatible = "qcom,pmm8654au-rpmh-regulators",
1953 		.data = pmm8654au_vreg_data,
1954 	},
1955 	{
1956 		.compatible = "qcom,pmx55-rpmh-regulators",
1957 		.data = pmx55_vreg_data,
1958 	},
1959 	{
1960 		.compatible = "qcom,pmx65-rpmh-regulators",
1961 		.data = pmx65_vreg_data,
1962 	},
1963 	{
1964 		.compatible = "qcom,pmx75-rpmh-regulators",
1965 		.data = pmx75_vreg_data,
1966 	},
1967 	{
1968 		.compatible = "qcom,pm7325-rpmh-regulators",
1969 		.data = pm7325_vreg_data,
1970 	},
1971 	{
1972 		.compatible = "qcom,pm7550-rpmh-regulators",
1973 		.data = pm7550_vreg_data,
1974 	},
1975 	{
1976 		.compatible = "qcom,pmr735a-rpmh-regulators",
1977 		.data = pmr735a_vreg_data,
1978 	},
1979 	{
1980 		.compatible = "qcom,pmr735b-rpmh-regulators",
1981 		.data = pmr735b_vreg_data,
1982 	},
1983 	{
1984 		.compatible = "qcom,pmr735d-rpmh-regulators",
1985 		.data = pmr735d_vreg_data,
1986 	},
1987 	{
1988 		.compatible = "qcom,pm660-rpmh-regulators",
1989 		.data = pm660_vreg_data,
1990 	},
1991 	{
1992 		.compatible = "qcom,pm660l-rpmh-regulators",
1993 		.data = pm660l_vreg_data,
1994 	},
1995 	{}
1996 };
1997 MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table);
1998 
1999 static struct platform_driver rpmh_regulator_driver = {
2000 	.driver = {
2001 		.name = "qcom-rpmh-regulator",
2002 		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
2003 		.of_match_table	= of_match_ptr(rpmh_regulator_match_table),
2004 	},
2005 	.probe = rpmh_regulator_probe,
2006 };
2007 module_platform_driver(rpmh_regulator_driver);
2008 
2009 MODULE_DESCRIPTION("Qualcomm RPMh regulator driver");
2010 MODULE_LICENSE("GPL v2");
2011