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