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