197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2da65e367SBjorn Andersson /*
3da65e367SBjorn Andersson  * Copyright (c) 2015, Sony Mobile Communications AB.
4da65e367SBjorn Andersson  * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
5da65e367SBjorn Andersson  */
6da65e367SBjorn Andersson 
7da65e367SBjorn Andersson #include <linux/module.h>
8da65e367SBjorn Andersson #include <linux/of.h>
9da65e367SBjorn Andersson #include <linux/platform_device.h>
10da65e367SBjorn Andersson #include <linux/regulator/driver.h>
1114e2976fSKonrad Dybcio #include <linux/regulator/of_regulator.h>
12da65e367SBjorn Andersson #include <linux/soc/qcom/smd-rpm.h>
13da65e367SBjorn Andersson 
14da65e367SBjorn Andersson struct qcom_rpm_reg {
15da65e367SBjorn Andersson 	struct device *dev;
16da65e367SBjorn Andersson 
17da65e367SBjorn Andersson 	struct qcom_smd_rpm *rpm;
18da65e367SBjorn Andersson 
19da65e367SBjorn Andersson 	u32 type;
20da65e367SBjorn Andersson 	u32 id;
21da65e367SBjorn Andersson 
22da65e367SBjorn Andersson 	struct regulator_desc desc;
23da65e367SBjorn Andersson 
24da65e367SBjorn Andersson 	int is_enabled;
25da65e367SBjorn Andersson 	int uV;
26fd805d99SBjorn Andersson 	u32 load;
27fd805d99SBjorn Andersson 
28fd805d99SBjorn Andersson 	unsigned int enabled_updated:1;
29fd805d99SBjorn Andersson 	unsigned int uv_updated:1;
30fd805d99SBjorn Andersson 	unsigned int load_updated:1;
31da65e367SBjorn Andersson };
32da65e367SBjorn Andersson 
33da65e367SBjorn Andersson struct rpm_regulator_req {
342c652a98SStephen Boyd 	__le32 key;
352c652a98SStephen Boyd 	__le32 nbytes;
362c652a98SStephen Boyd 	__le32 value;
37da65e367SBjorn Andersson };
38da65e367SBjorn Andersson 
39da65e367SBjorn Andersson #define RPM_KEY_SWEN	0x6e657773 /* "swen" */
40da65e367SBjorn Andersson #define RPM_KEY_UV	0x00007675 /* "uv" */
41da65e367SBjorn Andersson #define RPM_KEY_MA	0x0000616d /* "ma" */
42da65e367SBjorn Andersson 
rpm_reg_write_active(struct qcom_rpm_reg * vreg)43fd805d99SBjorn Andersson static int rpm_reg_write_active(struct qcom_rpm_reg *vreg)
44da65e367SBjorn Andersson {
45fd805d99SBjorn Andersson 	struct rpm_regulator_req req[3];
46fd805d99SBjorn Andersson 	int reqlen = 0;
47fd805d99SBjorn Andersson 	int ret;
48fd805d99SBjorn Andersson 
49fd805d99SBjorn Andersson 	if (vreg->enabled_updated) {
50fd805d99SBjorn Andersson 		req[reqlen].key = cpu_to_le32(RPM_KEY_SWEN);
51fd805d99SBjorn Andersson 		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));
52fd805d99SBjorn Andersson 		req[reqlen].value = cpu_to_le32(vreg->is_enabled);
53fd805d99SBjorn Andersson 		reqlen++;
54fd805d99SBjorn Andersson 	}
55fd805d99SBjorn Andersson 
56fd805d99SBjorn Andersson 	if (vreg->uv_updated && vreg->is_enabled) {
57fd805d99SBjorn Andersson 		req[reqlen].key = cpu_to_le32(RPM_KEY_UV);
58fd805d99SBjorn Andersson 		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));
59fd805d99SBjorn Andersson 		req[reqlen].value = cpu_to_le32(vreg->uV);
60fd805d99SBjorn Andersson 		reqlen++;
61fd805d99SBjorn Andersson 	}
62fd805d99SBjorn Andersson 
63fd805d99SBjorn Andersson 	if (vreg->load_updated && vreg->is_enabled) {
64fd805d99SBjorn Andersson 		req[reqlen].key = cpu_to_le32(RPM_KEY_MA);
65fd805d99SBjorn Andersson 		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));
66fd805d99SBjorn Andersson 		req[reqlen].value = cpu_to_le32(vreg->load / 1000);
67fd805d99SBjorn Andersson 		reqlen++;
68fd805d99SBjorn Andersson 	}
69fd805d99SBjorn Andersson 
70fd805d99SBjorn Andersson 	if (!reqlen)
71fd805d99SBjorn Andersson 		return 0;
72fd805d99SBjorn Andersson 
73fd805d99SBjorn Andersson 	ret = qcom_rpm_smd_write(vreg->rpm, QCOM_SMD_RPM_ACTIVE_STATE,
74fd805d99SBjorn Andersson 				 vreg->type, vreg->id,
75fd805d99SBjorn Andersson 				 req, sizeof(req[0]) * reqlen);
76fd805d99SBjorn Andersson 	if (!ret) {
77fd805d99SBjorn Andersson 		vreg->enabled_updated = 0;
78fd805d99SBjorn Andersson 		vreg->uv_updated = 0;
79fd805d99SBjorn Andersson 		vreg->load_updated = 0;
80fd805d99SBjorn Andersson 	}
81fd805d99SBjorn Andersson 
82fd805d99SBjorn Andersson 	return ret;
83da65e367SBjorn Andersson }
84da65e367SBjorn Andersson 
rpm_reg_enable(struct regulator_dev * rdev)85da65e367SBjorn Andersson static int rpm_reg_enable(struct regulator_dev *rdev)
86da65e367SBjorn Andersson {
87da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
88da65e367SBjorn Andersson 	int ret;
89da65e367SBjorn Andersson 
90da65e367SBjorn Andersson 	vreg->is_enabled = 1;
91fd805d99SBjorn Andersson 	vreg->enabled_updated = 1;
92fd805d99SBjorn Andersson 
93fd805d99SBjorn Andersson 	ret = rpm_reg_write_active(vreg);
94fd805d99SBjorn Andersson 	if (ret)
95fd805d99SBjorn Andersson 		vreg->is_enabled = 0;
96da65e367SBjorn Andersson 
97da65e367SBjorn Andersson 	return ret;
98da65e367SBjorn Andersson }
99da65e367SBjorn Andersson 
rpm_reg_is_enabled(struct regulator_dev * rdev)100da65e367SBjorn Andersson static int rpm_reg_is_enabled(struct regulator_dev *rdev)
101da65e367SBjorn Andersson {
102da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
103da65e367SBjorn Andersson 
104da65e367SBjorn Andersson 	return vreg->is_enabled;
105da65e367SBjorn Andersson }
106da65e367SBjorn Andersson 
rpm_reg_disable(struct regulator_dev * rdev)107da65e367SBjorn Andersson static int rpm_reg_disable(struct regulator_dev *rdev)
108da65e367SBjorn Andersson {
109da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
110da65e367SBjorn Andersson 	int ret;
111da65e367SBjorn Andersson 
112da65e367SBjorn Andersson 	vreg->is_enabled = 0;
113fd805d99SBjorn Andersson 	vreg->enabled_updated = 1;
114fd805d99SBjorn Andersson 
115fd805d99SBjorn Andersson 	ret = rpm_reg_write_active(vreg);
116fd805d99SBjorn Andersson 	if (ret)
117fd805d99SBjorn Andersson 		vreg->is_enabled = 1;
118da65e367SBjorn Andersson 
119da65e367SBjorn Andersson 	return ret;
120da65e367SBjorn Andersson }
121da65e367SBjorn Andersson 
rpm_reg_get_voltage(struct regulator_dev * rdev)122da65e367SBjorn Andersson static int rpm_reg_get_voltage(struct regulator_dev *rdev)
123da65e367SBjorn Andersson {
124da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
125da65e367SBjorn Andersson 
126da65e367SBjorn Andersson 	return vreg->uV;
127da65e367SBjorn Andersson }
128da65e367SBjorn Andersson 
rpm_reg_set_voltage(struct regulator_dev * rdev,int min_uV,int max_uV,unsigned * selector)129da65e367SBjorn Andersson static int rpm_reg_set_voltage(struct regulator_dev *rdev,
130da65e367SBjorn Andersson 			       int min_uV,
131da65e367SBjorn Andersson 			       int max_uV,
132da65e367SBjorn Andersson 			       unsigned *selector)
133da65e367SBjorn Andersson {
134da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
135fd805d99SBjorn Andersson 	int ret;
136fd805d99SBjorn Andersson 	int old_uV = vreg->uV;
137da65e367SBjorn Andersson 
138da65e367SBjorn Andersson 	vreg->uV = min_uV;
139fd805d99SBjorn Andersson 	vreg->uv_updated = 1;
140fd805d99SBjorn Andersson 
141fd805d99SBjorn Andersson 	ret = rpm_reg_write_active(vreg);
142fd805d99SBjorn Andersson 	if (ret)
143fd805d99SBjorn Andersson 		vreg->uV = old_uV;
144da65e367SBjorn Andersson 
145da65e367SBjorn Andersson 	return ret;
146da65e367SBjorn Andersson }
147da65e367SBjorn Andersson 
rpm_reg_set_load(struct regulator_dev * rdev,int load_uA)148da65e367SBjorn Andersson static int rpm_reg_set_load(struct regulator_dev *rdev, int load_uA)
149da65e367SBjorn Andersson {
150da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);
151fd805d99SBjorn Andersson 	u32 old_load = vreg->load;
152fd805d99SBjorn Andersson 	int ret;
153da65e367SBjorn Andersson 
154fd805d99SBjorn Andersson 	vreg->load = load_uA;
155fd805d99SBjorn Andersson 	vreg->load_updated = 1;
156fd805d99SBjorn Andersson 	ret = rpm_reg_write_active(vreg);
157fd805d99SBjorn Andersson 	if (ret)
158fd805d99SBjorn Andersson 		vreg->load = old_load;
159da65e367SBjorn Andersson 
160fd805d99SBjorn Andersson 	return ret;
161da65e367SBjorn Andersson }
162da65e367SBjorn Andersson 
163da65e367SBjorn Andersson static const struct regulator_ops rpm_smps_ldo_ops = {
164da65e367SBjorn Andersson 	.enable = rpm_reg_enable,
165da65e367SBjorn Andersson 	.disable = rpm_reg_disable,
166da65e367SBjorn Andersson 	.is_enabled = rpm_reg_is_enabled,
167a8a47540SSrinivas Kandagatla 	.list_voltage = regulator_list_voltage_linear_range,
168da65e367SBjorn Andersson 
169da65e367SBjorn Andersson 	.get_voltage = rpm_reg_get_voltage,
170da65e367SBjorn Andersson 	.set_voltage = rpm_reg_set_voltage,
171da65e367SBjorn Andersson 
172da65e367SBjorn Andersson 	.set_load = rpm_reg_set_load,
173da65e367SBjorn Andersson };
174da65e367SBjorn Andersson 
175d1e44b6bSSrinivas Kandagatla static const struct regulator_ops rpm_smps_ldo_ops_fixed = {
176d1e44b6bSSrinivas Kandagatla 	.enable = rpm_reg_enable,
177d1e44b6bSSrinivas Kandagatla 	.disable = rpm_reg_disable,
178d1e44b6bSSrinivas Kandagatla 	.is_enabled = rpm_reg_is_enabled,
179d1e44b6bSSrinivas Kandagatla 
180d1e44b6bSSrinivas Kandagatla 	.get_voltage = rpm_reg_get_voltage,
181d1e44b6bSSrinivas Kandagatla 	.set_voltage = rpm_reg_set_voltage,
182d1e44b6bSSrinivas Kandagatla 
183d1e44b6bSSrinivas Kandagatla 	.set_load = rpm_reg_set_load,
184d1e44b6bSSrinivas Kandagatla };
185d1e44b6bSSrinivas Kandagatla 
186da65e367SBjorn Andersson static const struct regulator_ops rpm_switch_ops = {
187da65e367SBjorn Andersson 	.enable = rpm_reg_enable,
188da65e367SBjorn Andersson 	.disable = rpm_reg_disable,
189da65e367SBjorn Andersson 	.is_enabled = rpm_reg_is_enabled,
190da65e367SBjorn Andersson };
191da65e367SBjorn Andersson 
1923cdb741eSBjorn Andersson static const struct regulator_ops rpm_bob_ops = {
1933cdb741eSBjorn Andersson 	.enable = rpm_reg_enable,
1943cdb741eSBjorn Andersson 	.disable = rpm_reg_disable,
1953cdb741eSBjorn Andersson 	.is_enabled = rpm_reg_is_enabled,
1963cdb741eSBjorn Andersson 
1973cdb741eSBjorn Andersson 	.get_voltage = rpm_reg_get_voltage,
1983cdb741eSBjorn Andersson 	.set_voltage = rpm_reg_set_voltage,
1993cdb741eSBjorn Andersson };
2003cdb741eSBjorn Andersson 
20147894c85SKathiravan T static const struct regulator_ops rpm_mp5496_ops = {
20247894c85SKathiravan T 	.enable = rpm_reg_enable,
20347894c85SKathiravan T 	.disable = rpm_reg_disable,
20447894c85SKathiravan T 	.is_enabled = rpm_reg_is_enabled,
20547894c85SKathiravan T 	.list_voltage = regulator_list_voltage_linear_range,
20647894c85SKathiravan T 
207f210f387SRobert Marko 	.get_voltage = rpm_reg_get_voltage,
20847894c85SKathiravan T 	.set_voltage = rpm_reg_set_voltage,
20947894c85SKathiravan T };
21047894c85SKathiravan T 
211ee01d0c9SAndy Gross static const struct regulator_desc pma8084_hfsmps = {
21260ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
213ee01d0c9SAndy Gross 		REGULATOR_LINEAR_RANGE(375000,  0,  95, 12500),
214ee01d0c9SAndy Gross 		REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000),
215ee01d0c9SAndy Gross 	},
216ee01d0c9SAndy Gross 	.n_linear_ranges = 2,
217ee01d0c9SAndy Gross 	.n_voltages = 159,
218ee01d0c9SAndy Gross 	.ops = &rpm_smps_ldo_ops,
219ee01d0c9SAndy Gross };
220ee01d0c9SAndy Gross 
221ee01d0c9SAndy Gross static const struct regulator_desc pma8084_ftsmps = {
22260ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
223ee01d0c9SAndy Gross 		REGULATOR_LINEAR_RANGE(350000,  0, 184, 5000),
224c488f007SStephen Boyd 		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),
225ee01d0c9SAndy Gross 	},
226ee01d0c9SAndy Gross 	.n_linear_ranges = 2,
227c488f007SStephen Boyd 	.n_voltages = 262,
228ee01d0c9SAndy Gross 	.ops = &rpm_smps_ldo_ops,
229ee01d0c9SAndy Gross };
230ee01d0c9SAndy Gross 
231ee01d0c9SAndy Gross static const struct regulator_desc pma8084_pldo = {
23260ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
233c488f007SStephen Boyd 		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),
234c488f007SStephen Boyd 		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),
235c488f007SStephen Boyd 		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),
236ee01d0c9SAndy Gross 	},
237c488f007SStephen Boyd 	.n_linear_ranges = 3,
238c488f007SStephen Boyd 	.n_voltages = 164,
239ee01d0c9SAndy Gross 	.ops = &rpm_smps_ldo_ops,
240ee01d0c9SAndy Gross };
241ee01d0c9SAndy Gross 
242ee01d0c9SAndy Gross static const struct regulator_desc pma8084_nldo = {
24360ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
244ee01d0c9SAndy Gross 		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),
245ee01d0c9SAndy Gross 	},
246ee01d0c9SAndy Gross 	.n_linear_ranges = 1,
247ee01d0c9SAndy Gross 	.n_voltages = 64,
248ee01d0c9SAndy Gross 	.ops = &rpm_smps_ldo_ops,
249ee01d0c9SAndy Gross };
250ee01d0c9SAndy Gross 
251ee01d0c9SAndy Gross static const struct regulator_desc pma8084_switch = {
252ee01d0c9SAndy Gross 	.ops = &rpm_switch_ops,
253ee01d0c9SAndy Gross };
254ee01d0c9SAndy Gross 
2558c816d56SBartosz Dudziak static const struct regulator_desc pm8226_hfsmps = {
2568c816d56SBartosz Dudziak 	.linear_ranges = (struct linear_range[]) {
2578c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(375000,   0,  95, 12500),
2588c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000),
2598c816d56SBartosz Dudziak 	},
2608c816d56SBartosz Dudziak 	.n_linear_ranges = 2,
2618c816d56SBartosz Dudziak 	.n_voltages = 159,
2628c816d56SBartosz Dudziak 	.ops = &rpm_smps_ldo_ops,
2638c816d56SBartosz Dudziak };
2648c816d56SBartosz Dudziak 
2658c816d56SBartosz Dudziak static const struct regulator_desc pm8226_ftsmps = {
2668c816d56SBartosz Dudziak 	.linear_ranges = (struct linear_range[]) {
2678c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(350000,    0, 184,  5000),
2688c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),
2698c816d56SBartosz Dudziak 	},
2708c816d56SBartosz Dudziak 	.n_linear_ranges = 2,
2718c816d56SBartosz Dudziak 	.n_voltages = 262,
2728c816d56SBartosz Dudziak 	.ops = &rpm_smps_ldo_ops,
2738c816d56SBartosz Dudziak };
2748c816d56SBartosz Dudziak 
2758c816d56SBartosz Dudziak static const struct regulator_desc pm8226_pldo = {
2768c816d56SBartosz Dudziak 	.linear_ranges = (struct linear_range[]) {
2778c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(750000,    0,  63, 12500),
2788c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(1550000,  64, 126, 25000),
2798c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),
2808c816d56SBartosz Dudziak 	},
2818c816d56SBartosz Dudziak 	.n_linear_ranges = 3,
2828c816d56SBartosz Dudziak 	.n_voltages = 164,
2838c816d56SBartosz Dudziak 	.ops = &rpm_smps_ldo_ops,
2848c816d56SBartosz Dudziak };
2858c816d56SBartosz Dudziak 
2868c816d56SBartosz Dudziak static const struct regulator_desc pm8226_nldo = {
2878c816d56SBartosz Dudziak 	.linear_ranges = (struct linear_range[]) {
2888c816d56SBartosz Dudziak 		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),
2898c816d56SBartosz Dudziak 	},
2908c816d56SBartosz Dudziak 	.n_linear_ranges = 1,
2918c816d56SBartosz Dudziak 	.n_voltages = 64,
2928c816d56SBartosz Dudziak 	.ops = &rpm_smps_ldo_ops,
2938c816d56SBartosz Dudziak };
2948c816d56SBartosz Dudziak 
2958c816d56SBartosz Dudziak static const struct regulator_desc pm8226_switch = {
2968c816d56SBartosz Dudziak 	.ops = &rpm_switch_ops,
2978c816d56SBartosz Dudziak };
2988c816d56SBartosz Dudziak 
299da65e367SBjorn Andersson static const struct regulator_desc pm8x41_hfsmps = {
30060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
301da65e367SBjorn Andersson 		REGULATOR_LINEAR_RANGE( 375000,  0,  95, 12500),
302b7a8524cSStephen Boyd 		REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000),
303da65e367SBjorn Andersson 	},
304da65e367SBjorn Andersson 	.n_linear_ranges = 2,
305da65e367SBjorn Andersson 	.n_voltages = 159,
306da65e367SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
307da65e367SBjorn Andersson };
308da65e367SBjorn Andersson 
309da65e367SBjorn Andersson static const struct regulator_desc pm8841_ftsmps = {
31060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
311da65e367SBjorn Andersson 		REGULATOR_LINEAR_RANGE(350000,  0, 184, 5000),
31229028477SStephen Boyd 		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),
313da65e367SBjorn Andersson 	},
314da65e367SBjorn Andersson 	.n_linear_ranges = 2,
31529028477SStephen Boyd 	.n_voltages = 262,
316da65e367SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
317da65e367SBjorn Andersson };
318da65e367SBjorn Andersson 
319da65e367SBjorn Andersson static const struct regulator_desc pm8941_boost = {
32060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
32129028477SStephen Boyd 		REGULATOR_LINEAR_RANGE(4000000, 0, 30, 50000),
322da65e367SBjorn Andersson 	},
323da65e367SBjorn Andersson 	.n_linear_ranges = 1,
32429028477SStephen Boyd 	.n_voltages = 31,
325da65e367SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
326da65e367SBjorn Andersson };
327da65e367SBjorn Andersson 
328da65e367SBjorn Andersson static const struct regulator_desc pm8941_pldo = {
32960ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
33029028477SStephen Boyd 		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),
33129028477SStephen Boyd 		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),
33229028477SStephen Boyd 		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),
333da65e367SBjorn Andersson 	},
33429028477SStephen Boyd 	.n_linear_ranges = 3,
33529028477SStephen Boyd 	.n_voltages = 164,
336da65e367SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
337da65e367SBjorn Andersson };
338da65e367SBjorn Andersson 
339da65e367SBjorn Andersson static const struct regulator_desc pm8941_nldo = {
34060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
341da65e367SBjorn Andersson 		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),
342da65e367SBjorn Andersson 	},
343da65e367SBjorn Andersson 	.n_linear_ranges = 1,
344da65e367SBjorn Andersson 	.n_voltages = 64,
345da65e367SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
346da65e367SBjorn Andersson };
347da65e367SBjorn Andersson 
348da65e367SBjorn Andersson static const struct regulator_desc pm8941_lnldo = {
349da65e367SBjorn Andersson 	.fixed_uV = 1740000,
3505a286aaeSAxel Lin 	.n_voltages = 1,
351d1e44b6bSSrinivas Kandagatla 	.ops = &rpm_smps_ldo_ops_fixed,
352da65e367SBjorn Andersson };
353da65e367SBjorn Andersson 
354da65e367SBjorn Andersson static const struct regulator_desc pm8941_switch = {
355da65e367SBjorn Andersson 	.ops = &rpm_switch_ops,
356da65e367SBjorn Andersson };
357da65e367SBjorn Andersson 
35857d65676SAndy Gross static const struct regulator_desc pm8916_pldo = {
35960ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
360e8977917SStephan Gerhold 		REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500),
36157d65676SAndy Gross 	},
36257d65676SAndy Gross 	.n_linear_ranges = 1,
363e8977917SStephan Gerhold 	.n_voltages = 128,
36457d65676SAndy Gross 	.ops = &rpm_smps_ldo_ops,
36557d65676SAndy Gross };
36657d65676SAndy Gross 
36757d65676SAndy Gross static const struct regulator_desc pm8916_nldo = {
36860ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
36957d65676SAndy Gross 		REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500),
37057d65676SAndy Gross 	},
37157d65676SAndy Gross 	.n_linear_ranges = 1,
37257d65676SAndy Gross 	.n_voltages = 94,
37357d65676SAndy Gross 	.ops = &rpm_smps_ldo_ops,
37457d65676SAndy Gross };
37557d65676SAndy Gross 
37657d65676SAndy Gross static const struct regulator_desc pm8916_buck_lvo_smps = {
37760ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
37857d65676SAndy Gross 		REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500),
37957d65676SAndy Gross 		REGULATOR_LINEAR_RANGE(750000, 96, 127, 25000),
38057d65676SAndy Gross 	},
38157d65676SAndy Gross 	.n_linear_ranges = 2,
38257d65676SAndy Gross 	.n_voltages = 128,
38357d65676SAndy Gross 	.ops = &rpm_smps_ldo_ops,
38457d65676SAndy Gross };
38557d65676SAndy Gross 
38657d65676SAndy Gross static const struct regulator_desc pm8916_buck_hvo_smps = {
38760ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
38857d65676SAndy Gross 		REGULATOR_LINEAR_RANGE(1550000, 0, 31, 25000),
38957d65676SAndy Gross 	},
39057d65676SAndy Gross 	.n_linear_ranges = 1,
39157d65676SAndy Gross 	.n_voltages = 32,
39257d65676SAndy Gross 	.ops = &rpm_smps_ldo_ops,
39357d65676SAndy Gross };
39457d65676SAndy Gross 
395e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_hfsmps = {
39660ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
397e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500),
398e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(1550000, 96, 127, 25000),
399e44adca5SAngelo G. Del Regno 	},
400e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 2,
401e44adca5SAngelo G. Del Regno 	.n_voltages = 128,
402e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
403e44adca5SAngelo G. Del Regno };
404e44adca5SAngelo G. Del Regno 
405e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_ftsmps2p5 = {
40660ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
407e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(80000, 0, 255, 5000),
408e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(160000, 256, 460, 10000),
409e44adca5SAngelo G. Del Regno 	},
410e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 2,
411e44adca5SAngelo G. Del Regno 	.n_voltages = 461,
412e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
413e44adca5SAngelo G. Del Regno };
414e44adca5SAngelo G. Del Regno 
415e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_ult_nldo = {
41660ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
417e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(375000, 0, 202, 12500),
418e44adca5SAngelo G. Del Regno 	},
419e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 1,
420e44adca5SAngelo G. Del Regno 	.n_voltages = 203,
421e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
422e44adca5SAngelo G. Del Regno };
423e44adca5SAngelo G. Del Regno 
424e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_ult_pldo = {
42560ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
426e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500),
427e44adca5SAngelo G. Del Regno 	},
428e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 1,
429e44adca5SAngelo G. Del Regno 	.n_voltages = 128,
430e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
431e44adca5SAngelo G. Del Regno };
432e44adca5SAngelo G. Del Regno 
433e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_pldo_lv = {
43460ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
435e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(1500000, 0, 16, 25000),
436e44adca5SAngelo G. Del Regno 	},
437e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 1,
438e44adca5SAngelo G. Del Regno 	.n_voltages = 17,
439e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
440e44adca5SAngelo G. Del Regno };
441e44adca5SAngelo G. Del Regno 
442e44adca5SAngelo G. Del Regno static const struct regulator_desc pm8950_pldo = {
44360ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
444e44adca5SAngelo G. Del Regno 		REGULATOR_LINEAR_RANGE(975000, 0, 164, 12500),
445e44adca5SAngelo G. Del Regno 	},
446e44adca5SAngelo G. Del Regno 	.n_linear_ranges = 1,
447e44adca5SAngelo G. Del Regno 	.n_voltages = 165,
448e44adca5SAngelo G. Del Regno 	.ops = &rpm_smps_ldo_ops,
449e44adca5SAngelo G. Del Regno };
450e44adca5SAngelo G. Del Regno 
451b1a2fb10SVladimir Lypak static const struct regulator_desc pm8953_lnldo = {
452b1a2fb10SVladimir Lypak 	.linear_ranges = (struct linear_range[]) {
453b1a2fb10SVladimir Lypak 		REGULATOR_LINEAR_RANGE(690000, 0, 7, 60000),
454e0f33921SAxel Lin 		REGULATOR_LINEAR_RANGE(1380000, 8, 15, 120000),
455b1a2fb10SVladimir Lypak 	},
456b1a2fb10SVladimir Lypak 	.n_linear_ranges = 2,
457b1a2fb10SVladimir Lypak 	.n_voltages = 16,
458b1a2fb10SVladimir Lypak 	.ops = &rpm_smps_ldo_ops,
459b1a2fb10SVladimir Lypak };
460b1a2fb10SVladimir Lypak 
461b1a2fb10SVladimir Lypak static const struct regulator_desc pm8953_ult_nldo = {
462b1a2fb10SVladimir Lypak 	.linear_ranges = (struct linear_range[]) {
463b1a2fb10SVladimir Lypak 		REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500),
464b1a2fb10SVladimir Lypak 	},
465b1a2fb10SVladimir Lypak 	.n_linear_ranges = 1,
466b1a2fb10SVladimir Lypak 	.n_voltages = 94,
467b1a2fb10SVladimir Lypak 	.ops = &rpm_smps_ldo_ops,
468b1a2fb10SVladimir Lypak };
469e44adca5SAngelo G. Del Regno 
47014a16992SRajendra Nayak static const struct regulator_desc pm8994_hfsmps = {
47160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
47214a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE( 375000,  0,  95, 12500),
47314a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000),
47414a16992SRajendra Nayak 	},
47514a16992SRajendra Nayak 	.n_linear_ranges = 2,
47614a16992SRajendra Nayak 	.n_voltages = 159,
47714a16992SRajendra Nayak 	.ops = &rpm_smps_ldo_ops,
47814a16992SRajendra Nayak };
47914a16992SRajendra Nayak 
48014a16992SRajendra Nayak static const struct regulator_desc pm8994_ftsmps = {
48160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
48214a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(350000,  0, 199, 5000),
48314a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000),
48414a16992SRajendra Nayak 	},
48514a16992SRajendra Nayak 	.n_linear_ranges = 2,
48614a16992SRajendra Nayak 	.n_voltages = 350,
48714a16992SRajendra Nayak 	.ops = &rpm_smps_ldo_ops,
48814a16992SRajendra Nayak };
48914a16992SRajendra Nayak 
49014a16992SRajendra Nayak static const struct regulator_desc pm8994_nldo = {
49160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
49214a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),
49314a16992SRajendra Nayak 	},
49414a16992SRajendra Nayak 	.n_linear_ranges = 1,
49514a16992SRajendra Nayak 	.n_voltages = 64,
49614a16992SRajendra Nayak 	.ops = &rpm_smps_ldo_ops,
49714a16992SRajendra Nayak };
49814a16992SRajendra Nayak 
49914a16992SRajendra Nayak static const struct regulator_desc pm8994_pldo = {
50060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
50114a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),
50214a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),
50314a16992SRajendra Nayak 		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),
50414a16992SRajendra Nayak 	},
50514a16992SRajendra Nayak 	.n_linear_ranges = 3,
50614a16992SRajendra Nayak 	.n_voltages = 164,
50714a16992SRajendra Nayak 	.ops = &rpm_smps_ldo_ops,
50814a16992SRajendra Nayak };
50914a16992SRajendra Nayak 
51014a16992SRajendra Nayak static const struct regulator_desc pm8994_switch = {
51114a16992SRajendra Nayak 	.ops = &rpm_switch_ops,
51214a16992SRajendra Nayak };
51314a16992SRajendra Nayak 
51414a16992SRajendra Nayak static const struct regulator_desc pm8994_lnldo = {
51514a16992SRajendra Nayak 	.fixed_uV = 1740000,
51614a16992SRajendra Nayak 	.n_voltages = 1,
51714a16992SRajendra Nayak 	.ops = &rpm_smps_ldo_ops_fixed,
51814a16992SRajendra Nayak };
51914a16992SRajendra Nayak 
52086332c34SBjorn Andersson static const struct regulator_desc pmi8994_ftsmps = {
52160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
52286332c34SBjorn Andersson 		REGULATOR_LINEAR_RANGE(350000,  0, 199, 5000),
52386332c34SBjorn Andersson 		REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000),
52486332c34SBjorn Andersson 	},
52586332c34SBjorn Andersson 	.n_linear_ranges = 2,
52686332c34SBjorn Andersson 	.n_voltages = 350,
52786332c34SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
52886332c34SBjorn Andersson };
52986332c34SBjorn Andersson 
53086332c34SBjorn Andersson static const struct regulator_desc pmi8994_hfsmps = {
53160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
53286332c34SBjorn Andersson 		REGULATOR_LINEAR_RANGE(350000,  0,  80, 12500),
53386332c34SBjorn Andersson 		REGULATOR_LINEAR_RANGE(700000, 81, 141, 25000),
53486332c34SBjorn Andersson 	},
53586332c34SBjorn Andersson 	.n_linear_ranges = 2,
53686332c34SBjorn Andersson 	.n_voltages = 142,
53786332c34SBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
53886332c34SBjorn Andersson };
53986332c34SBjorn Andersson 
54086332c34SBjorn Andersson static const struct regulator_desc pmi8994_bby = {
54160ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
54286332c34SBjorn Andersson 		REGULATOR_LINEAR_RANGE(3000000, 0, 44, 50000),
54386332c34SBjorn Andersson 	},
54486332c34SBjorn Andersson 	.n_linear_ranges = 1,
54586332c34SBjorn Andersson 	.n_voltages = 45,
54686332c34SBjorn Andersson 	.ops = &rpm_bob_ops,
54786332c34SBjorn Andersson };
54886332c34SBjorn Andersson 
5493cdb741eSBjorn Andersson static const struct regulator_desc pm8998_ftsmps = {
55060ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
5513cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),
5523cdb741eSBjorn Andersson 	},
5533cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
5543cdb741eSBjorn Andersson 	.n_voltages = 259,
5553cdb741eSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
5563cdb741eSBjorn Andersson };
5573cdb741eSBjorn Andersson 
5583cdb741eSBjorn Andersson static const struct regulator_desc pm8998_hfsmps = {
55960ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
5603cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
5613cdb741eSBjorn Andersson 	},
5623cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
5633cdb741eSBjorn Andersson 	.n_voltages = 216,
5643cdb741eSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
5653cdb741eSBjorn Andersson };
5663cdb741eSBjorn Andersson 
5673cdb741eSBjorn Andersson static const struct regulator_desc pm8998_nldo = {
56860ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
5693cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
5703cdb741eSBjorn Andersson 	},
5713cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
5723cdb741eSBjorn Andersson 	.n_voltages = 128,
5733cdb741eSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
5743cdb741eSBjorn Andersson };
5753cdb741eSBjorn Andersson 
5763cdb741eSBjorn Andersson static const struct regulator_desc pm8998_pldo = {
57760ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
5783cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),
5793cdb741eSBjorn Andersson 	},
5803cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
5813cdb741eSBjorn Andersson 	.n_voltages = 256,
5823cdb741eSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
5833cdb741eSBjorn Andersson };
5843cdb741eSBjorn Andersson 
5853cdb741eSBjorn Andersson static const struct regulator_desc pm8998_pldo_lv = {
58660ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
5873cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),
5883cdb741eSBjorn Andersson 	},
5893cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
5903cdb741eSBjorn Andersson 	.n_voltages = 128,
5913cdb741eSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
5923cdb741eSBjorn Andersson };
5933cdb741eSBjorn Andersson 
5943cdb741eSBjorn Andersson static const struct regulator_desc pm8998_switch = {
5953cdb741eSBjorn Andersson 	.ops = &rpm_switch_ops,
5963cdb741eSBjorn Andersson };
5973cdb741eSBjorn Andersson 
5983cdb741eSBjorn Andersson static const struct regulator_desc pmi8998_bob = {
59960ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
6003cdb741eSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),
6013cdb741eSBjorn Andersson 	},
6023cdb741eSBjorn Andersson 	.n_linear_ranges = 1,
6033cdb741eSBjorn Andersson 	.n_voltages = 84,
6043cdb741eSBjorn Andersson 	.ops = &rpm_bob_ops,
6053cdb741eSBjorn Andersson };
6063cdb741eSBjorn Andersson 
6076d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_ftsmps = {
6086d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6096d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(355000, 0, 199, 5000),
6106d849653SAngeloGioacchino Del Regno 	},
6116d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6126d849653SAngeloGioacchino Del Regno 	.n_voltages = 200,
6136d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6146d849653SAngeloGioacchino Del Regno };
6156d849653SAngeloGioacchino Del Regno 
6166d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_hfsmps = {
6176d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6186d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(320000, 0, 216, 8000),
6196d849653SAngeloGioacchino Del Regno 	},
6206d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6216d849653SAngeloGioacchino Del Regno 	.n_voltages = 217,
6226d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6236d849653SAngeloGioacchino Del Regno };
6246d849653SAngeloGioacchino Del Regno 
6256d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_ht_nldo = {
6266d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6276d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(312000, 0, 124, 8000),
6286d849653SAngeloGioacchino Del Regno 	},
6296d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6306d849653SAngeloGioacchino Del Regno 	.n_voltages = 125,
6316d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6326d849653SAngeloGioacchino Del Regno };
6336d849653SAngeloGioacchino Del Regno 
6346d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_ht_lvpldo = {
6356d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6366d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),
6376d849653SAngeloGioacchino Del Regno 	},
6386d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6396d849653SAngeloGioacchino Del Regno 	.n_voltages = 63,
6406d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6416d849653SAngeloGioacchino Del Regno };
6426d849653SAngeloGioacchino Del Regno 
6436d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_nldo660 = {
6446d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6456d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),
6466d849653SAngeloGioacchino Del Regno 	},
6476d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6486d849653SAngeloGioacchino Del Regno 	.n_voltages = 124,
6496d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6506d849653SAngeloGioacchino Del Regno };
6516d849653SAngeloGioacchino Del Regno 
6526d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660_pldo660 = {
6536d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6546d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),
6556d849653SAngeloGioacchino Del Regno 	},
6566d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6576d849653SAngeloGioacchino Del Regno 	.n_voltages = 256,
6586d849653SAngeloGioacchino Del Regno 	.ops = &rpm_smps_ldo_ops,
6596d849653SAngeloGioacchino Del Regno };
6606d849653SAngeloGioacchino Del Regno 
6616d849653SAngeloGioacchino Del Regno static const struct regulator_desc pm660l_bob = {
6626d849653SAngeloGioacchino Del Regno 	.linear_ranges = (struct linear_range[]) {
6636d849653SAngeloGioacchino Del Regno 		REGULATOR_LINEAR_RANGE(1800000, 0, 84, 32000),
6646d849653SAngeloGioacchino Del Regno 	},
6656d849653SAngeloGioacchino Del Regno 	.n_linear_ranges = 1,
6666d849653SAngeloGioacchino Del Regno 	.n_voltages = 85,
6676d849653SAngeloGioacchino Del Regno 	.ops = &rpm_bob_ops,
6686d849653SAngeloGioacchino Del Regno };
6696d849653SAngeloGioacchino Del Regno 
67095b5f3efSIskren Chernev static const struct regulator_desc pm6125_ftsmps = {
67195b5f3efSIskren Chernev 	.linear_ranges = (struct linear_range[]) {
67295b5f3efSIskren Chernev 		REGULATOR_LINEAR_RANGE(300000, 0, 268, 4000),
67395b5f3efSIskren Chernev 	},
67495b5f3efSIskren Chernev 	.n_linear_ranges = 1,
67595b5f3efSIskren Chernev 	.n_voltages = 269,
67695b5f3efSIskren Chernev 	.ops = &rpm_smps_ldo_ops,
67795b5f3efSIskren Chernev };
67895b5f3efSIskren Chernev 
6790cda8c43SKonrad Dybcio static const struct regulator_desc pmic5_ftsmps520 = {
6800cda8c43SKonrad Dybcio 	.linear_ranges = (struct linear_range[]) {
6810cda8c43SKonrad Dybcio 		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),
6820cda8c43SKonrad Dybcio 	},
6830cda8c43SKonrad Dybcio 	.n_linear_ranges = 1,
6840cda8c43SKonrad Dybcio 	.n_voltages = 264,
6850cda8c43SKonrad Dybcio 	.ops = &rpm_smps_ldo_ops,
6860cda8c43SKonrad Dybcio };
6870cda8c43SKonrad Dybcio 
68891016037SKonrad Dybcio static const struct regulator_desc pmic5_hfsmps515 = {
68991016037SKonrad Dybcio 	.linear_ranges = (struct linear_range[]) {
69091016037SKonrad Dybcio 		REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),
69191016037SKonrad Dybcio 	},
69291016037SKonrad Dybcio 	.n_linear_ranges = 1,
69391016037SKonrad Dybcio 	.n_voltages = 236,
69491016037SKonrad Dybcio 	.ops = &rpm_smps_ldo_ops,
69591016037SKonrad Dybcio };
69691016037SKonrad Dybcio 
697f589d95bSBjorn Andersson static const struct regulator_desc pms405_hfsmps3 = {
69860ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
699f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),
700f589d95bSBjorn Andersson 	},
701f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
702f589d95bSBjorn Andersson 	.n_voltages = 216,
703f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
704f589d95bSBjorn Andersson };
705f589d95bSBjorn Andersson 
706f589d95bSBjorn Andersson static const struct regulator_desc pms405_nldo300 = {
70760ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
708f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
709f589d95bSBjorn Andersson 	},
710f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
711f589d95bSBjorn Andersson 	.n_voltages = 128,
712f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
713f589d95bSBjorn Andersson };
714f589d95bSBjorn Andersson 
715f589d95bSBjorn Andersson static const struct regulator_desc pms405_nldo1200 = {
71660ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
717f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),
718f589d95bSBjorn Andersson 	},
719f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
720f589d95bSBjorn Andersson 	.n_voltages = 128,
721f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
722f589d95bSBjorn Andersson };
723f589d95bSBjorn Andersson 
724f589d95bSBjorn Andersson static const struct regulator_desc pms405_pldo50 = {
72560ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
726f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000),
727f589d95bSBjorn Andersson 	},
728f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
729f589d95bSBjorn Andersson 	.n_voltages = 129,
730f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
731f589d95bSBjorn Andersson };
732f589d95bSBjorn Andersson 
733f589d95bSBjorn Andersson static const struct regulator_desc pms405_pldo150 = {
73460ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
735f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000),
736f589d95bSBjorn Andersson 	},
737f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
738f589d95bSBjorn Andersson 	.n_voltages = 129,
739f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
740f589d95bSBjorn Andersson };
741f589d95bSBjorn Andersson 
742f589d95bSBjorn Andersson static const struct regulator_desc pms405_pldo600 = {
74360ab7f41SMatti Vaittinen 	.linear_ranges = (struct linear_range[]) {
744f589d95bSBjorn Andersson 		REGULATOR_LINEAR_RANGE(1256000, 0, 98, 8000),
745f589d95bSBjorn Andersson 	},
746f589d95bSBjorn Andersson 	.n_linear_ranges = 1,
747f589d95bSBjorn Andersson 	.n_voltages = 99,
748f589d95bSBjorn Andersson 	.ops = &rpm_smps_ldo_ops,
749f589d95bSBjorn Andersson };
750f589d95bSBjorn Andersson 
751*60bbee7dSDevi Priya static const struct regulator_desc mp5496_smps = {
75247894c85SKathiravan T 	.linear_ranges = (struct linear_range[]) {
753122e951eSRobert Marko 		REGULATOR_LINEAR_RANGE(600000, 0, 127, 12500),
75447894c85SKathiravan T 	},
75547894c85SKathiravan T 	.n_linear_ranges = 1,
756122e951eSRobert Marko 	.n_voltages = 128,
75747894c85SKathiravan T 	.ops = &rpm_mp5496_ops,
75847894c85SKathiravan T };
75947894c85SKathiravan T 
76047894c85SKathiravan T static const struct regulator_desc mp5496_ldoa2 = {
76147894c85SKathiravan T 	.linear_ranges = (struct linear_range[]) {
762122e951eSRobert Marko 		REGULATOR_LINEAR_RANGE(800000, 0, 127, 25000),
76347894c85SKathiravan T 	},
76447894c85SKathiravan T 	.n_linear_ranges = 1,
765122e951eSRobert Marko 	.n_voltages = 128,
76647894c85SKathiravan T 	.ops = &rpm_mp5496_ops,
76747894c85SKathiravan T };
76847894c85SKathiravan T 
769400c9315SShawn Guo static const struct regulator_desc pm2250_lvftsmps = {
770400c9315SShawn Guo 	.linear_ranges = (struct linear_range[]) {
771400c9315SShawn Guo 		REGULATOR_LINEAR_RANGE(320000, 0, 269, 4000),
772400c9315SShawn Guo 	},
773400c9315SShawn Guo 	.n_linear_ranges = 1,
774400c9315SShawn Guo 	.n_voltages = 270,
775400c9315SShawn Guo 	.ops = &rpm_smps_ldo_ops,
776400c9315SShawn Guo };
777400c9315SShawn Guo 
778400c9315SShawn Guo static const struct regulator_desc pm2250_ftsmps = {
779400c9315SShawn Guo 	.linear_ranges = (struct linear_range[]) {
780400c9315SShawn Guo 		REGULATOR_LINEAR_RANGE(640000, 0, 269, 8000),
781400c9315SShawn Guo 	},
782400c9315SShawn Guo 	.n_linear_ranges = 1,
783400c9315SShawn Guo 	.n_voltages = 270,
784400c9315SShawn Guo 	.ops = &rpm_smps_ldo_ops,
785400c9315SShawn Guo };
786400c9315SShawn Guo 
787da65e367SBjorn Andersson struct rpm_regulator_data {
788da65e367SBjorn Andersson 	const char *name;
789da65e367SBjorn Andersson 	u32 type;
790da65e367SBjorn Andersson 	u32 id;
791da65e367SBjorn Andersson 	const struct regulator_desc *desc;
792da65e367SBjorn Andersson 	const char *supply;
793da65e367SBjorn Andersson };
794da65e367SBjorn Andersson 
79547894c85SKathiravan T static const struct rpm_regulator_data rpm_mp5496_regulators[] = {
796*60bbee7dSDevi Priya 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &mp5496_smps, "s1" },
797*60bbee7dSDevi Priya 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &mp5496_smps, "s2" },
79847894c85SKathiravan T 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &mp5496_ldoa2, "l2" },
79947894c85SKathiravan T 	{}
80047894c85SKathiravan T };
80147894c85SKathiravan T 
80213b3d005SIskren Chernev static const struct rpm_regulator_data rpm_pm2250_regulators[] = {
80313b3d005SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm2250_lvftsmps, "vdd_s1" },
80413b3d005SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm2250_lvftsmps, "vdd_s2" },
80513b3d005SIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm2250_lvftsmps, "vdd_s3" },
80613b3d005SIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm2250_ftsmps, "vdd_s4" },
80713b3d005SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
80813b3d005SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
80913b3d005SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81013b3d005SIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
81113b3d005SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81213b3d005SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81313b3d005SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81413b3d005SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81513b3d005SIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81613b3d005SIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81713b3d005SIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81813b3d005SIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },
81913b3d005SIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },
82013b3d005SIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },
82113b3d005SIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },
82213b3d005SIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },
82313b3d005SIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82413b3d005SIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82513b3d005SIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82613b3d005SIskren Chernev 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82713b3d005SIskren Chernev 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82813b3d005SIskren Chernev 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },
82913b3d005SIskren Chernev 	{}
83013b3d005SIskren Chernev };
83113b3d005SIskren Chernev 
83295b5f3efSIskren Chernev static const struct rpm_regulator_data rpm_pm6125_regulators[] = {
83395b5f3efSIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm6125_ftsmps, "vdd_s1" },
83495b5f3efSIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm6125_ftsmps, "vdd_s2" },
83595b5f3efSIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm6125_ftsmps, "vdd_s3" },
83695b5f3efSIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm6125_ftsmps, "vdd_s4" },
83795b5f3efSIskren Chernev 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8998_hfsmps, "vdd_s5" },
83895b5f3efSIskren Chernev 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8998_hfsmps, "vdd_s6" },
83995b5f3efSIskren Chernev 	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_hfsmps, "vdd_s7" },
84095b5f3efSIskren Chernev 	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm6125_ftsmps, "vdd_s8" },
84195b5f3efSIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l7_l17_l18" },
84295b5f3efSIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_nldo660, "vdd_l2_l3_l4" },
84395b5f3efSIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3_l4" },
84495b5f3efSIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm660_nldo660, "vdd_l2_l3_l4" },
84595b5f3efSIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
84695b5f3efSIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_nldo660, "vdd_l6_l8" },
84795b5f3efSIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_nldo660, "vdd_l1_l7_l17_l18" },
84895b5f3efSIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_nldo660, "vdd_l6_l8" },
84995b5f3efSIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l9_l11" },
85095b5f3efSIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },
85195b5f3efSIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l9_l11" },
85295b5f3efSIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l12_l16" },
85395b5f3efSIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },
85495b5f3efSIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },
85595b5f3efSIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
85695b5f3efSIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_ht_lvpldo, "vdd_l12_l16" },
85795b5f3efSIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_nldo660, "vdd_l1_l7_l17_l18" },
85895b5f3efSIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_nldo660, "vdd_l1_l7_l17_l18" },
85995b5f3efSIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
86095b5f3efSIskren Chernev 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
86195b5f3efSIskren Chernev 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
86295b5f3efSIskren Chernev 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },
86395b5f3efSIskren Chernev 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm660_pldo660, "vdd_l23_l24" },
86495b5f3efSIskren Chernev 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm660_pldo660, "vdd_l23_l24" },
86595b5f3efSIskren Chernev 	{ }
86695b5f3efSIskren Chernev };
86795b5f3efSIskren Chernev 
868a39d0100SIskren Chernev static const struct rpm_regulator_data rpm_pm660_regulators[] = {
869a39d0100SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm660_ftsmps, "vdd_s1" },
870a39d0100SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm660_ftsmps, "vdd_s2" },
871a39d0100SIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm660_ftsmps, "vdd_s3" },
872a39d0100SIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm660_hfsmps, "vdd_s4" },
873a39d0100SIskren Chernev 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm660_hfsmps, "vdd_s5" },
874a39d0100SIskren Chernev 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm660_hfsmps, "vdd_s6" },
875a39d0100SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l6_l7" },
876a39d0100SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_ht_nldo, "vdd_l2_l3" },
877a39d0100SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3" },
878a39d0100SIskren Chernev 	/* l4 is unaccessible on PM660 */
879a39d0100SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_ht_nldo, "vdd_l5" },
880a39d0100SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_ht_nldo, "vdd_l1_l6_l7" },
881a39d0100SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_ht_nldo, "vdd_l1_l6_l7" },
882a39d0100SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
883a39d0100SIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
884a39d0100SIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
885a39d0100SIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
886a39d0100SIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
887a39d0100SIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
888a39d0100SIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },
889a39d0100SIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },
890a39d0100SIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },
891a39d0100SIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },
892a39d0100SIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },
893a39d0100SIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },
894a39d0100SIskren Chernev 	{ }
895a39d0100SIskren Chernev };
896a39d0100SIskren Chernev 
897a39d0100SIskren Chernev static const struct rpm_regulator_data rpm_pm660l_regulators[] = {
898a39d0100SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pm660_ftsmps, "vdd_s1" },
899a39d0100SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pm660_ftsmps, "vdd_s2" },
900a39d0100SIskren Chernev 	{ "s3", QCOM_SMD_RPM_RWCX, 0, &pm660_ftsmps, "vdd_s3_s4" },
901a39d0100SIskren Chernev 	{ "s5", QCOM_SMD_RPM_RWMX, 0, &pm660_ftsmps, "vdd_s5" },
902a39d0100SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOB, 1, &pm660_nldo660, "vdd_l1_l9_l10" },
903a39d0100SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOB, 2, &pm660_pldo660, "vdd_l2" },
904a39d0100SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOB, 3, &pm660_pldo660, "vdd_l3_l5_l7_l8" },
905a39d0100SIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOB, 4, &pm660_pldo660, "vdd_l4_l6" },
906a39d0100SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOB, 5, &pm660_pldo660, "vdd_l3_l5_l7_l8" },
907a39d0100SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOB, 6, &pm660_pldo660, "vdd_l4_l6" },
908a39d0100SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOB, 7, &pm660_pldo660, "vdd_l3_l5_l7_l8" },
909a39d0100SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOB, 8, &pm660_pldo660, "vdd_l3_l5_l7_l8" },
910a39d0100SIskren Chernev 	{ "l9", QCOM_SMD_RPM_RWLC, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" },
911a39d0100SIskren Chernev 	{ "l10", QCOM_SMD_RPM_RWLM, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" },
912a39d0100SIskren Chernev 	{ "bob", QCOM_SMD_RPM_BOBB, 1, &pm660l_bob, "vdd_bob", },
913a39d0100SIskren Chernev 	{ }
914a39d0100SIskren Chernev };
915a39d0100SIskren Chernev 
9168e584e84SIskren Chernev static const struct rpm_regulator_data rpm_pm8226_regulators[] = {
9178e584e84SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8226_hfsmps, "vdd_s1" },
9188e584e84SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8226_ftsmps, "vdd_s2" },
9198e584e84SIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8226_hfsmps, "vdd_s3" },
9208e584e84SIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8226_hfsmps, "vdd_s4" },
9218e584e84SIskren Chernev 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8226_hfsmps, "vdd_s5" },
9228e584e84SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8226_nldo, "vdd_l1_l2_l4_l5" },
9238e584e84SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8226_nldo, "vdd_l1_l2_l4_l5" },
9248e584e84SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8226_nldo, "vdd_l3_l24_l26" },
9258e584e84SIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8226_nldo, "vdd_l1_l2_l4_l5" },
9268e584e84SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8226_nldo, "vdd_l1_l2_l4_l5" },
9278e584e84SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },
9288e584e84SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },
9298e584e84SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },
9308e584e84SIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },
9318e584e84SIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8226_pldo, "vdd_l10_l11_l13" },
9328e584e84SIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8226_pldo, "vdd_l10_l11_l13" },
9338e584e84SIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8226_pldo, "vdd_l12_l14" },
9348e584e84SIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8226_pldo, "vdd_l10_l11_l13" },
9358e584e84SIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8226_pldo, "vdd_l12_l14" },
9368e584e84SIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8226_pldo, "vdd_l15_l16_l17_l18" },
9378e584e84SIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8226_pldo, "vdd_l15_l16_l17_l18" },
9388e584e84SIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8226_pldo, "vdd_l15_l16_l17_l18" },
9398e584e84SIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8226_pldo, "vdd_l15_l16_l17_l18" },
9408e584e84SIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9418e584e84SIskren Chernev 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9428e584e84SIskren Chernev 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9438e584e84SIskren Chernev 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9448e584e84SIskren Chernev 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9458e584e84SIskren Chernev 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8226_nldo, "vdd_l3_l24_l26" },
9468e584e84SIskren Chernev 	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8226_pldo, "vdd_l25" },
9478e584e84SIskren Chernev 	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8226_nldo, "vdd_l3_l24_l26" },
9488e584e84SIskren Chernev 	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },
9498e584e84SIskren Chernev 	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },
9508e584e84SIskren Chernev 	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8226_switch, "vdd_lvs1" },
9518e584e84SIskren Chernev 	{}
9528e584e84SIskren Chernev };
9538e584e84SIskren Chernev 
954da65e367SBjorn Andersson static const struct rpm_regulator_data rpm_pm8841_regulators[] = {
955da65e367SBjorn Andersson 	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pm8x41_hfsmps, "vdd_s1" },
956da65e367SBjorn Andersson 	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pm8841_ftsmps, "vdd_s2" },
957da65e367SBjorn Andersson 	{ "s3", QCOM_SMD_RPM_SMPB, 3, &pm8x41_hfsmps, "vdd_s3" },
958da65e367SBjorn Andersson 	{ "s4", QCOM_SMD_RPM_SMPB, 4, &pm8841_ftsmps, "vdd_s4" },
959da65e367SBjorn Andersson 	{ "s5", QCOM_SMD_RPM_SMPB, 5, &pm8841_ftsmps, "vdd_s5" },
960da65e367SBjorn Andersson 	{ "s6", QCOM_SMD_RPM_SMPB, 6, &pm8841_ftsmps, "vdd_s6" },
961da65e367SBjorn Andersson 	{ "s7", QCOM_SMD_RPM_SMPB, 7, &pm8841_ftsmps, "vdd_s7" },
962da65e367SBjorn Andersson 	{ "s8", QCOM_SMD_RPM_SMPB, 8, &pm8841_ftsmps, "vdd_s8" },
963da65e367SBjorn Andersson 	{}
964da65e367SBjorn Andersson };
965da65e367SBjorn Andersson 
966bc4d1932SStephan Gerhold static const struct rpm_regulator_data rpm_pm8909_regulators[] = {
967bc4d1932SStephan Gerhold 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8916_buck_lvo_smps, "vdd_s1" },
968bc4d1932SStephan Gerhold 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8916_buck_hvo_smps, "vdd_s2" },
969bc4d1932SStephan Gerhold 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8916_nldo, "vdd_l1" },
970bc4d1932SStephan Gerhold 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8916_nldo, "vdd_l2_l5" },
971bc4d1932SStephan Gerhold 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8916_nldo, "vdd_l3_l6_l10" },
972bc4d1932SStephan Gerhold 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8916_pldo, "vdd_l4_l7" },
973bc4d1932SStephan Gerhold 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8226_pldo, "vdd_l2_l5" },
974bc4d1932SStephan Gerhold 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8226_pldo, "vdd_l3_l6_l10" },
975bc4d1932SStephan Gerhold 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8226_pldo, "vdd_l4_l7" },
976bc4d1932SStephan Gerhold 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8916_pldo, "vdd_l8_l11_l15_l18" },
977bc4d1932SStephan Gerhold 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8916_pldo, "vdd_l9_l12_l14_l17" },
978bc4d1932SStephan Gerhold 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8916_nldo, "vdd_l3_l6_l10" },
979bc4d1932SStephan Gerhold 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8226_pldo, "vdd_l8_l11_l15_l18" },
980bc4d1932SStephan Gerhold 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8916_pldo, "vdd_l9_l12_l14_l17" },
981bc4d1932SStephan Gerhold 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8916_pldo, "vdd_l13" },
982bc4d1932SStephan Gerhold 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8916_pldo, "vdd_l9_l12_l14_l17" },
983bc4d1932SStephan Gerhold 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8916_pldo, "vdd_l8_l11_l15_l18" },
984bc4d1932SStephan Gerhold 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8916_pldo, "vdd_l9_l12_l14_l17" },
985bc4d1932SStephan Gerhold 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8916_pldo, "vdd_l8_l11_l15_l18" },
986bc4d1932SStephan Gerhold 	{}
987bc4d1932SStephan Gerhold };
988bc4d1932SStephan Gerhold 
98957d65676SAndy Gross static const struct rpm_regulator_data rpm_pm8916_regulators[] = {
99057d65676SAndy Gross 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8916_buck_lvo_smps, "vdd_s1" },
99157d65676SAndy Gross 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8916_buck_lvo_smps, "vdd_s2" },
99257d65676SAndy Gross 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8916_buck_lvo_smps, "vdd_s3" },
99357d65676SAndy Gross 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8916_buck_hvo_smps, "vdd_s4" },
99457d65676SAndy Gross 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8916_nldo, "vdd_l1_l2_l3" },
99557d65676SAndy Gross 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8916_nldo, "vdd_l1_l2_l3" },
99657d65676SAndy Gross 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8916_nldo, "vdd_l1_l2_l3" },
99757d65676SAndy Gross 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8916_pldo, "vdd_l4_l5_l6" },
99857d65676SAndy Gross 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8916_pldo, "vdd_l4_l5_l6" },
99957d65676SAndy Gross 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8916_pldo, "vdd_l4_l5_l6" },
100057d65676SAndy Gross 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8916_pldo, "vdd_l7" },
100157d65676SAndy Gross 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" },
100257d65676SAndy Gross 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" },
100357d65676SAndy Gross 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100457d65676SAndy Gross 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100557d65676SAndy Gross 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100657d65676SAndy Gross 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100757d65676SAndy Gross 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100857d65676SAndy Gross 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
100957d65676SAndy Gross 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
101057d65676SAndy Gross 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
101157d65676SAndy Gross 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},
101257d65676SAndy Gross 	{}
101357d65676SAndy Gross };
101457d65676SAndy Gross 
1015da65e367SBjorn Andersson static const struct rpm_regulator_data rpm_pm8941_regulators[] = {
1016da65e367SBjorn Andersson 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8x41_hfsmps, "vdd_s1" },
1017da65e367SBjorn Andersson 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8x41_hfsmps, "vdd_s2" },
1018da65e367SBjorn Andersson 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8x41_hfsmps, "vdd_s3" },
1019da65e367SBjorn Andersson 	{ "s4", QCOM_SMD_RPM_BOOST, 1, &pm8941_boost },
1020da65e367SBjorn Andersson 
1021da65e367SBjorn Andersson 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8941_nldo, "vdd_l1_l3" },
1022da65e367SBjorn Andersson 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8941_nldo, "vdd_l2_lvs1_2_3" },
1023da65e367SBjorn Andersson 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8941_nldo, "vdd_l1_l3" },
1024da65e367SBjorn Andersson 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8941_nldo, "vdd_l4_l11" },
1025da65e367SBjorn Andersson 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8941_lnldo, "vdd_l5_l7" },
1026da65e367SBjorn Andersson 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8941_pldo, "vdd_l6_l12_l14_l15" },
1027da65e367SBjorn Andersson 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8941_lnldo, "vdd_l5_l7" },
1028da65e367SBjorn Andersson 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8941_pldo, "vdd_l8_l16_l18_l19" },
1029da65e367SBjorn Andersson 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8941_pldo, "vdd_l9_l10_l17_l22" },
1030da65e367SBjorn Andersson 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8941_pldo, "vdd_l9_l10_l17_l22" },
1031da65e367SBjorn Andersson 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8941_nldo, "vdd_l4_l11" },
1032da65e367SBjorn Andersson 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8941_pldo, "vdd_l6_l12_l14_l15" },
1033da65e367SBjorn Andersson 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8941_pldo, "vdd_l13_l20_l23_l24" },
1034da65e367SBjorn Andersson 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8941_pldo, "vdd_l6_l12_l14_l15" },
1035da65e367SBjorn Andersson 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8941_pldo, "vdd_l6_l12_l14_l15" },
1036da65e367SBjorn Andersson 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8941_pldo, "vdd_l8_l16_l18_l19" },
1037da65e367SBjorn Andersson 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8941_pldo, "vdd_l9_l10_l17_l22" },
1038da65e367SBjorn Andersson 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8941_pldo, "vdd_l8_l16_l18_l19" },
1039da65e367SBjorn Andersson 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8941_pldo, "vdd_l8_l16_l18_l19" },
1040da65e367SBjorn Andersson 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8941_pldo, "vdd_l13_l20_l23_l24" },
1041da65e367SBjorn Andersson 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8941_pldo, "vdd_l21" },
1042da65e367SBjorn Andersson 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8941_pldo, "vdd_l9_l10_l17_l22" },
1043da65e367SBjorn Andersson 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8941_pldo, "vdd_l13_l20_l23_l24" },
1044da65e367SBjorn Andersson 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8941_pldo, "vdd_l13_l20_l23_l24" },
1045da65e367SBjorn Andersson 
1046da65e367SBjorn Andersson 	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8941_switch, "vdd_l2_lvs1_2_3" },
1047da65e367SBjorn Andersson 	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8941_switch, "vdd_l2_lvs1_2_3" },
1048da65e367SBjorn Andersson 	{ "lvs3", QCOM_SMD_RPM_VSA, 3, &pm8941_switch, "vdd_l2_lvs1_2_3" },
1049da65e367SBjorn Andersson 
1050da65e367SBjorn Andersson 	{ "5vs1", QCOM_SMD_RPM_VSA, 4, &pm8941_switch, "vin_5vs" },
1051da65e367SBjorn Andersson 	{ "5vs2", QCOM_SMD_RPM_VSA, 5, &pm8941_switch, "vin_5vs" },
1052da65e367SBjorn Andersson 
1053da65e367SBjorn Andersson 	{}
1054da65e367SBjorn Andersson };
1055da65e367SBjorn Andersson 
1056e44adca5SAngelo G. Del Regno static const struct rpm_regulator_data rpm_pm8950_regulators[] = {
1057e44adca5SAngelo G. Del Regno 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8950_hfsmps, "vdd_s1" },
1058e44adca5SAngelo G. Del Regno 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8950_hfsmps, "vdd_s2" },
1059e44adca5SAngelo G. Del Regno 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8950_hfsmps, "vdd_s3" },
1060e44adca5SAngelo G. Del Regno 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8950_hfsmps, "vdd_s4" },
1061b11b3d21SKonrad Dybcio 	/* S5 is managed via SPMI. */
1062e44adca5SAngelo G. Del Regno 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_hfsmps, "vdd_s6" },
1063e44adca5SAngelo G. Del Regno 
1064e44adca5SAngelo G. Del Regno 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8950_ult_nldo, "vdd_l1_l19" },
1065e44adca5SAngelo G. Del Regno 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8950_ult_nldo, "vdd_l2_l23" },
1066e44adca5SAngelo G. Del Regno 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8950_ult_nldo, "vdd_l3" },
1067b11b3d21SKonrad Dybcio 	/* L4 seems not to exist. */
1068b11b3d21SKonrad Dybcio 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },
1069b11b3d21SKonrad Dybcio 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },
1070b11b3d21SKonrad Dybcio 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },
1071e44adca5SAngelo G. Del Regno 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },
1072e44adca5SAngelo G. Del Regno 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },
1073e44adca5SAngelo G. Del Regno 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_nldo, "vdd_l9_l10_l13_l14_l15_l18"},
1074e44adca5SAngelo G. Del Regno 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },
1075e44adca5SAngelo G. Del Regno 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },
1076e44adca5SAngelo G. Del Regno 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },
1077e44adca5SAngelo G. Del Regno 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },
1078e44adca5SAngelo G. Del Regno 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },
1079b11b3d21SKonrad Dybcio 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l5_l6_l7_l16" },
1080e44adca5SAngelo G. Del Regno 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },
1081b11b3d21SKonrad Dybcio 	/* L18 seems not to exist. */
1082b11b3d21SKonrad Dybcio 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8950_pldo, "vdd_l1_l19" },
1083b11b3d21SKonrad Dybcio 	/* L20 & L21 seem not to exist. */
1084b11b3d21SKonrad Dybcio 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_pldo, "vdd_l8_l11_l12_l17_l22" },
1085b11b3d21SKonrad Dybcio 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8950_pldo, "vdd_l2_l23" },
1086e44adca5SAngelo G. Del Regno 	{}
1087e44adca5SAngelo G. Del Regno };
1088e44adca5SAngelo G. Del Regno 
1089b1a2fb10SVladimir Lypak static const struct rpm_regulator_data rpm_pm8953_regulators[] = {
1090b1a2fb10SVladimir Lypak 	{  "s1", QCOM_SMD_RPM_SMPA,  1, &pm8998_hfsmps, "vdd_s1" },
1091b1a2fb10SVladimir Lypak 	{  "s2", QCOM_SMD_RPM_SMPA,  2, &pm8998_hfsmps, "vdd_s2" },
1092b1a2fb10SVladimir Lypak 	{  "s3", QCOM_SMD_RPM_SMPA,  3, &pm8998_hfsmps, "vdd_s3" },
1093b1a2fb10SVladimir Lypak 	{  "s4", QCOM_SMD_RPM_SMPA,  4, &pm8998_hfsmps, "vdd_s4" },
1094b1a2fb10SVladimir Lypak 	{  "s5", QCOM_SMD_RPM_SMPA,  5, &pm8950_ftsmps2p5, "vdd_s5" },
1095b1a2fb10SVladimir Lypak 	{  "s6", QCOM_SMD_RPM_SMPA,  6, &pm8950_ftsmps2p5, "vdd_s6" },
1096b1a2fb10SVladimir Lypak 	{  "s7", QCOM_SMD_RPM_SMPA,  7, &pm8998_hfsmps, "vdd_s7" },
1097b1a2fb10SVladimir Lypak 
1098b1a2fb10SVladimir Lypak 	{  "l1", QCOM_SMD_RPM_LDOA,  1, &pm8953_ult_nldo, "vdd_l1" },
1099b1a2fb10SVladimir Lypak 	{  "l2", QCOM_SMD_RPM_LDOA,  2, &pm8953_ult_nldo, "vdd_l2_l3" },
1100b1a2fb10SVladimir Lypak 	{  "l3", QCOM_SMD_RPM_LDOA,  3, &pm8953_ult_nldo, "vdd_l2_l3" },
1101b1a2fb10SVladimir Lypak 	{  "l4", QCOM_SMD_RPM_LDOA,  4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },
1102b1a2fb10SVladimir Lypak 	{  "l5", QCOM_SMD_RPM_LDOA,  5, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },
1103b1a2fb10SVladimir Lypak 	{  "l6", QCOM_SMD_RPM_LDOA,  6, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },
1104b1a2fb10SVladimir Lypak 	{  "l7", QCOM_SMD_RPM_LDOA,  7, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },
1105b1a2fb10SVladimir Lypak 	{  "l8", QCOM_SMD_RPM_LDOA,  8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1106b1a2fb10SVladimir Lypak 	{  "l9", QCOM_SMD_RPM_LDOA,  9, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },
1107b1a2fb10SVladimir Lypak 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },
1108b1a2fb10SVladimir Lypak 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1109b1a2fb10SVladimir Lypak 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1110b1a2fb10SVladimir Lypak 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1111b1a2fb10SVladimir Lypak 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1112b1a2fb10SVladimir Lypak 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },
1113b1a2fb10SVladimir Lypak 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },
1114b1a2fb10SVladimir Lypak 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },
1115b1a2fb10SVladimir Lypak 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },
1116b1a2fb10SVladimir Lypak 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8953_ult_nldo, "vdd_l4_l5_l6_l7_l16_l19" },
1117b1a2fb10SVladimir Lypak 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8953_lnldo,    "vdd_l20" },
1118b1a2fb10SVladimir Lypak 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8953_lnldo,    "vdd_l21" },
1119b1a2fb10SVladimir Lypak 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },
1120b1a2fb10SVladimir Lypak 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8953_ult_nldo, "vdd_l23" },
1121b1a2fb10SVladimir Lypak 	{}
1122b1a2fb10SVladimir Lypak };
1123b1a2fb10SVladimir Lypak 
112414a16992SRajendra Nayak static const struct rpm_regulator_data rpm_pm8994_regulators[] = {
112514a16992SRajendra Nayak 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_ftsmps, "vdd_s1" },
112614a16992SRajendra Nayak 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_ftsmps, "vdd_s2" },
112714a16992SRajendra Nayak 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8994_hfsmps, "vdd_s3" },
112814a16992SRajendra Nayak 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8994_hfsmps, "vdd_s4" },
112914a16992SRajendra Nayak 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8994_hfsmps, "vdd_s5" },
113014a16992SRajendra Nayak 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8994_ftsmps, "vdd_s6" },
113114a16992SRajendra Nayak 	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8994_hfsmps, "vdd_s7" },
113214a16992SRajendra Nayak 	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm8994_ftsmps, "vdd_s8" },
113314a16992SRajendra Nayak 	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pm8994_ftsmps, "vdd_s9" },
113414a16992SRajendra Nayak 	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pm8994_ftsmps, "vdd_s10" },
113514a16992SRajendra Nayak 	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pm8994_ftsmps, "vdd_s11" },
113614a16992SRajendra Nayak 	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pm8994_ftsmps, "vdd_s12" },
113714a16992SRajendra Nayak 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8994_nldo, "vdd_l1" },
113814a16992SRajendra Nayak 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8994_nldo, "vdd_l2_l26_l28" },
113914a16992SRajendra Nayak 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8994_nldo, "vdd_l3_l11" },
114014a16992SRajendra Nayak 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8994_nldo, "vdd_l4_l27_l31" },
114114a16992SRajendra Nayak 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8994_lnldo, "vdd_l5_l7" },
114214a16992SRajendra Nayak 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8994_pldo, "vdd_l6_l12_l32" },
114314a16992SRajendra Nayak 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8994_lnldo, "vdd_l5_l7" },
114414a16992SRajendra Nayak 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8994_pldo, "vdd_l8_l16_l30" },
114514a16992SRajendra Nayak 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8994_pldo, "vdd_l9_l10_l18_l22" },
114614a16992SRajendra Nayak 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8994_pldo, "vdd_l9_l10_l18_l22" },
114714a16992SRajendra Nayak 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8994_nldo, "vdd_l3_l11" },
114814a16992SRajendra Nayak 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8994_pldo, "vdd_l6_l12_l32" },
114914a16992SRajendra Nayak 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8994_pldo, "vdd_l13_l19_l23_l24" },
115014a16992SRajendra Nayak 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8994_pldo, "vdd_l14_l15" },
115114a16992SRajendra Nayak 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8994_pldo, "vdd_l14_l15" },
115214a16992SRajendra Nayak 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8994_pldo, "vdd_l8_l16_l30" },
115314a16992SRajendra Nayak 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8994_pldo, "vdd_l17_l29" },
115414a16992SRajendra Nayak 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8994_pldo, "vdd_l9_l10_l18_l22" },
115514a16992SRajendra Nayak 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8994_pldo, "vdd_l13_l19_l23_l24" },
115614a16992SRajendra Nayak 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8994_pldo, "vdd_l20_l21" },
115714a16992SRajendra Nayak 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8994_pldo, "vdd_l20_l21" },
115814a16992SRajendra Nayak 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8994_pldo, "vdd_l9_l10_l18_l22" },
115914a16992SRajendra Nayak 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8994_pldo, "vdd_l13_l19_l23_l24" },
116014a16992SRajendra Nayak 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8994_pldo, "vdd_l13_l19_l23_l24" },
116114a16992SRajendra Nayak 	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8994_pldo, "vdd_l25" },
116214a16992SRajendra Nayak 	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8994_nldo, "vdd_l2_l26_l28" },
116314a16992SRajendra Nayak 	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8994_nldo, "vdd_l4_l27_l31" },
116414a16992SRajendra Nayak 	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8994_nldo, "vdd_l2_l26_l28" },
116514a16992SRajendra Nayak 	{ "l29", QCOM_SMD_RPM_LDOA, 29, &pm8994_pldo, "vdd_l17_l29" },
116614a16992SRajendra Nayak 	{ "l30", QCOM_SMD_RPM_LDOA, 30, &pm8994_pldo, "vdd_l8_l16_l30" },
116714a16992SRajendra Nayak 	{ "l31", QCOM_SMD_RPM_LDOA, 31, &pm8994_nldo, "vdd_l4_l27_l31" },
116814a16992SRajendra Nayak 	{ "l32", QCOM_SMD_RPM_LDOA, 32, &pm8994_pldo, "vdd_l6_l12_l32" },
116914a16992SRajendra Nayak 	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8994_switch, "vdd_lvs1_2" },
117014a16992SRajendra Nayak 	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8994_switch, "vdd_lvs1_2" },
117114a16992SRajendra Nayak 
117214a16992SRajendra Nayak 	{}
117314a16992SRajendra Nayak };
117414a16992SRajendra Nayak 
117513b3d005SIskren Chernev static const struct rpm_regulator_data rpm_pm8998_regulators[] = {
117613b3d005SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_ftsmps, "vdd_s1" },
117713b3d005SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_ftsmps, "vdd_s2" },
117813b3d005SIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8998_hfsmps, "vdd_s3" },
117913b3d005SIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8998_hfsmps, "vdd_s4" },
118013b3d005SIskren Chernev 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8998_hfsmps, "vdd_s5" },
118113b3d005SIskren Chernev 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8998_ftsmps, "vdd_s6" },
118213b3d005SIskren Chernev 	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_ftsmps, "vdd_s7" },
118313b3d005SIskren Chernev 	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm8998_ftsmps, "vdd_s8" },
118413b3d005SIskren Chernev 	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pm8998_ftsmps, "vdd_s9" },
118513b3d005SIskren Chernev 	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pm8998_ftsmps, "vdd_s10" },
118613b3d005SIskren Chernev 	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pm8998_ftsmps, "vdd_s11" },
118713b3d005SIskren Chernev 	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pm8998_ftsmps, "vdd_s12" },
118813b3d005SIskren Chernev 	{ "s13", QCOM_SMD_RPM_SMPA, 13, &pm8998_ftsmps, "vdd_s13" },
118913b3d005SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8998_nldo, "vdd_l1_l27" },
119013b3d005SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8998_nldo, "vdd_l2_l8_l17" },
119113b3d005SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8998_nldo, "vdd_l3_l11" },
119213b3d005SIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8998_nldo, "vdd_l4_l5" },
119313b3d005SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8998_nldo, "vdd_l4_l5" },
119413b3d005SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8998_pldo, "vdd_l6" },
119513b3d005SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },
119613b3d005SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8998_nldo, "vdd_l2_l8_l17" },
119713b3d005SIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8998_pldo, "vdd_l9" },
119813b3d005SIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8998_pldo, "vdd_l10_l23_l25" },
119913b3d005SIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8998_nldo, "vdd_l3_l11" },
120013b3d005SIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },
120113b3d005SIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8998_pldo, "vdd_l13_l19_l21" },
120213b3d005SIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },
120313b3d005SIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },
120413b3d005SIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8998_pldo, "vdd_l16_l28" },
120513b3d005SIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8998_nldo, "vdd_l2_l8_l17" },
120613b3d005SIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8998_pldo, "vdd_l18_l22" },
120713b3d005SIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8998_pldo, "vdd_l13_l19_l21" },
120813b3d005SIskren Chernev 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8998_pldo, "vdd_l20_l24" },
120913b3d005SIskren Chernev 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8998_pldo, "vdd_l13_l19_l21" },
121013b3d005SIskren Chernev 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8998_pldo, "vdd_l18_l22" },
121113b3d005SIskren Chernev 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8998_pldo, "vdd_l10_l23_l25" },
121213b3d005SIskren Chernev 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8998_pldo, "vdd_l20_l24" },
121313b3d005SIskren Chernev 	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8998_pldo, "vdd_l10_l23_l25" },
121413b3d005SIskren Chernev 	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8998_nldo, "vdd_l26" },
121513b3d005SIskren Chernev 	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8998_nldo, "vdd_l1_l27" },
121613b3d005SIskren Chernev 	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8998_pldo, "vdd_l16_l28" },
121713b3d005SIskren Chernev 	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8998_switch, "vdd_lvs1_lvs2" },
121813b3d005SIskren Chernev 	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8998_switch, "vdd_lvs1_lvs2" },
121913b3d005SIskren Chernev 	{}
122013b3d005SIskren Chernev };
122113b3d005SIskren Chernev 
12228e584e84SIskren Chernev static const struct rpm_regulator_data rpm_pma8084_regulators[] = {
12238e584e84SIskren Chernev 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pma8084_ftsmps, "vdd_s1" },
12248e584e84SIskren Chernev 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pma8084_ftsmps, "vdd_s2" },
12258e584e84SIskren Chernev 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pma8084_hfsmps, "vdd_s3" },
12268e584e84SIskren Chernev 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pma8084_hfsmps, "vdd_s4" },
12278e584e84SIskren Chernev 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pma8084_hfsmps, "vdd_s5" },
12288e584e84SIskren Chernev 	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pma8084_ftsmps, "vdd_s6" },
12298e584e84SIskren Chernev 	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pma8084_ftsmps, "vdd_s7" },
12308e584e84SIskren Chernev 	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pma8084_ftsmps, "vdd_s8" },
12318e584e84SIskren Chernev 	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pma8084_ftsmps, "vdd_s9" },
12328e584e84SIskren Chernev 	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pma8084_ftsmps, "vdd_s10" },
12338e584e84SIskren Chernev 	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pma8084_ftsmps, "vdd_s11" },
12348e584e84SIskren Chernev 	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pma8084_ftsmps, "vdd_s12" },
12358e584e84SIskren Chernev 
12368e584e84SIskren Chernev 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pma8084_nldo, "vdd_l1_l11" },
12378e584e84SIskren Chernev 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pma8084_nldo, "vdd_l2_l3_l4_l27" },
12388e584e84SIskren Chernev 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pma8084_nldo, "vdd_l2_l3_l4_l27" },
12398e584e84SIskren Chernev 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pma8084_nldo, "vdd_l2_l3_l4_l27" },
12408e584e84SIskren Chernev 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pma8084_pldo, "vdd_l5_l7" },
12418e584e84SIskren Chernev 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },
12428e584e84SIskren Chernev 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pma8084_pldo, "vdd_l5_l7" },
12438e584e84SIskren Chernev 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pma8084_pldo, "vdd_l8" },
12448e584e84SIskren Chernev 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12458e584e84SIskren Chernev 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12468e584e84SIskren Chernev 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pma8084_nldo, "vdd_l1_l11" },
12478e584e84SIskren Chernev 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },
12488e584e84SIskren Chernev 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12498e584e84SIskren Chernev 	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },
12508e584e84SIskren Chernev 	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },
12518e584e84SIskren Chernev 	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pma8084_pldo, "vdd_l16_l25" },
12528e584e84SIskren Chernev 	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pma8084_pldo, "vdd_l17" },
12538e584e84SIskren Chernev 	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pma8084_pldo, "vdd_l18" },
12548e584e84SIskren Chernev 	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pma8084_pldo, "vdd_l19" },
12558e584e84SIskren Chernev 	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12568e584e84SIskren Chernev 	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pma8084_pldo, "vdd_l21" },
12578e584e84SIskren Chernev 	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pma8084_pldo, "vdd_l22" },
12588e584e84SIskren Chernev 	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12598e584e84SIskren Chernev 	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },
12608e584e84SIskren Chernev 	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pma8084_pldo, "vdd_l16_l25" },
12618e584e84SIskren Chernev 	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },
12628e584e84SIskren Chernev 	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pma8084_nldo, "vdd_l2_l3_l4_l27" },
12638e584e84SIskren Chernev 
12648e584e84SIskren Chernev 	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pma8084_switch },
12658e584e84SIskren Chernev 	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pma8084_switch },
12668e584e84SIskren Chernev 	{ "lvs3", QCOM_SMD_RPM_VSA, 3, &pma8084_switch },
12678e584e84SIskren Chernev 	{ "lvs4", QCOM_SMD_RPM_VSA, 4, &pma8084_switch },
12688e584e84SIskren Chernev 	{ "5vs1", QCOM_SMD_RPM_VSA, 5, &pma8084_switch },
12698e584e84SIskren Chernev 
12708e584e84SIskren Chernev 	{}
12718e584e84SIskren Chernev };
12728e584e84SIskren Chernev 
127386332c34SBjorn Andersson static const struct rpm_regulator_data rpm_pmi8994_regulators[] = {
127486332c34SBjorn Andersson 	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pmi8994_ftsmps, "vdd_s1" },
127586332c34SBjorn Andersson 	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pmi8994_hfsmps, "vdd_s2" },
12760d46f698SKonrad Dybcio 	{ "s3", QCOM_SMD_RPM_SMPB, 3, &pmi8994_hfsmps, "vdd_s3" },
127786332c34SBjorn Andersson 	{ "boost-bypass", QCOM_SMD_RPM_BBYB, 1, &pmi8994_bby, "vdd_bst_byp" },
127886332c34SBjorn Andersson 	{}
127986332c34SBjorn Andersson };
128086332c34SBjorn Andersson 
12813cdb741eSBjorn Andersson static const struct rpm_regulator_data rpm_pmi8998_regulators[] = {
12823cdb741eSBjorn Andersson 	{ "bob", QCOM_SMD_RPM_BOBB, 1, &pmi8998_bob, "vdd_bob" },
12833cdb741eSBjorn Andersson 	{}
12843cdb741eSBjorn Andersson };
12853cdb741eSBjorn Andersson 
12860cda8c43SKonrad Dybcio static const struct rpm_regulator_data rpm_pmr735a_regulators[] = {
12870cda8c43SKonrad Dybcio 	{ "s1", QCOM_SMD_RPM_SMPE, 1, &pmic5_ftsmps520, "vdd_s1"},
12880cda8c43SKonrad Dybcio 	{ "s2", QCOM_SMD_RPM_SMPE, 2, &pmic5_ftsmps520, "vdd_s2"},
128991016037SKonrad Dybcio 	{ "s3", QCOM_SMD_RPM_SMPE, 3, &pmic5_hfsmps515, "vdd_s3"},
12900cda8c43SKonrad Dybcio 	{ "l1", QCOM_SMD_RPM_LDOE, 1, &pm660_nldo660, "vdd_l1_l2"},
12910cda8c43SKonrad Dybcio 	{ "l2", QCOM_SMD_RPM_LDOE, 2, &pm660_nldo660, "vdd_l1_l2"},
12920cda8c43SKonrad Dybcio 	{ "l3", QCOM_SMD_RPM_LDOE, 3, &pm660_nldo660, "vdd_l3"},
12930cda8c43SKonrad Dybcio 	{ "l4", QCOM_SMD_RPM_LDOE, 4, &pm660_ht_lvpldo, "vdd_l4"},
12940cda8c43SKonrad Dybcio 	{ "l5", QCOM_SMD_RPM_LDOE, 5, &pm660_nldo660, "vdd_l5_l6"},
12950cda8c43SKonrad Dybcio 	{ "l6", QCOM_SMD_RPM_LDOE, 6, &pm660_nldo660, "vdd_l5_l6"},
12960cda8c43SKonrad Dybcio 	{ "l7", QCOM_SMD_RPM_LDOE, 7, &pm660_pldo660, "vdd_l7_bob"},
12970cda8c43SKonrad Dybcio 	{}
12980cda8c43SKonrad Dybcio };
12990cda8c43SKonrad Dybcio 
1300f589d95bSBjorn Andersson static const struct rpm_regulator_data rpm_pms405_regulators[] = {
1301f589d95bSBjorn Andersson 	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pms405_hfsmps3, "vdd_s1" },
1302f589d95bSBjorn Andersson 	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pms405_hfsmps3, "vdd_s2" },
1303f589d95bSBjorn Andersson 	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pms405_hfsmps3, "vdd_s3" },
1304f589d95bSBjorn Andersson 	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pms405_hfsmps3, "vdd_s4" },
1305f589d95bSBjorn Andersson 	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pms405_hfsmps3, "vdd_s5" },
1306f589d95bSBjorn Andersson 	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pms405_nldo1200, "vdd_l1_l2" },
1307f589d95bSBjorn Andersson 	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pms405_nldo1200, "vdd_l1_l2" },
1308f589d95bSBjorn Andersson 	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pms405_nldo1200, "vdd_l3_l8" },
1309f589d95bSBjorn Andersson 	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pms405_nldo300, "vdd_l4" },
1310f589d95bSBjorn Andersson 	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pms405_pldo600, "vdd_l5_l6" },
1311f589d95bSBjorn Andersson 	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pms405_pldo600, "vdd_l5_l6" },
1312f589d95bSBjorn Andersson 	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pms405_pldo150, "vdd_l7" },
1313f589d95bSBjorn Andersson 	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pms405_nldo1200, "vdd_l3_l8" },
1314f589d95bSBjorn Andersson 	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pms405_nldo1200, "vdd_l9" },
1315f589d95bSBjorn Andersson 	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pms405_pldo50, "vdd_l10_l11_l12_l13" },
1316f589d95bSBjorn Andersson 	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pms405_pldo150, "vdd_l10_l11_l12_l13" },
1317f589d95bSBjorn Andersson 	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pms405_pldo150, "vdd_l10_l11_l12_l13" },
1318f589d95bSBjorn Andersson 	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pms405_pldo150, "vdd_l10_l11_l12_l13" },
1319f589d95bSBjorn Andersson 	{}
1320f589d95bSBjorn Andersson };
1321f589d95bSBjorn Andersson 
1322da65e367SBjorn Andersson static const struct of_device_id rpm_of_match[] = {
132347894c85SKathiravan T 	{ .compatible = "qcom,rpm-mp5496-regulators", .data = &rpm_mp5496_regulators },
1324a39d0100SIskren Chernev 	{ .compatible = "qcom,rpm-pm2250-regulators", .data = &rpm_pm2250_regulators },
132595b5f3efSIskren Chernev 	{ .compatible = "qcom,rpm-pm6125-regulators", .data = &rpm_pm6125_regulators },
1326a39d0100SIskren Chernev 	{ .compatible = "qcom,rpm-pm660-regulators", .data = &rpm_pm660_regulators },
1327a39d0100SIskren Chernev 	{ .compatible = "qcom,rpm-pm660l-regulators", .data = &rpm_pm660l_regulators },
1328a39d0100SIskren Chernev 	{ .compatible = "qcom,rpm-pm8226-regulators", .data = &rpm_pm8226_regulators },
1329da65e367SBjorn Andersson 	{ .compatible = "qcom,rpm-pm8841-regulators", .data = &rpm_pm8841_regulators },
1330bc4d1932SStephan Gerhold 	{ .compatible = "qcom,rpm-pm8909-regulators", .data = &rpm_pm8909_regulators },
133157d65676SAndy Gross 	{ .compatible = "qcom,rpm-pm8916-regulators", .data = &rpm_pm8916_regulators },
1332da65e367SBjorn Andersson 	{ .compatible = "qcom,rpm-pm8941-regulators", .data = &rpm_pm8941_regulators },
1333e44adca5SAngelo G. Del Regno 	{ .compatible = "qcom,rpm-pm8950-regulators", .data = &rpm_pm8950_regulators },
1334b1a2fb10SVladimir Lypak 	{ .compatible = "qcom,rpm-pm8953-regulators", .data = &rpm_pm8953_regulators },
133514a16992SRajendra Nayak 	{ .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators },
13363cdb741eSBjorn Andersson 	{ .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators },
1337ee01d0c9SAndy Gross 	{ .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators },
133886332c34SBjorn Andersson 	{ .compatible = "qcom,rpm-pmi8994-regulators", .data = &rpm_pmi8994_regulators },
13393cdb741eSBjorn Andersson 	{ .compatible = "qcom,rpm-pmi8998-regulators", .data = &rpm_pmi8998_regulators },
13400cda8c43SKonrad Dybcio 	{ .compatible = "qcom,rpm-pmr735a-regulators", .data = &rpm_pmr735a_regulators },
1341f589d95bSBjorn Andersson 	{ .compatible = "qcom,rpm-pms405-regulators", .data = &rpm_pms405_regulators },
1342da65e367SBjorn Andersson 	{}
1343da65e367SBjorn Andersson };
1344da65e367SBjorn Andersson MODULE_DEVICE_TABLE(of, rpm_of_match);
1345da65e367SBjorn Andersson 
134614e2976fSKonrad Dybcio /**
134714e2976fSKonrad Dybcio  * rpm_regulator_init_vreg() - initialize all attributes of a qcom_smd-regulator
134814e2976fSKonrad Dybcio  * @vreg:		Pointer to the individual qcom_smd-regulator resource
134914e2976fSKonrad Dybcio  * @dev:		Pointer to the top level qcom_smd-regulator PMIC device
135014e2976fSKonrad Dybcio  * @node:		Pointer to the individual qcom_smd-regulator resource
135114e2976fSKonrad Dybcio  *			device node
135214e2976fSKonrad Dybcio  * @rpm:		Pointer to the rpm bus node
135314e2976fSKonrad Dybcio  * @pmic_rpm_data:	Pointer to a null-terminated array of qcom_smd-regulator
135414e2976fSKonrad Dybcio  *			resources defined for the top level PMIC device
135514e2976fSKonrad Dybcio  *
135614e2976fSKonrad Dybcio  * Return: 0 on success, errno on failure
135714e2976fSKonrad Dybcio  */
rpm_regulator_init_vreg(struct qcom_rpm_reg * vreg,struct device * dev,struct device_node * node,struct qcom_smd_rpm * rpm,const struct rpm_regulator_data * pmic_rpm_data)135814e2976fSKonrad Dybcio static int rpm_regulator_init_vreg(struct qcom_rpm_reg *vreg, struct device *dev,
135914e2976fSKonrad Dybcio 				   struct device_node *node, struct qcom_smd_rpm *rpm,
136014e2976fSKonrad Dybcio 				   const struct rpm_regulator_data *pmic_rpm_data)
136114e2976fSKonrad Dybcio {
136214e2976fSKonrad Dybcio 	struct regulator_config config = {};
136314e2976fSKonrad Dybcio 	const struct rpm_regulator_data *rpm_data;
136414e2976fSKonrad Dybcio 	struct regulator_dev *rdev;
136514e2976fSKonrad Dybcio 	int ret;
136614e2976fSKonrad Dybcio 
136714e2976fSKonrad Dybcio 	for (rpm_data = pmic_rpm_data; rpm_data->name; rpm_data++)
136814e2976fSKonrad Dybcio 		if (of_node_name_eq(node, rpm_data->name))
136914e2976fSKonrad Dybcio 			break;
137014e2976fSKonrad Dybcio 
137114e2976fSKonrad Dybcio 	if (!rpm_data->name) {
137214e2976fSKonrad Dybcio 		dev_err(dev, "Unknown regulator %pOFn\n", node);
137314e2976fSKonrad Dybcio 		return -EINVAL;
137414e2976fSKonrad Dybcio 	}
137514e2976fSKonrad Dybcio 
137614e2976fSKonrad Dybcio 	vreg->dev	= dev;
137714e2976fSKonrad Dybcio 	vreg->rpm	= rpm;
137814e2976fSKonrad Dybcio 	vreg->type	= rpm_data->type;
137914e2976fSKonrad Dybcio 	vreg->id	= rpm_data->id;
138014e2976fSKonrad Dybcio 
138114e2976fSKonrad Dybcio 	memcpy(&vreg->desc, rpm_data->desc, sizeof(vreg->desc));
138214e2976fSKonrad Dybcio 	vreg->desc.name = rpm_data->name;
138314e2976fSKonrad Dybcio 	vreg->desc.supply_name = rpm_data->supply;
138414e2976fSKonrad Dybcio 	vreg->desc.owner = THIS_MODULE;
138514e2976fSKonrad Dybcio 	vreg->desc.type = REGULATOR_VOLTAGE;
138614e2976fSKonrad Dybcio 	vreg->desc.of_match = rpm_data->name;
138714e2976fSKonrad Dybcio 
138814e2976fSKonrad Dybcio 	config.dev		= dev;
138914e2976fSKonrad Dybcio 	config.of_node		= node;
139014e2976fSKonrad Dybcio 	config.driver_data	= vreg;
139114e2976fSKonrad Dybcio 
139214e2976fSKonrad Dybcio 	rdev = devm_regulator_register(dev, &vreg->desc, &config);
139314e2976fSKonrad Dybcio 	if (IS_ERR(rdev)) {
139414e2976fSKonrad Dybcio 		ret = PTR_ERR(rdev);
139514e2976fSKonrad Dybcio 		dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", node, ret);
139614e2976fSKonrad Dybcio 		return ret;
139714e2976fSKonrad Dybcio 	}
139814e2976fSKonrad Dybcio 
139914e2976fSKonrad Dybcio 	return 0;
140014e2976fSKonrad Dybcio }
140114e2976fSKonrad Dybcio 
rpm_reg_probe(struct platform_device * pdev)1402da65e367SBjorn Andersson static int rpm_reg_probe(struct platform_device *pdev)
1403da65e367SBjorn Andersson {
140414e2976fSKonrad Dybcio 	struct device *dev = &pdev->dev;
140514e2976fSKonrad Dybcio 	const struct rpm_regulator_data *vreg_data;
140614e2976fSKonrad Dybcio 	struct device_node *node;
1407da65e367SBjorn Andersson 	struct qcom_rpm_reg *vreg;
1408da65e367SBjorn Andersson 	struct qcom_smd_rpm *rpm;
140914e2976fSKonrad Dybcio 	int ret;
1410da65e367SBjorn Andersson 
1411da65e367SBjorn Andersson 	rpm = dev_get_drvdata(pdev->dev.parent);
1412da65e367SBjorn Andersson 	if (!rpm) {
141314e2976fSKonrad Dybcio 		dev_err(&pdev->dev, "Unable to retrieve handle to rpm\n");
1414da65e367SBjorn Andersson 		return -ENODEV;
1415da65e367SBjorn Andersson 	}
1416da65e367SBjorn Andersson 
141714e2976fSKonrad Dybcio 	vreg_data = of_device_get_match_data(dev);
141814e2976fSKonrad Dybcio 	if (!vreg_data)
1419e3b53b8aSGustavo A. R. Silva 		return -ENODEV;
1420e3b53b8aSGustavo A. R. Silva 
142114e2976fSKonrad Dybcio 	for_each_available_child_of_node(dev->of_node, node) {
1422da65e367SBjorn Andersson 		vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);
14236390d42cSkernel test robot 		if (!vreg) {
14246390d42cSkernel test robot 			of_node_put(node);
1425da65e367SBjorn Andersson 			return -ENOMEM;
14266390d42cSkernel test robot 		}
1427da65e367SBjorn Andersson 
142814e2976fSKonrad Dybcio 		ret = rpm_regulator_init_vreg(vreg, dev, node, rpm, vreg_data);
1429da65e367SBjorn Andersson 
143014e2976fSKonrad Dybcio 		if (ret < 0) {
143114e2976fSKonrad Dybcio 			of_node_put(node);
143214e2976fSKonrad Dybcio 			return ret;
1433da65e367SBjorn Andersson 		}
1434da65e367SBjorn Andersson 	}
1435da65e367SBjorn Andersson 
1436da65e367SBjorn Andersson 	return 0;
1437da65e367SBjorn Andersson }
1438da65e367SBjorn Andersson 
1439da65e367SBjorn Andersson static struct platform_driver rpm_reg_driver = {
1440da65e367SBjorn Andersson 	.probe = rpm_reg_probe,
1441da65e367SBjorn Andersson 	.driver = {
1442da65e367SBjorn Andersson 		.name  = "qcom_rpm_smd_regulator",
1443259b93b2SDouglas Anderson 		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1444da65e367SBjorn Andersson 		.of_match_table = rpm_of_match,
1445da65e367SBjorn Andersson 	},
1446da65e367SBjorn Andersson };
1447da65e367SBjorn Andersson 
rpm_reg_init(void)1448da65e367SBjorn Andersson static int __init rpm_reg_init(void)
1449da65e367SBjorn Andersson {
1450da65e367SBjorn Andersson 	return platform_driver_register(&rpm_reg_driver);
1451da65e367SBjorn Andersson }
1452da65e367SBjorn Andersson subsys_initcall(rpm_reg_init);
1453da65e367SBjorn Andersson 
rpm_reg_exit(void)1454da65e367SBjorn Andersson static void __exit rpm_reg_exit(void)
1455da65e367SBjorn Andersson {
1456da65e367SBjorn Andersson 	platform_driver_unregister(&rpm_reg_driver);
1457da65e367SBjorn Andersson }
1458da65e367SBjorn Andersson module_exit(rpm_reg_exit)
1459da65e367SBjorn Andersson 
1460da65e367SBjorn Andersson MODULE_DESCRIPTION("Qualcomm RPM regulator driver");
1461da65e367SBjorn Andersson MODULE_LICENSE("GPL v2");
1462