1// SPDX-License-Identifier: GPL-2.0
2// Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
3
4#define pr_fmt(fmt) "%s: " fmt, __func__
5
6#include <linux/err.h>
7#include <linux/kernel.h>
8#include <linux/module.h>
9#include <linux/of.h>
10#include <linux/platform_device.h>
11#include <linux/slab.h>
12#include <linux/string.h>
13#include <linux/regulator/driver.h>
14#include <linux/regulator/machine.h>
15#include <linux/regulator/of_regulator.h>
16
17#include <soc/qcom/cmd-db.h>
18#include <soc/qcom/rpmh.h>
19
20#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
21
22/**
23 * enum rpmh_regulator_type - supported RPMh accelerator types
24 * @VRM:	RPMh VRM accelerator which supports voting on enable, voltage,
25 *		and mode of LDO, SMPS, and BOB type PMIC regulators.
26 * @XOB:	RPMh XOB accelerator which supports voting on the enable state
27 *		of PMIC regulators.
28 */
29enum rpmh_regulator_type {
30	VRM,
31	XOB,
32};
33
34#define RPMH_REGULATOR_REG_VRM_VOLTAGE		0x0
35#define RPMH_REGULATOR_REG_ENABLE		0x4
36#define RPMH_REGULATOR_REG_VRM_MODE		0x8
37
38#define PMIC4_LDO_MODE_RETENTION		4
39#define PMIC4_LDO_MODE_LPM			5
40#define PMIC4_LDO_MODE_HPM			7
41
42#define PMIC4_SMPS_MODE_RETENTION		4
43#define PMIC4_SMPS_MODE_PFM			5
44#define PMIC4_SMPS_MODE_AUTO			6
45#define PMIC4_SMPS_MODE_PWM			7
46
47#define PMIC4_BOB_MODE_PASS			0
48#define PMIC4_BOB_MODE_PFM			1
49#define PMIC4_BOB_MODE_AUTO			2
50#define PMIC4_BOB_MODE_PWM			3
51
52#define PMIC5_LDO_MODE_RETENTION		3
53#define PMIC5_LDO_MODE_LPM			4
54#define PMIC5_LDO_MODE_HPM			7
55
56#define PMIC5_SMPS_MODE_RETENTION		3
57#define PMIC5_SMPS_MODE_PFM			4
58#define PMIC5_SMPS_MODE_AUTO			6
59#define PMIC5_SMPS_MODE_PWM			7
60
61#define PMIC5_BOB_MODE_PASS			2
62#define PMIC5_BOB_MODE_PFM			4
63#define PMIC5_BOB_MODE_AUTO			6
64#define PMIC5_BOB_MODE_PWM			7
65
66/**
67 * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations
68 * @regulator_type:		RPMh accelerator type used to manage this
69 *				regulator
70 * @ops:			Pointer to regulator ops callback structure
71 * @voltage_range:		The single range of voltages supported by this
72 *				PMIC regulator type
73 * @n_voltages:			The number of unique voltage set points defined
74 *				by voltage_range
75 * @hpm_min_load_uA:		Minimum load current in microamps that requires
76 *				high power mode (HPM) operation.  This is used
77 *				for LDO hardware type regulators only.
78 * @pmic_mode_map:		Array indexed by regulator framework mode
79 *				containing PMIC hardware modes.  Must be large
80 *				enough to index all framework modes supported
81 *				by this regulator hardware type.
82 * @of_map_mode:		Maps an RPMH_REGULATOR_MODE_* mode value defined
83 *				in device tree to a regulator framework mode
84 */
85struct rpmh_vreg_hw_data {
86	enum rpmh_regulator_type		regulator_type;
87	const struct regulator_ops		*ops;
88	const struct linear_range	voltage_range;
89	int					n_voltages;
90	int					hpm_min_load_uA;
91	const int				*pmic_mode_map;
92	unsigned int			      (*of_map_mode)(unsigned int mode);
93};
94
95/**
96 * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a
97 *		single regulator device
98 * @dev:			Device pointer for the top-level PMIC RPMh
99 *				regulator parent device.  This is used as a
100 *				handle in RPMh write requests.
101 * @addr:			Base address of the regulator resource within
102 *				an RPMh accelerator
103 * @rdesc:			Regulator descriptor
104 * @hw_data:			PMIC regulator configuration data for this RPMh
105 *				regulator
106 * @always_wait_for_ack:	Boolean flag indicating if a request must always
107 *				wait for an ACK from RPMh before continuing even
108 *				if it corresponds to a strictly lower power
109 *				state (e.g. enabled --> disabled).
110 * @enabled:			Flag indicating if the regulator is enabled or
111 *				not
112 * @bypassed:			Boolean indicating if the regulator is in
113 *				bypass (pass-through) mode or not.  This is
114 *				only used by BOB rpmh-regulator resources.
115 * @voltage_selector:		Selector used for get_voltage_sel() and
116 *				set_voltage_sel() callbacks
117 * @mode:			RPMh VRM regulator current framework mode
118 */
119struct rpmh_vreg {
120	struct device			*dev;
121	u32				addr;
122	struct regulator_desc		rdesc;
123	const struct rpmh_vreg_hw_data	*hw_data;
124	bool				always_wait_for_ack;
125
126	int				enabled;
127	bool				bypassed;
128	int				voltage_selector;
129	unsigned int			mode;
130};
131
132/**
133 * struct rpmh_vreg_init_data - initialization data for an RPMh regulator
134 * @name:			Name for the regulator which also corresponds
135 *				to the device tree subnode name of the regulator
136 * @resource_name:		RPMh regulator resource name format string.
137 *				This must include exactly one field: '%s' which
138 *				is filled at run-time with the PMIC ID provided
139 *				by device tree property qcom,pmic-id.  Example:
140 *				"ldo%s1" for RPMh resource "ldoa1".
141 * @supply_name:		Parent supply regulator name
142 * @hw_data:			Configuration data for this PMIC regulator type
143 */
144struct rpmh_vreg_init_data {
145	const char			*name;
146	const char			*resource_name;
147	const char			*supply_name;
148	const struct rpmh_vreg_hw_data	*hw_data;
149};
150
151/**
152 * rpmh_regulator_send_request() - send the request to RPMh
153 * @vreg:		Pointer to the RPMh regulator
154 * @cmd:		Pointer to the RPMh command to send
155 * @wait_for_ack:	Boolean indicating if execution must wait until the
156 *			request has been acknowledged as complete
157 *
158 * Return: 0 on success, errno on failure
159 */
160static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,
161			struct tcs_cmd *cmd, bool wait_for_ack)
162{
163	int ret;
164
165	if (wait_for_ack || vreg->always_wait_for_ack)
166		ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1);
167	else
168		ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd,
169					1);
170
171	return ret;
172}
173
174static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
175				unsigned int selector, bool wait_for_ack)
176{
177	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
178	struct tcs_cmd cmd = {
179		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE,
180	};
181	int ret;
182
183	/* VRM voltage control register is set with voltage in millivolts. */
184	cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev,
185							selector), 1000);
186
187	ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack);
188	if (!ret)
189		vreg->voltage_selector = selector;
190
191	return ret;
192}
193
194static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,
195					unsigned int selector)
196{
197	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
198
199	if (vreg->enabled == -EINVAL) {
200		/*
201		 * Cache the voltage and send it later when the regulator is
202		 * enabled or disabled.
203		 */
204		vreg->voltage_selector = selector;
205		return 0;
206	}
207
208	return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector,
209					selector > vreg->voltage_selector);
210}
211
212static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev)
213{
214	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
215
216	return vreg->voltage_selector;
217}
218
219static int rpmh_regulator_is_enabled(struct regulator_dev *rdev)
220{
221	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
222
223	return vreg->enabled;
224}
225
226static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev,
227					bool enable)
228{
229	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
230	struct tcs_cmd cmd = {
231		.addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE,
232		.data = enable,
233	};
234	int ret;
235
236	if (vreg->enabled == -EINVAL &&
237	    vreg->voltage_selector != -ENOTRECOVERABLE) {
238		ret = _rpmh_regulator_vrm_set_voltage_sel(rdev,
239						vreg->voltage_selector, true);
240		if (ret < 0)
241			return ret;
242	}
243
244	ret = rpmh_regulator_send_request(vreg, &cmd, enable);
245	if (!ret)
246		vreg->enabled = enable;
247
248	return ret;
249}
250
251static int rpmh_regulator_enable(struct regulator_dev *rdev)
252{
253	return rpmh_regulator_set_enable_state(rdev, true);
254}
255
256static int rpmh_regulator_disable(struct regulator_dev *rdev)
257{
258	return rpmh_regulator_set_enable_state(rdev, false);
259}
260
261static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg,
262					unsigned int mode, bool bypassed)
263{
264	struct tcs_cmd cmd = {
265		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE,
266	};
267	int pmic_mode;
268
269	if (mode > REGULATOR_MODE_STANDBY)
270		return -EINVAL;
271
272	pmic_mode = vreg->hw_data->pmic_mode_map[mode];
273	if (pmic_mode < 0)
274		return pmic_mode;
275
276	if (bypassed)
277		cmd.data = PMIC4_BOB_MODE_PASS;
278	else
279		cmd.data = pmic_mode;
280
281	return rpmh_regulator_send_request(vreg, &cmd, true);
282}
283
284static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev,
285					unsigned int mode)
286{
287	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
288	int ret;
289
290	if (mode == vreg->mode)
291		return 0;
292
293	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed);
294	if (!ret)
295		vreg->mode = mode;
296
297	return ret;
298}
299
300static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)
301{
302	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
303
304	return vreg->mode;
305}
306
307/**
308 * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the  load
309 * @rdev:		Regulator device pointer for the rpmh-regulator
310 * @input_uV:		Input voltage
311 * @output_uV:		Output voltage
312 * @load_uA:		Aggregated load current in microamps
313 *
314 * This function is used in the regulator_ops for VRM type RPMh regulator
315 * devices.
316 *
317 * Return: 0 on success, errno on failure
318 */
319static unsigned int rpmh_regulator_vrm_get_optimum_mode(
320	struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA)
321{
322	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
323
324	if (load_uA >= vreg->hw_data->hpm_min_load_uA)
325		return REGULATOR_MODE_NORMAL;
326	else
327		return REGULATOR_MODE_IDLE;
328}
329
330static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev,
331				bool enable)
332{
333	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
334	int ret;
335
336	if (vreg->bypassed == enable)
337		return 0;
338
339	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable);
340	if (!ret)
341		vreg->bypassed = enable;
342
343	return ret;
344}
345
346static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev,
347				bool *enable)
348{
349	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);
350
351	*enable = vreg->bypassed;
352
353	return 0;
354}
355
356static const struct regulator_ops rpmh_regulator_vrm_ops = {
357	.enable			= rpmh_regulator_enable,
358	.disable		= rpmh_regulator_disable,
359	.is_enabled		= rpmh_regulator_is_enabled,
360	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
361	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
362	.list_voltage		= regulator_list_voltage_linear_range,
363	.set_mode		= rpmh_regulator_vrm_set_mode,
364	.get_mode		= rpmh_regulator_vrm_get_mode,
365};
366
367static const struct regulator_ops rpmh_regulator_vrm_drms_ops = {
368	.enable			= rpmh_regulator_enable,
369	.disable		= rpmh_regulator_disable,
370	.is_enabled		= rpmh_regulator_is_enabled,
371	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
372	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
373	.list_voltage		= regulator_list_voltage_linear_range,
374	.set_mode		= rpmh_regulator_vrm_set_mode,
375	.get_mode		= rpmh_regulator_vrm_get_mode,
376	.get_optimum_mode	= rpmh_regulator_vrm_get_optimum_mode,
377};
378
379static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = {
380	.enable			= rpmh_regulator_enable,
381	.disable		= rpmh_regulator_disable,
382	.is_enabled		= rpmh_regulator_is_enabled,
383	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,
384	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,
385	.list_voltage		= regulator_list_voltage_linear_range,
386	.set_mode		= rpmh_regulator_vrm_set_mode,
387	.get_mode		= rpmh_regulator_vrm_get_mode,
388	.set_bypass		= rpmh_regulator_vrm_set_bypass,
389	.get_bypass		= rpmh_regulator_vrm_get_bypass,
390};
391
392static const struct regulator_ops rpmh_regulator_xob_ops = {
393	.enable			= rpmh_regulator_enable,
394	.disable		= rpmh_regulator_disable,
395	.is_enabled		= rpmh_regulator_is_enabled,
396};
397
398/**
399 * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator
400 * @vreg:		Pointer to the individual rpmh-regulator resource
401 * @dev:			Pointer to the top level rpmh-regulator PMIC device
402 * @node:		Pointer to the individual rpmh-regulator resource
403 *			device node
404 * @pmic_id:		String used to identify the top level rpmh-regulator
405 *			PMIC device on the board
406 * @pmic_rpmh_data:	Pointer to a null-terminated array of rpmh-regulator
407 *			resources defined for the top level PMIC device
408 *
409 * Return: 0 on success, errno on failure
410 */
411static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev,
412			struct device_node *node, const char *pmic_id,
413			const struct rpmh_vreg_init_data *pmic_rpmh_data)
414{
415	struct regulator_config reg_config = {};
416	char rpmh_resource_name[20] = "";
417	const struct rpmh_vreg_init_data *rpmh_data;
418	struct regulator_init_data *init_data;
419	struct regulator_dev *rdev;
420	int ret;
421
422	vreg->dev = dev;
423
424	for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++)
425		if (of_node_name_eq(node, rpmh_data->name))
426			break;
427
428	if (!rpmh_data->name) {
429		dev_err(dev, "Unknown regulator %pOFn\n", node);
430		return -EINVAL;
431	}
432
433	scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name),
434		rpmh_data->resource_name, pmic_id);
435
436	vreg->addr = cmd_db_read_addr(rpmh_resource_name);
437	if (!vreg->addr) {
438		dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n",
439			node, rpmh_resource_name);
440		return -ENODEV;
441	}
442
443	vreg->rdesc.name = rpmh_data->name;
444	vreg->rdesc.supply_name = rpmh_data->supply_name;
445	vreg->hw_data = rpmh_data->hw_data;
446
447	vreg->enabled = -EINVAL;
448	vreg->voltage_selector = -ENOTRECOVERABLE;
449	vreg->mode = REGULATOR_MODE_INVALID;
450
451	if (rpmh_data->hw_data->n_voltages) {
452		vreg->rdesc.linear_ranges = &rpmh_data->hw_data->voltage_range;
453		vreg->rdesc.n_linear_ranges = 1;
454		vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages;
455	}
456
457	vreg->always_wait_for_ack = of_property_read_bool(node,
458						"qcom,always-wait-for-ack");
459
460	vreg->rdesc.owner	= THIS_MODULE;
461	vreg->rdesc.type	= REGULATOR_VOLTAGE;
462	vreg->rdesc.ops		= vreg->hw_data->ops;
463	vreg->rdesc.of_map_mode	= vreg->hw_data->of_map_mode;
464
465	init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc);
466	if (!init_data)
467		return -ENOMEM;
468
469	if (rpmh_data->hw_data->regulator_type == XOB &&
470	    init_data->constraints.min_uV &&
471	    init_data->constraints.min_uV == init_data->constraints.max_uV) {
472		vreg->rdesc.fixed_uV = init_data->constraints.min_uV;
473		vreg->rdesc.n_voltages = 1;
474	}
475
476	reg_config.dev		= dev;
477	reg_config.init_data	= init_data;
478	reg_config.of_node	= node;
479	reg_config.driver_data	= vreg;
480
481	rdev = devm_regulator_register(dev, &vreg->rdesc, &reg_config);
482	if (IS_ERR(rdev)) {
483		ret = PTR_ERR(rdev);
484		dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n",
485			node, ret);
486		return ret;
487	}
488
489	dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n",
490		node, rpmh_resource_name, vreg->addr);
491
492	return 0;
493}
494
495static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = {
496	[REGULATOR_MODE_INVALID] = -EINVAL,
497	[REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION,
498	[REGULATOR_MODE_IDLE]    = PMIC4_LDO_MODE_LPM,
499	[REGULATOR_MODE_NORMAL]  = PMIC4_LDO_MODE_HPM,
500	[REGULATOR_MODE_FAST]    = -EINVAL,
501};
502
503static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = {
504	[REGULATOR_MODE_INVALID] = -EINVAL,
505	[REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION,
506	[REGULATOR_MODE_IDLE]    = PMIC5_LDO_MODE_LPM,
507	[REGULATOR_MODE_NORMAL]  = PMIC5_LDO_MODE_HPM,
508	[REGULATOR_MODE_FAST]    = -EINVAL,
509};
510
511static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode)
512{
513	unsigned int mode;
514
515	switch (rpmh_mode) {
516	case RPMH_REGULATOR_MODE_HPM:
517		mode = REGULATOR_MODE_NORMAL;
518		break;
519	case RPMH_REGULATOR_MODE_LPM:
520		mode = REGULATOR_MODE_IDLE;
521		break;
522	case RPMH_REGULATOR_MODE_RET:
523		mode = REGULATOR_MODE_STANDBY;
524		break;
525	default:
526		mode = REGULATOR_MODE_INVALID;
527		break;
528	}
529
530	return mode;
531}
532
533static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = {
534	[REGULATOR_MODE_INVALID] = -EINVAL,
535	[REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION,
536	[REGULATOR_MODE_IDLE]    = PMIC4_SMPS_MODE_PFM,
537	[REGULATOR_MODE_NORMAL]  = PMIC4_SMPS_MODE_AUTO,
538	[REGULATOR_MODE_FAST]    = PMIC4_SMPS_MODE_PWM,
539};
540
541static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = {
542	[REGULATOR_MODE_INVALID] = -EINVAL,
543	[REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION,
544	[REGULATOR_MODE_IDLE]    = PMIC5_SMPS_MODE_PFM,
545	[REGULATOR_MODE_NORMAL]  = PMIC5_SMPS_MODE_AUTO,
546	[REGULATOR_MODE_FAST]    = PMIC5_SMPS_MODE_PWM,
547};
548
549static unsigned int
550rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode)
551{
552	unsigned int mode;
553
554	switch (rpmh_mode) {
555	case RPMH_REGULATOR_MODE_HPM:
556		mode = REGULATOR_MODE_FAST;
557		break;
558	case RPMH_REGULATOR_MODE_AUTO:
559		mode = REGULATOR_MODE_NORMAL;
560		break;
561	case RPMH_REGULATOR_MODE_LPM:
562		mode = REGULATOR_MODE_IDLE;
563		break;
564	case RPMH_REGULATOR_MODE_RET:
565		mode = REGULATOR_MODE_STANDBY;
566		break;
567	default:
568		mode = REGULATOR_MODE_INVALID;
569		break;
570	}
571
572	return mode;
573}
574
575static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = {
576	[REGULATOR_MODE_INVALID] = -EINVAL,
577	[REGULATOR_MODE_STANDBY] = -EINVAL,
578	[REGULATOR_MODE_IDLE]    = PMIC4_BOB_MODE_PFM,
579	[REGULATOR_MODE_NORMAL]  = PMIC4_BOB_MODE_AUTO,
580	[REGULATOR_MODE_FAST]    = PMIC4_BOB_MODE_PWM,
581};
582
583static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = {
584	[REGULATOR_MODE_INVALID] = -EINVAL,
585	[REGULATOR_MODE_STANDBY] = -EINVAL,
586	[REGULATOR_MODE_IDLE]    = PMIC5_BOB_MODE_PFM,
587	[REGULATOR_MODE_NORMAL]  = PMIC5_BOB_MODE_AUTO,
588	[REGULATOR_MODE_FAST]    = PMIC5_BOB_MODE_PWM,
589};
590
591static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode)
592{
593	unsigned int mode;
594
595	switch (rpmh_mode) {
596	case RPMH_REGULATOR_MODE_HPM:
597		mode = REGULATOR_MODE_FAST;
598		break;
599	case RPMH_REGULATOR_MODE_AUTO:
600		mode = REGULATOR_MODE_NORMAL;
601		break;
602	case RPMH_REGULATOR_MODE_LPM:
603		mode = REGULATOR_MODE_IDLE;
604		break;
605	default:
606		mode = REGULATOR_MODE_INVALID;
607		break;
608	}
609
610	return mode;
611}
612
613static const struct rpmh_vreg_hw_data pmic4_pldo = {
614	.regulator_type = VRM,
615	.ops = &rpmh_regulator_vrm_drms_ops,
616	.voltage_range = REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),
617	.n_voltages = 256,
618	.hpm_min_load_uA = 10000,
619	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
620	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
621};
622
623static const struct rpmh_vreg_hw_data pmic4_pldo_lv = {
624	.regulator_type = VRM,
625	.ops = &rpmh_regulator_vrm_drms_ops,
626	.voltage_range = REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),
627	.n_voltages = 128,
628	.hpm_min_load_uA = 10000,
629	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
630	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
631};
632
633static const struct rpmh_vreg_hw_data pmic4_nldo = {
634	.regulator_type = VRM,
635	.ops = &rpmh_regulator_vrm_drms_ops,
636	.voltage_range = REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
637	.n_voltages = 128,
638	.hpm_min_load_uA = 30000,
639	.pmic_mode_map = pmic_mode_map_pmic4_ldo,
640	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
641};
642
643static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = {
644	.regulator_type = VRM,
645	.ops = &rpmh_regulator_vrm_ops,
646	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
647	.n_voltages = 216,
648	.pmic_mode_map = pmic_mode_map_pmic4_smps,
649	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
650};
651
652static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = {
653	.regulator_type = VRM,
654	.ops = &rpmh_regulator_vrm_ops,
655	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),
656	.n_voltages = 259,
657	.pmic_mode_map = pmic_mode_map_pmic4_smps,
658	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
659};
660
661static const struct rpmh_vreg_hw_data pmic4_bob = {
662	.regulator_type = VRM,
663	.ops = &rpmh_regulator_vrm_bypass_ops,
664	.voltage_range = REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),
665	.n_voltages = 84,
666	.pmic_mode_map = pmic_mode_map_pmic4_bob,
667	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
668};
669
670static const struct rpmh_vreg_hw_data pmic4_lvs = {
671	.regulator_type = XOB,
672	.ops = &rpmh_regulator_xob_ops,
673	/* LVS hardware does not support voltage or mode configuration. */
674};
675
676static const struct rpmh_vreg_hw_data pmic5_pldo = {
677	.regulator_type = VRM,
678	.ops = &rpmh_regulator_vrm_drms_ops,
679	.voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
680	.n_voltages = 256,
681	.hpm_min_load_uA = 10000,
682	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
683	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
684};
685
686static const struct rpmh_vreg_hw_data pmic5_pldo_lv = {
687	.regulator_type = VRM,
688	.ops = &rpmh_regulator_vrm_drms_ops,
689	.voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),
690	.n_voltages = 63,
691	.hpm_min_load_uA = 10000,
692	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
693	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
694};
695
696static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = {
697	.regulator_type = VRM,
698	.ops = &rpmh_regulator_vrm_drms_ops,
699	.voltage_range = REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000),
700	.n_voltages = 188,
701	.hpm_min_load_uA = 10000,
702	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
703	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
704};
705
706static const struct rpmh_vreg_hw_data pmic5_nldo = {
707	.regulator_type = VRM,
708	.ops = &rpmh_regulator_vrm_drms_ops,
709	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),
710	.n_voltages = 124,
711	.hpm_min_load_uA = 30000,
712	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
713	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
714};
715
716static const struct rpmh_vreg_hw_data pmic5_nldo515 = {
717	.regulator_type = VRM,
718	.ops = &rpmh_regulator_vrm_drms_ops,
719	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000),
720	.n_voltages = 211,
721	.hpm_min_load_uA = 30000,
722	.pmic_mode_map = pmic_mode_map_pmic5_ldo,
723	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,
724};
725
726static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = {
727	.regulator_type = VRM,
728	.ops = &rpmh_regulator_vrm_ops,
729	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
730	.n_voltages = 216,
731	.pmic_mode_map = pmic_mode_map_pmic5_smps,
732	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
733};
734
735static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {
736	.regulator_type = VRM,
737	.ops = &rpmh_regulator_vrm_ops,
738	.voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
739	.n_voltages = 264,
740	.pmic_mode_map = pmic_mode_map_pmic5_smps,
741	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
742};
743
744static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = {
745	.regulator_type = VRM,
746	.ops = &rpmh_regulator_vrm_ops,
747	.voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
748	.n_voltages = 264,
749	.pmic_mode_map = pmic_mode_map_pmic5_smps,
750	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
751};
752
753static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = {
754	.regulator_type = VRM,
755	.ops = &rpmh_regulator_vrm_ops,
756	.voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000),
757	.n_voltages = 268,
758	.pmic_mode_map = pmic_mode_map_pmic5_smps,
759	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
760};
761
762static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = {
763	.regulator_type = VRM,
764	.ops = &rpmh_regulator_vrm_ops,
765	.voltage_range = REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000),
766	.n_voltages = 268,
767	.pmic_mode_map = pmic_mode_map_pmic5_smps,
768	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
769};
770
771static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = {
772	.regulator_type = VRM,
773	.ops = &rpmh_regulator_vrm_ops,
774	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
775	.n_voltages = 215,
776	.pmic_mode_map = pmic_mode_map_pmic5_smps,
777	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
778};
779
780static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {
781	.regulator_type = VRM,
782	.ops = &rpmh_regulator_vrm_ops,
783	.voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),
784	.n_voltages = 236,
785	.pmic_mode_map = pmic_mode_map_pmic5_smps,
786	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
787};
788
789static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = {
790	.regulator_type = VRM,
791	.ops = &rpmh_regulator_vrm_ops,
792	.voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000),
793	.n_voltages = 5,
794	.pmic_mode_map = pmic_mode_map_pmic5_smps,
795	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,
796};
797
798static const struct rpmh_vreg_hw_data pmic5_bob = {
799	.regulator_type = VRM,
800	.ops = &rpmh_regulator_vrm_bypass_ops,
801	.voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000),
802	.n_voltages = 32,
803	.pmic_mode_map = pmic_mode_map_pmic5_bob,
804	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,
805};
806
807#define RPMH_VREG(_name, _resource_name, _hw_data, _supply_name) \
808{ \
809	.name		= _name, \
810	.resource_name	= _resource_name, \
811	.hw_data	= _hw_data, \
812	.supply_name	= _supply_name, \
813}
814
815static const struct rpmh_vreg_init_data pm8998_vreg_data[] = {
816	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),
817	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),
818	RPMH_VREG("smps3",  "smp%s3",  &pmic4_hfsmps3,   "vdd-s3"),
819	RPMH_VREG("smps4",  "smp%s4",  &pmic4_hfsmps3,   "vdd-s4"),
820	RPMH_VREG("smps5",  "smp%s5",  &pmic4_hfsmps3,   "vdd-s5"),
821	RPMH_VREG("smps6",  "smp%s6",  &pmic4_ftsmps426, "vdd-s6"),
822	RPMH_VREG("smps7",  "smp%s7",  &pmic4_ftsmps426, "vdd-s7"),
823	RPMH_VREG("smps8",  "smp%s8",  &pmic4_ftsmps426, "vdd-s8"),
824	RPMH_VREG("smps9",  "smp%s9",  &pmic4_ftsmps426, "vdd-s9"),
825	RPMH_VREG("smps10", "smp%s10", &pmic4_ftsmps426, "vdd-s10"),
826	RPMH_VREG("smps11", "smp%s11", &pmic4_ftsmps426, "vdd-s11"),
827	RPMH_VREG("smps12", "smp%s12", &pmic4_ftsmps426, "vdd-s12"),
828	RPMH_VREG("smps13", "smp%s13", &pmic4_ftsmps426, "vdd-s13"),
829	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l27"),
830	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_nldo,      "vdd-l2-l8-l17"),
831	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_nldo,      "vdd-l3-l11"),
832	RPMH_VREG("ldo4",   "ldo%s4",  &pmic4_nldo,      "vdd-l4-l5"),
833	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_nldo,      "vdd-l4-l5"),
834	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_pldo,      "vdd-l6"),
835	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
836	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_nldo,      "vdd-l2-l8-l17"),
837	RPMH_VREG("ldo9",   "ldo%s9",  &pmic4_pldo,      "vdd-l9"),
838	RPMH_VREG("ldo10",  "ldo%s10", &pmic4_pldo,      "vdd-l10-l23-l25"),
839	RPMH_VREG("ldo11",  "ldo%s11", &pmic4_nldo,      "vdd-l3-l11"),
840	RPMH_VREG("ldo12",  "ldo%s12", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
841	RPMH_VREG("ldo13",  "ldo%s13", &pmic4_pldo,      "vdd-l13-l19-l21"),
842	RPMH_VREG("ldo14",  "ldo%s14", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
843	RPMH_VREG("ldo15",  "ldo%s15", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),
844	RPMH_VREG("ldo16",  "ldo%s16", &pmic4_pldo,      "vdd-l16-l28"),
845	RPMH_VREG("ldo17",  "ldo%s17", &pmic4_nldo,      "vdd-l2-l8-l17"),
846	RPMH_VREG("ldo18",  "ldo%s18", &pmic4_pldo,      "vdd-l18-l22"),
847	RPMH_VREG("ldo19",  "ldo%s19", &pmic4_pldo,      "vdd-l13-l19-l21"),
848	RPMH_VREG("ldo20",  "ldo%s20", &pmic4_pldo,      "vdd-l20-l24"),
849	RPMH_VREG("ldo21",  "ldo%s21", &pmic4_pldo,      "vdd-l13-l19-l21"),
850	RPMH_VREG("ldo22",  "ldo%s22", &pmic4_pldo,      "vdd-l18-l22"),
851	RPMH_VREG("ldo23",  "ldo%s23", &pmic4_pldo,      "vdd-l10-l23-l25"),
852	RPMH_VREG("ldo24",  "ldo%s24", &pmic4_pldo,      "vdd-l20-l24"),
853	RPMH_VREG("ldo25",  "ldo%s25", &pmic4_pldo,      "vdd-l10-l23-l25"),
854	RPMH_VREG("ldo26",  "ldo%s26", &pmic4_nldo,      "vdd-l26"),
855	RPMH_VREG("ldo27",  "ldo%s27", &pmic4_nldo,      "vdd-l1-l27"),
856	RPMH_VREG("ldo28",  "ldo%s28", &pmic4_pldo,      "vdd-l16-l28"),
857	RPMH_VREG("lvs1",   "vs%s1",   &pmic4_lvs,       "vin-lvs-1-2"),
858	RPMH_VREG("lvs2",   "vs%s2",   &pmic4_lvs,       "vin-lvs-1-2"),
859	{}
860};
861
862static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = {
863	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510,  "vdd-s1"),
864	{}
865};
866
867static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = {
868	RPMH_VREG("bob",    "bob%s1",  &pmic4_bob,       "vdd-bob"),
869	{}
870};
871
872static const struct rpmh_vreg_init_data pm8005_vreg_data[] = {
873	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),
874	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),
875	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3"),
876	RPMH_VREG("smps4",  "smp%s4",  &pmic4_ftsmps426, "vdd-s4"),
877	{}
878};
879
880static const struct rpmh_vreg_init_data pm8150_vreg_data[] = {
881	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
882	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
883	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
884	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510,   "vdd-s4"),
885	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510,   "vdd-s5"),
886	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
887	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
888	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),
889	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),
890	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
891	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l8-l11"),
892	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l10"),
893	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
894	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
895	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
896	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9"),
897	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l12-l14-l15"),
898	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l1-l8-l11"),
899	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9"),
900	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l2-l10"),
901	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo,      "vdd-l1-l8-l11"),
902	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
903	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l13-l16-l17"),
904	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
905	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
906	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,      "vdd-l13-l16-l17"),
907	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,      "vdd-l13-l16-l17"),
908	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
909	{}
910};
911
912static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = {
913	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
914	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
915	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
916	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),
917	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),
918	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
919	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
920	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),
921	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l8"),
922	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),
923	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),
924	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l4-l5-l6"),
925	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l4-l5-l6"),
926	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l4-l5-l6"),
927	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l11"),
928	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo_lv,   "vdd-l1-l8"),
929	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l9-l10"),
930	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l9-l10"),
931	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l7-l11"),
932	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),
933	{}
934};
935
936static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = {
937	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
938	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
939	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
940	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510, "vdd-s4"),
941	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510, "vdd-s5"),
942	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
943	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
944	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),
945	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),
946	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
947	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l8-l11"),
948	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l10"),
949	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
950	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
951	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
952	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9"),
953	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
954	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l1-l8-l11"),
955	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9"),
956	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l2-l10"),
957	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo,      "vdd-l1-l8-l11"),
958	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
959	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l13-l16-l17"),
960	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
961	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),
962	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,      "vdd-l13-l16-l17"),
963	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,      "vdd-l13-l16-l17"),
964	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      "vdd-l3-l4-l5-l18"),
965	{}
966};
967
968static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = {
969	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps527,  "vdd-s1"),
970	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps527,  "vdd-s2"),
971	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps527,  "vdd-s3"),
972	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps527,  "vdd-s4"),
973	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps527,  "vdd-s5"),
974	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps527,  "vdd-s6"),
975	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps527,  "vdd-s7"),
976	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps527,  "vdd-s8"),
977	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps527,  "vdd-s9"),
978	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,    "vdd-s9"),
979	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo515,    "vdd-l2-l3"),
980	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,    "vdd-l2-l3"),
981	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo515,    "vdd-s9"),
982	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo515,    "vdd-s9"),
983	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo515,    "vdd-l6-l7"),
984	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_nldo515,    "vdd-l6-l7"),
985	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo515_mv, "vdd-l8-l9"),
986	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,       "vdd-l8-l9"),
987	{}
988};
989
990static const struct rpmh_vreg_init_data pm8350_vreg_data[] = {
991	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
992	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
993	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
994	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),
995	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),
996	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
997	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
998	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),
999	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),
1000	RPMH_VREG("smps10", "smp%s10", &pmic5_hfsmps510, "vdd-s10"),
1001	RPMH_VREG("smps11", "smp%s11", &pmic5_hfsmps510, "vdd-s11"),
1002	RPMH_VREG("smps12", "smp%s12", &pmic5_hfsmps510, "vdd-s12"),
1003	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l4"),
1004	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l7"),
1005	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l5"),
1006	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l1-l4"),
1007	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l5"),
1008	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9-l10"),
1009	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l2-l7"),
1010	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l8"),
1011	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9-l10"),
1012	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l6-l9-l10"),
1013	{}
1014};
1015
1016static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = {
1017	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps515, "vdd-s1"),
1018	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
1019	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
1020	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),
1021	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),
1022	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
1023	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
1024	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),
1025	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),
1026	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),
1027	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l12"),
1028	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo_lv,   "vdd-l2-l8"),
1029	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1030	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1031	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1032	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l6-l9-l11"),
1033	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1034	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo_lv,   "vdd-l2-l8"),
1035	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l6-l9-l11"),
1036	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l10"),
1037	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l6-l9-l11"),
1038	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l1-l12"),
1039	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),
1040	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),
1041	{}
1042};
1043
1044static const struct rpmh_vreg_init_data pm8450_vreg_data[] = {
1045	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps520, "vdd-s1"),
1046	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),
1047	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps520, "vdd-s3"),
1048	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps520, "vdd-s4"),
1049	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps520, "vdd-s5"),
1050	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps520, "vdd-s6"),
1051	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),
1052	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),
1053	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),
1054	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo_lv,   "vdd-l4"),
1055	{}
1056};
1057
1058static const struct rpmh_vreg_init_data pm8550_vreg_data[] = {
1059	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,    "vdd-l1-l4-l10"),
1060	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,    "vdd-l2-l13-l14"),
1061	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,    "vdd-l3"),
1062	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo515,    "vdd-l1-l4-l10"),
1063	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,    "vdd-l5-l16"),
1064	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo, "vdd-l6-l7"),
1065	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo, "vdd-l6-l7"),
1066	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo, "vdd-l8-l9"),
1067	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,    "vdd-l8-l9"),
1068	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo515,    "vdd-l1-l4-l10"),
1069	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo515,    "vdd-l11"),
1070	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_nldo515,    "vdd-l12"),
1071	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,    "vdd-l2-l13-l14"),
1072	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo,    "vdd-l2-l13-l14"),
1073	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo515,    "vdd-l15"),
1074	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,    "vdd-l5-l16"),
1075	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,    "vdd-l17"),
1076	RPMH_VREG("bob1",   "bob%s1",  &pmic5_bob,     "vdd-bob1"),
1077	RPMH_VREG("bob2",   "bob%s2",  &pmic5_bob,     "vdd-bob2"),
1078	{}
1079};
1080
1081static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = {
1082	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps525_lv, "vdd-s1"),
1083	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps525_lv, "vdd-s2"),
1084	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps525_lv, "vdd-s3"),
1085	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps525_lv, "vdd-s4"),
1086	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps525_lv, "vdd-s5"),
1087	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps525_mv, "vdd-s6"),
1088	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,   "vdd-l1"),
1089	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo515,   "vdd-l2"),
1090	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,   "vdd-l3"),
1091	{}
1092};
1093
1094static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = {
1095	RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),
1096	RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),
1097	RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),
1098	RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"),
1099	RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),
1100	RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"),
1101	RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"),
1102	RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"),
1103	RPMH_VREG("ldo1",  "ldo%s1", &pmic5_nldo515,   "vdd-l1"),
1104	RPMH_VREG("ldo2",  "ldo%s2", &pmic5_nldo515,   "vdd-l2"),
1105	RPMH_VREG("ldo3",  "ldo%s3", &pmic5_nldo515,   "vdd-l3"),
1106	{}
1107};
1108
1109static const struct rpmh_vreg_init_data pm8009_vreg_data[] = {
1110	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),
1111	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps515, "vdd-s2"),
1112	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),
1113	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),
1114	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),
1115	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4"),
1116	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l5-l6"),
1117	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l5-l6"),
1118	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7"),
1119	{}
1120};
1121
1122static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = {
1123	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),
1124	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps515_1, "vdd-s2"),
1125	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),
1126	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),
1127	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),
1128	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4"),
1129	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l5-l6"),
1130	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l5-l6"),
1131	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7"),
1132	{}
1133};
1134
1135static const struct rpmh_vreg_init_data pm6150_vreg_data[] = {
1136	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
1137	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
1138	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
1139	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510, "vdd-s4"),
1140	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510, "vdd-s5"),
1141	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),
1142	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),
1143	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),
1144	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4-l7-l8"),
1145	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),
1146	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6"),
1147	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_nldo,      "vdd-l4-l7-l8"),
1148	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l4-l7-l8"),
1149	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l9"),
1150	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1151	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1152	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1153	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),
1154	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1155	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),
1156	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),
1157	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),
1158	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),
1159	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),
1160	{}
1161};
1162
1163static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = {
1164	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),
1165	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),
1166	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),
1167	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),
1168	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),
1169	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),
1170	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),
1171	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),
1172	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l8"),
1173	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),
1174	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),
1175	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l4-l5-l6"),
1176	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l4-l5-l6"),
1177	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l4-l5-l6"),
1178	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l11"),
1179	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo,      "vdd-l1-l8"),
1180	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l9-l10"),
1181	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l9-l10"),
1182	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l7-l11"),
1183	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),
1184	{}
1185};
1186
1187static const struct rpmh_vreg_init_data pm6350_vreg_data[] = {
1188	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, NULL),
1189	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps510, NULL),
1190	/* smps3 - smps5 not configured */
1191	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      NULL),
1192	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      NULL),
1193	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_pldo,      NULL),
1194	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      NULL),
1195	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      NULL),
1196	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      NULL),
1197	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      NULL),
1198	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo,      NULL),
1199	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      NULL),
1200	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      NULL),
1201	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      NULL),
1202	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo,      NULL),
1203	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_nldo,      NULL),
1204	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo,      NULL),
1205	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo,      NULL),
1206	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_nldo,      NULL),
1207	/* ldo17 not configured */
1208	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      NULL),
1209	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_nldo,      NULL),
1210	RPMH_VREG("ldo20",  "ldo%s20", &pmic5_nldo,      NULL),
1211	RPMH_VREG("ldo21",  "ldo%s21", &pmic5_nldo,      NULL),
1212	RPMH_VREG("ldo22",  "ldo%s22", &pmic5_nldo,      NULL),
1213};
1214
1215static const struct rpmh_vreg_init_data pmx55_vreg_data[] = {
1216	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps510, "vdd-s1"),
1217	RPMH_VREG("smps2",   "smp%s2",    &pmic5_hfsmps510, "vdd-s2"),
1218	RPMH_VREG("smps3",   "smp%s3",    &pmic5_hfsmps510, "vdd-s3"),
1219	RPMH_VREG("smps4",   "smp%s4",    &pmic5_hfsmps510, "vdd-s4"),
1220	RPMH_VREG("smps5",   "smp%s5",    &pmic5_hfsmps510, "vdd-s5"),
1221	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps510, "vdd-s6"),
1222	RPMH_VREG("smps7",   "smp%s7",    &pmic5_hfsmps510, "vdd-s7"),
1223	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo,      "vdd-l1-l2"),
1224	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo,      "vdd-l1-l2"),
1225	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo,      "vdd-l3-l9"),
1226	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo,      "vdd-l4-l12"),
1227	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo,      "vdd-l5-l6"),
1228	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo,      "vdd-l5-l6"),
1229	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo,      "vdd-l7-l8"),
1230	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo,      "vdd-l7-l8"),
1231	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo,      "vdd-l3-l9"),
1232	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10-l11-l13"),
1233	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l10-l11-l13"),
1234	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo,      "vdd-l4-l12"),
1235	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l10-l11-l13"),
1236	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo,      "vdd-l14"),
1237	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo,      "vdd-l15"),
1238	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_pldo,      "vdd-l16"),
1239	{}
1240};
1241
1242static const struct rpmh_vreg_init_data pmx65_vreg_data[] = {
1243	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps510, "vdd-s1"),
1244	RPMH_VREG("smps2",   "smp%s2",    &pmic5_hfsmps510, "vdd-s2"),
1245	RPMH_VREG("smps3",   "smp%s3",    &pmic5_hfsmps510, "vdd-s3"),
1246	RPMH_VREG("smps4",   "smp%s4",    &pmic5_hfsmps510, "vdd-s4"),
1247	RPMH_VREG("smps5",   "smp%s5",    &pmic5_hfsmps510, "vdd-s5"),
1248	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps510, "vdd-s6"),
1249	RPMH_VREG("smps7",   "smp%s7",    &pmic5_hfsmps510, "vdd-s7"),
1250	RPMH_VREG("smps8",   "smp%s8",    &pmic5_hfsmps510, "vdd-s8"),
1251	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo,      "vdd-l1"),
1252	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo,      "vdd-l2-l18"),
1253	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo,      "vdd-l3"),
1254	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo,      "vdd-l4"),
1255	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo,      "vdd-l5-l6-l16"),
1256	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo,      "vdd-l5-l6-l16"),
1257	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo,      "vdd-l7"),
1258	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo,      "vdd-l8-l9"),
1259	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo,      "vdd-l8-l9"),
1260	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10"),
1261	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l11-l13"),
1262	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo,      "vdd-l12"),
1263	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l11-l13"),
1264	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo,      "vdd-l14"),
1265	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo,      "vdd-l15"),
1266	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_pldo,      "vdd-l5-l6-l16"),
1267	RPMH_VREG("ldo17",   "ldo%s17",   &pmic5_nldo,      "vdd-l17"),
1268	/* ldo18 not configured */
1269	RPMH_VREG("ldo19",   "ldo%s19",   &pmic5_nldo,      "vdd-l19"),
1270	RPMH_VREG("ldo20",   "ldo%s20",   &pmic5_nldo,      "vdd-l20"),
1271	RPMH_VREG("ldo21",   "ldo%s21",   &pmic5_nldo,      "vdd-l21"),
1272	{}
1273};
1274
1275static const struct rpmh_vreg_init_data pmx75_vreg_data[] = {
1276	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps525_lv, "vdd-s1"),
1277	RPMH_VREG("smps2",   "smp%s2",    &pmic5_ftsmps525_lv, "vdd-s2"),
1278	RPMH_VREG("smps3",   "smp%s3",    &pmic5_ftsmps525_lv, "vdd-s3"),
1279	RPMH_VREG("smps4",   "smp%s4",    &pmic5_ftsmps525_mv, "vdd-s4"),
1280	RPMH_VREG("smps5",   "smp%s5",    &pmic5_ftsmps525_lv, "vdd-s5"),
1281	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps525_lv, "vdd-s6"),
1282	RPMH_VREG("smps7",   "smp%s7",    &pmic5_ftsmps525_lv, "vdd-s7"),
1283	RPMH_VREG("smps8",   "smp%s8",    &pmic5_ftsmps525_lv, "vdd-s8"),
1284	RPMH_VREG("smps9",   "smp%s9",    &pmic5_ftsmps525_lv, "vdd-s9"),
1285	RPMH_VREG("smps10",  "smp%s10",   &pmic5_ftsmps525_lv, "vdd-s10"),
1286	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo515,   "vdd-l1"),
1287	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo515,   "vdd-l2-18"),
1288	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo515,   "vdd-l3"),
1289	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo515,   "vdd-l4-l16"),
1290	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo_lv,   "vdd-l5-l6"),
1291	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo_lv,   "vdd-l5-l6"),
1292	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo515,   "vdd-l7"),
1293	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo515,   "vdd-l8-l9"),
1294	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo515,   "vdd-l8-l9"),
1295	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10"),
1296	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l11-l13"),
1297	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo515,   "vdd-l12"),
1298	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l11-l13"),
1299	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo515,   "vdd-l14"),
1300	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo515,   "vdd-l15"),
1301	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_nldo515,   "vdd-l4-l16"),
1302	RPMH_VREG("ldo17",   "ldo%s17",   &pmic5_nldo515,   "vdd-l17"),
1303	/* ldo18 not configured */
1304	RPMH_VREG("ldo19",   "ldo%s19",   &pmic5_nldo515,   "vdd-l19"),
1305	RPMH_VREG("ldo20",   "ldo%s20",   &pmic5_nldo515,   "vdd-l20-l21"),
1306	RPMH_VREG("ldo21",   "ldo%s21",   &pmic5_nldo515,   "vdd-l20-l21"),
1307};
1308
1309static const struct rpmh_vreg_init_data pm7325_vreg_data[] = {
1310	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),
1311	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),
1312	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps520, "vdd-s3"),
1313	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps520, "vdd-s4"),
1314	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps520, "vdd-s5"),
1315	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps520, "vdd-s6"),
1316	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps520, "vdd-s7"),
1317	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),
1318	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1319	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l7"),
1320	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),
1321	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1322	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l5"),
1323	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9-l10"),
1324	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l2-l7"),
1325	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l8"),
1326	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9-l10"),
1327	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l6-l9-l10"),
1328	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1329	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1330	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_nldo,      "vdd-l13"),
1331	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_nldo,      "vdd-l14-l16"),
1332	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo,      "vdd-l1-l4-l12-l15"),
1333	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_nldo,      "vdd-l14-l16"),
1334	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1335	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1336	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),
1337	{}
1338};
1339
1340static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = {
1341	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps520, "vdd-s1"),
1342	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),
1343	RPMH_VREG("smps3",  "smp%s3",  &pmic5_hfsmps515, "vdd-s3"),
1344	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l2"),
1345	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l1-l2"),
1346	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),
1347	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo_lv,   "vdd-l4"),
1348	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l5-l6"),
1349	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l5-l6"),
1350	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-bob"),
1351	{}
1352};
1353
1354static const struct rpmh_vreg_init_data pm660_vreg_data[] = {
1355	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),
1356	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),
1357	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3"),
1358	RPMH_VREG("smps4",  "smp%s4",  &pmic4_hfsmps3,   "vdd-s4"),
1359	RPMH_VREG("smps5",  "smp%s5",  &pmic4_hfsmps3,   "vdd-s5"),
1360	RPMH_VREG("smps6",  "smp%s6",  &pmic4_hfsmps3,   "vdd-s6"),
1361	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l6-l7"),
1362	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_nldo,      "vdd-l2-l3"),
1363	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_nldo,      "vdd-l2-l3"),
1364	/* ldo4 is inaccessible on PM660 */
1365	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_nldo,      "vdd-l5"),
1366	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_nldo,      "vdd-l1-l6-l7"),
1367	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_nldo,      "vdd-l1-l6-l7"),
1368	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1369	RPMH_VREG("ldo9",   "ldo%s9",  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1370	RPMH_VREG("ldo10",  "ldo%s10", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1371	RPMH_VREG("ldo11",  "ldo%s11", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1372	RPMH_VREG("ldo12",  "ldo%s12", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1373	RPMH_VREG("ldo13",  "ldo%s13", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1374	RPMH_VREG("ldo14",  "ldo%s14", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),
1375	RPMH_VREG("ldo15",  "ldo%s15", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1376	RPMH_VREG("ldo16",  "ldo%s16", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1377	RPMH_VREG("ldo17",  "ldo%s17", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1378	RPMH_VREG("ldo18",  "ldo%s18", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1379	RPMH_VREG("ldo19",  "ldo%s19", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),
1380	{}
1381};
1382
1383static const struct rpmh_vreg_init_data pm660l_vreg_data[] = {
1384	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),
1385	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),
1386	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3-s4"),
1387	RPMH_VREG("smps5",  "smp%s5",  &pmic4_ftsmps426, "vdd-s5"),
1388	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l9-l10"),
1389	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_pldo,      "vdd-l2"),
1390	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1391	RPMH_VREG("ldo4",   "ldo%s4",  &pmic4_pldo,      "vdd-l4-l6"),
1392	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1393	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_pldo,      "vdd-l4-l6"),
1394	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1395	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),
1396	RPMH_VREG("bob",    "bob%s1",  &pmic4_bob,       "vdd-bob"),
1397	{}
1398};
1399
1400static int rpmh_regulator_probe(struct platform_device *pdev)
1401{
1402	struct device *dev = &pdev->dev;
1403	const struct rpmh_vreg_init_data *vreg_data;
1404	struct device_node *node;
1405	struct rpmh_vreg *vreg;
1406	const char *pmic_id;
1407	int ret;
1408
1409	vreg_data = of_device_get_match_data(dev);
1410	if (!vreg_data)
1411		return -ENODEV;
1412
1413	ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id);
1414	if (ret < 0) {
1415		dev_err(dev, "qcom,pmic-id missing in DT node\n");
1416		return ret;
1417	}
1418
1419	for_each_available_child_of_node(dev->of_node, node) {
1420		vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
1421		if (!vreg) {
1422			of_node_put(node);
1423			return -ENOMEM;
1424		}
1425
1426		ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id,
1427						vreg_data);
1428		if (ret < 0) {
1429			of_node_put(node);
1430			return ret;
1431		}
1432	}
1433
1434	return 0;
1435}
1436
1437static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {
1438	{
1439		.compatible = "qcom,pm8005-rpmh-regulators",
1440		.data = pm8005_vreg_data,
1441	},
1442	{
1443		.compatible = "qcom,pm8009-rpmh-regulators",
1444		.data = pm8009_vreg_data,
1445	},
1446	{
1447		.compatible = "qcom,pm8009-1-rpmh-regulators",
1448		.data = pm8009_1_vreg_data,
1449	},
1450	{
1451		.compatible = "qcom,pm8150-rpmh-regulators",
1452		.data = pm8150_vreg_data,
1453	},
1454	{
1455		.compatible = "qcom,pm8150l-rpmh-regulators",
1456		.data = pm8150l_vreg_data,
1457	},
1458	{
1459		.compatible = "qcom,pm8350-rpmh-regulators",
1460		.data = pm8350_vreg_data,
1461	},
1462	{
1463		.compatible = "qcom,pm8350c-rpmh-regulators",
1464		.data = pm8350c_vreg_data,
1465	},
1466	{
1467		.compatible = "qcom,pm8450-rpmh-regulators",
1468		.data = pm8450_vreg_data,
1469	},
1470	{
1471		.compatible = "qcom,pm8550-rpmh-regulators",
1472		.data = pm8550_vreg_data,
1473	},
1474	{
1475		.compatible = "qcom,pm8550ve-rpmh-regulators",
1476		.data = pm8550ve_vreg_data,
1477	},
1478	{
1479		.compatible = "qcom,pm8550vs-rpmh-regulators",
1480		.data = pm8550vs_vreg_data,
1481	},
1482	{
1483		.compatible = "qcom,pm8998-rpmh-regulators",
1484		.data = pm8998_vreg_data,
1485	},
1486	{
1487		.compatible = "qcom,pmg1110-rpmh-regulators",
1488		.data = pmg1110_vreg_data,
1489	},
1490	{
1491		.compatible = "qcom,pmi8998-rpmh-regulators",
1492		.data = pmi8998_vreg_data,
1493	},
1494	{
1495		.compatible = "qcom,pm6150-rpmh-regulators",
1496		.data = pm6150_vreg_data,
1497	},
1498	{
1499		.compatible = "qcom,pm6150l-rpmh-regulators",
1500		.data = pm6150l_vreg_data,
1501	},
1502	{
1503		.compatible = "qcom,pm6350-rpmh-regulators",
1504		.data = pm6350_vreg_data,
1505	},
1506	{
1507		.compatible = "qcom,pmc8180-rpmh-regulators",
1508		.data = pm8150_vreg_data,
1509	},
1510	{
1511		.compatible = "qcom,pmc8180c-rpmh-regulators",
1512		.data = pm8150l_vreg_data,
1513	},
1514	{
1515		.compatible = "qcom,pmm8155au-rpmh-regulators",
1516		.data = pmm8155au_vreg_data,
1517	},
1518	{
1519		.compatible = "qcom,pmm8654au-rpmh-regulators",
1520		.data = pmm8654au_vreg_data,
1521	},
1522	{
1523		.compatible = "qcom,pmx55-rpmh-regulators",
1524		.data = pmx55_vreg_data,
1525	},
1526	{
1527		.compatible = "qcom,pmx65-rpmh-regulators",
1528		.data = pmx65_vreg_data,
1529	},
1530	{
1531		.compatible = "qcom,pmx75-rpmh-regulators",
1532		.data = pmx75_vreg_data,
1533	},
1534	{
1535		.compatible = "qcom,pm7325-rpmh-regulators",
1536		.data = pm7325_vreg_data,
1537	},
1538	{
1539		.compatible = "qcom,pmr735a-rpmh-regulators",
1540		.data = pmr735a_vreg_data,
1541	},
1542	{
1543		.compatible = "qcom,pm660-rpmh-regulators",
1544		.data = pm660_vreg_data,
1545	},
1546	{
1547		.compatible = "qcom,pm660l-rpmh-regulators",
1548		.data = pm660l_vreg_data,
1549	},
1550	{}
1551};
1552MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table);
1553
1554static struct platform_driver rpmh_regulator_driver = {
1555	.driver = {
1556		.name = "qcom-rpmh-regulator",
1557		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1558		.of_match_table	= of_match_ptr(rpmh_regulator_match_table),
1559	},
1560	.probe = rpmh_regulator_probe,
1561};
1562module_platform_driver(rpmh_regulator_driver);
1563
1564MODULE_DESCRIPTION("Qualcomm RPMh regulator driver");
1565MODULE_LICENSE("GPL v2");
1566