xref: /openbmc/linux/drivers/regulator/s2mps11.c (revision 0b003749)
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // Copyright (c) 2012-2014 Samsung Electronics Co., Ltd
4 //              http://www.samsung.com
5 
6 #include <linux/bug.h>
7 #include <linux/err.h>
8 #include <linux/gpio.h>
9 #include <linux/slab.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/regmap.h>
13 #include <linux/platform_device.h>
14 #include <linux/regulator/driver.h>
15 #include <linux/regulator/machine.h>
16 #include <linux/regulator/of_regulator.h>
17 #include <linux/of_gpio.h>
18 #include <linux/mfd/samsung/core.h>
19 #include <linux/mfd/samsung/s2mps11.h>
20 #include <linux/mfd/samsung/s2mps13.h>
21 #include <linux/mfd/samsung/s2mps14.h>
22 #include <linux/mfd/samsung/s2mps15.h>
23 #include <linux/mfd/samsung/s2mpu02.h>
24 
25 /* The highest number of possible regulators for supported devices. */
26 #define S2MPS_REGULATOR_MAX		S2MPS13_REGULATOR_MAX
27 struct s2mps11_info {
28 	int ramp_delay2;
29 	int ramp_delay34;
30 	int ramp_delay5;
31 	int ramp_delay16;
32 	int ramp_delay7810;
33 	int ramp_delay9;
34 
35 	enum sec_device_type dev_type;
36 
37 	/*
38 	 * One bit for each S2MPS13/S2MPS14/S2MPU02 regulator whether
39 	 * the suspend mode was enabled.
40 	 */
41 	DECLARE_BITMAP(suspend_state, S2MPS_REGULATOR_MAX);
42 
43 	/*
44 	 * Array (size: number of regulators) with GPIO-s for external
45 	 * sleep control.
46 	 */
47 	int *ext_control_gpio;
48 };
49 
50 static int get_ramp_delay(int ramp_delay)
51 {
52 	unsigned char cnt = 0;
53 
54 	ramp_delay /= 6250;
55 
56 	while (true) {
57 		ramp_delay = ramp_delay >> 1;
58 		if (ramp_delay == 0)
59 			break;
60 		cnt++;
61 	}
62 
63 	if (cnt > 3)
64 		cnt = 3;
65 
66 	return cnt;
67 }
68 
69 static int s2mps11_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
70 				   unsigned int old_selector,
71 				   unsigned int new_selector)
72 {
73 	struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
74 	unsigned int ramp_delay = 0;
75 	int old_volt, new_volt;
76 
77 	switch (rdev_get_id(rdev)) {
78 	case S2MPS11_BUCK2:
79 		ramp_delay = s2mps11->ramp_delay2;
80 		break;
81 	case S2MPS11_BUCK3:
82 	case S2MPS11_BUCK4:
83 		ramp_delay = s2mps11->ramp_delay34;
84 		break;
85 	case S2MPS11_BUCK5:
86 		ramp_delay = s2mps11->ramp_delay5;
87 		break;
88 	case S2MPS11_BUCK6:
89 	case S2MPS11_BUCK1:
90 		ramp_delay = s2mps11->ramp_delay16;
91 		break;
92 	case S2MPS11_BUCK7:
93 	case S2MPS11_BUCK8:
94 	case S2MPS11_BUCK10:
95 		ramp_delay = s2mps11->ramp_delay7810;
96 		break;
97 	case S2MPS11_BUCK9:
98 		ramp_delay = s2mps11->ramp_delay9;
99 	}
100 
101 	if (ramp_delay == 0)
102 		ramp_delay = rdev->desc->ramp_delay;
103 
104 	old_volt = rdev->desc->min_uV + (rdev->desc->uV_step * old_selector);
105 	new_volt = rdev->desc->min_uV + (rdev->desc->uV_step * new_selector);
106 
107 	return DIV_ROUND_UP(abs(new_volt - old_volt), ramp_delay);
108 }
109 
110 static int s2mps11_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
111 {
112 	struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
113 	unsigned int ramp_val, ramp_shift, ramp_reg = S2MPS11_REG_RAMP_BUCK;
114 	unsigned int ramp_enable = 1, enable_shift = 0;
115 	int ret;
116 
117 	switch (rdev_get_id(rdev)) {
118 	case S2MPS11_BUCK1:
119 		if (ramp_delay > s2mps11->ramp_delay16)
120 			s2mps11->ramp_delay16 = ramp_delay;
121 		else
122 			ramp_delay = s2mps11->ramp_delay16;
123 
124 		ramp_shift = S2MPS11_BUCK16_RAMP_SHIFT;
125 		break;
126 	case S2MPS11_BUCK2:
127 		enable_shift = S2MPS11_BUCK2_RAMP_EN_SHIFT;
128 		if (!ramp_delay) {
129 			ramp_enable = 0;
130 			break;
131 		}
132 
133 		s2mps11->ramp_delay2 = ramp_delay;
134 		ramp_shift = S2MPS11_BUCK2_RAMP_SHIFT;
135 		ramp_reg = S2MPS11_REG_RAMP;
136 		break;
137 	case S2MPS11_BUCK3:
138 		enable_shift = S2MPS11_BUCK3_RAMP_EN_SHIFT;
139 		if (!ramp_delay) {
140 			ramp_enable = 0;
141 			break;
142 		}
143 
144 		if (ramp_delay > s2mps11->ramp_delay34)
145 			s2mps11->ramp_delay34 = ramp_delay;
146 		else
147 			ramp_delay = s2mps11->ramp_delay34;
148 
149 		ramp_shift = S2MPS11_BUCK34_RAMP_SHIFT;
150 		ramp_reg = S2MPS11_REG_RAMP;
151 		break;
152 	case S2MPS11_BUCK4:
153 		enable_shift = S2MPS11_BUCK4_RAMP_EN_SHIFT;
154 		if (!ramp_delay) {
155 			ramp_enable = 0;
156 			break;
157 		}
158 
159 		if (ramp_delay > s2mps11->ramp_delay34)
160 			s2mps11->ramp_delay34 = ramp_delay;
161 		else
162 			ramp_delay = s2mps11->ramp_delay34;
163 
164 		ramp_shift = S2MPS11_BUCK34_RAMP_SHIFT;
165 		ramp_reg = S2MPS11_REG_RAMP;
166 		break;
167 	case S2MPS11_BUCK5:
168 		s2mps11->ramp_delay5 = ramp_delay;
169 		ramp_shift = S2MPS11_BUCK5_RAMP_SHIFT;
170 		break;
171 	case S2MPS11_BUCK6:
172 		enable_shift = S2MPS11_BUCK6_RAMP_EN_SHIFT;
173 		if (!ramp_delay) {
174 			ramp_enable = 0;
175 			break;
176 		}
177 
178 		if (ramp_delay > s2mps11->ramp_delay16)
179 			s2mps11->ramp_delay16 = ramp_delay;
180 		else
181 			ramp_delay = s2mps11->ramp_delay16;
182 
183 		ramp_shift = S2MPS11_BUCK16_RAMP_SHIFT;
184 		break;
185 	case S2MPS11_BUCK7:
186 	case S2MPS11_BUCK8:
187 	case S2MPS11_BUCK10:
188 		if (ramp_delay > s2mps11->ramp_delay7810)
189 			s2mps11->ramp_delay7810 = ramp_delay;
190 		else
191 			ramp_delay = s2mps11->ramp_delay7810;
192 
193 		ramp_shift = S2MPS11_BUCK7810_RAMP_SHIFT;
194 		break;
195 	case S2MPS11_BUCK9:
196 		s2mps11->ramp_delay9 = ramp_delay;
197 		ramp_shift = S2MPS11_BUCK9_RAMP_SHIFT;
198 		break;
199 	default:
200 		return 0;
201 	}
202 
203 	if (!ramp_enable)
204 		goto ramp_disable;
205 
206 	/* Ramp delay can be enabled/disabled only for buck[2346] */
207 	if ((rdev_get_id(rdev) >= S2MPS11_BUCK2 &&
208 			rdev_get_id(rdev) <= S2MPS11_BUCK4) ||
209 			rdev_get_id(rdev) == S2MPS11_BUCK6)  {
210 		ret = regmap_update_bits(rdev->regmap, S2MPS11_REG_RAMP,
211 					 1 << enable_shift, 1 << enable_shift);
212 		if (ret) {
213 			dev_err(&rdev->dev, "failed to enable ramp rate\n");
214 			return ret;
215 		}
216 	}
217 
218 	ramp_val = get_ramp_delay(ramp_delay);
219 
220 	return regmap_update_bits(rdev->regmap, ramp_reg, 0x3 << ramp_shift,
221 				  ramp_val << ramp_shift);
222 
223 ramp_disable:
224 	return regmap_update_bits(rdev->regmap, S2MPS11_REG_RAMP,
225 				  1 << enable_shift, 0);
226 }
227 
228 static const struct regulator_ops s2mps11_ldo_ops = {
229 	.list_voltage		= regulator_list_voltage_linear,
230 	.map_voltage		= regulator_map_voltage_linear,
231 	.is_enabled		= regulator_is_enabled_regmap,
232 	.enable			= regulator_enable_regmap,
233 	.disable		= regulator_disable_regmap,
234 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
235 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
236 	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
237 };
238 
239 static const struct regulator_ops s2mps11_buck_ops = {
240 	.list_voltage		= regulator_list_voltage_linear,
241 	.map_voltage		= regulator_map_voltage_linear,
242 	.is_enabled		= regulator_is_enabled_regmap,
243 	.enable			= regulator_enable_regmap,
244 	.disable		= regulator_disable_regmap,
245 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
246 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
247 	.set_voltage_time_sel	= s2mps11_regulator_set_voltage_time_sel,
248 	.set_ramp_delay		= s2mps11_set_ramp_delay,
249 };
250 
251 #define regulator_desc_s2mps11_ldo(num, step) {		\
252 	.name		= "LDO"#num,			\
253 	.id		= S2MPS11_LDO##num,		\
254 	.ops		= &s2mps11_ldo_ops,		\
255 	.type		= REGULATOR_VOLTAGE,		\
256 	.owner		= THIS_MODULE,			\
257 	.ramp_delay	= RAMP_DELAY_12_MVUS,		\
258 	.min_uV		= MIN_800_MV,			\
259 	.uV_step	= step,				\
260 	.n_voltages	= S2MPS11_LDO_N_VOLTAGES,	\
261 	.vsel_reg	= S2MPS11_REG_L1CTRL + num - 1,	\
262 	.vsel_mask	= S2MPS11_LDO_VSEL_MASK,	\
263 	.enable_reg	= S2MPS11_REG_L1CTRL + num - 1,	\
264 	.enable_mask	= S2MPS11_ENABLE_MASK		\
265 }
266 
267 #define regulator_desc_s2mps11_buck1_4(num) {			\
268 	.name		= "BUCK"#num,				\
269 	.id		= S2MPS11_BUCK##num,			\
270 	.ops		= &s2mps11_buck_ops,			\
271 	.type		= REGULATOR_VOLTAGE,			\
272 	.owner		= THIS_MODULE,				\
273 	.min_uV		= MIN_600_MV,				\
274 	.uV_step	= STEP_6_25_MV,				\
275 	.n_voltages	= S2MPS11_BUCK_N_VOLTAGES,		\
276 	.ramp_delay	= S2MPS11_RAMP_DELAY,			\
277 	.vsel_reg	= S2MPS11_REG_B1CTRL2 + (num - 1) * 2,	\
278 	.vsel_mask	= S2MPS11_BUCK_VSEL_MASK,		\
279 	.enable_reg	= S2MPS11_REG_B1CTRL1 + (num - 1) * 2,	\
280 	.enable_mask	= S2MPS11_ENABLE_MASK			\
281 }
282 
283 #define regulator_desc_s2mps11_buck5 {				\
284 	.name		= "BUCK5",				\
285 	.id		= S2MPS11_BUCK5,			\
286 	.ops		= &s2mps11_buck_ops,			\
287 	.type		= REGULATOR_VOLTAGE,			\
288 	.owner		= THIS_MODULE,				\
289 	.min_uV		= MIN_600_MV,				\
290 	.uV_step	= STEP_6_25_MV,				\
291 	.n_voltages	= S2MPS11_BUCK_N_VOLTAGES,		\
292 	.ramp_delay	= S2MPS11_RAMP_DELAY,			\
293 	.vsel_reg	= S2MPS11_REG_B5CTRL2,			\
294 	.vsel_mask	= S2MPS11_BUCK_VSEL_MASK,		\
295 	.enable_reg	= S2MPS11_REG_B5CTRL1,			\
296 	.enable_mask	= S2MPS11_ENABLE_MASK			\
297 }
298 
299 #define regulator_desc_s2mps11_buck67810(num, min, step) {	\
300 	.name		= "BUCK"#num,				\
301 	.id		= S2MPS11_BUCK##num,			\
302 	.ops		= &s2mps11_buck_ops,			\
303 	.type		= REGULATOR_VOLTAGE,			\
304 	.owner		= THIS_MODULE,				\
305 	.min_uV		= min,					\
306 	.uV_step	= step,					\
307 	.n_voltages	= S2MPS11_BUCK_N_VOLTAGES,		\
308 	.ramp_delay	= S2MPS11_RAMP_DELAY,			\
309 	.vsel_reg	= S2MPS11_REG_B6CTRL2 + (num - 6) * 2,	\
310 	.vsel_mask	= S2MPS11_BUCK_VSEL_MASK,		\
311 	.enable_reg	= S2MPS11_REG_B6CTRL1 + (num - 6) * 2,	\
312 	.enable_mask	= S2MPS11_ENABLE_MASK			\
313 }
314 
315 #define regulator_desc_s2mps11_buck9 {				\
316 	.name		= "BUCK9",				\
317 	.id		= S2MPS11_BUCK9,			\
318 	.ops		= &s2mps11_buck_ops,			\
319 	.type		= REGULATOR_VOLTAGE,			\
320 	.owner		= THIS_MODULE,				\
321 	.min_uV		= MIN_3000_MV,				\
322 	.uV_step	= STEP_25_MV,				\
323 	.n_voltages	= S2MPS11_BUCK9_N_VOLTAGES,		\
324 	.ramp_delay	= S2MPS11_RAMP_DELAY,			\
325 	.vsel_reg	= S2MPS11_REG_B9CTRL2,			\
326 	.vsel_mask	= S2MPS11_BUCK9_VSEL_MASK,		\
327 	.enable_reg	= S2MPS11_REG_B9CTRL1,			\
328 	.enable_mask	= S2MPS11_ENABLE_MASK			\
329 }
330 
331 static const struct regulator_desc s2mps11_regulators[] = {
332 	regulator_desc_s2mps11_ldo(1, STEP_25_MV),
333 	regulator_desc_s2mps11_ldo(2, STEP_50_MV),
334 	regulator_desc_s2mps11_ldo(3, STEP_50_MV),
335 	regulator_desc_s2mps11_ldo(4, STEP_50_MV),
336 	regulator_desc_s2mps11_ldo(5, STEP_50_MV),
337 	regulator_desc_s2mps11_ldo(6, STEP_25_MV),
338 	regulator_desc_s2mps11_ldo(7, STEP_50_MV),
339 	regulator_desc_s2mps11_ldo(8, STEP_50_MV),
340 	regulator_desc_s2mps11_ldo(9, STEP_50_MV),
341 	regulator_desc_s2mps11_ldo(10, STEP_50_MV),
342 	regulator_desc_s2mps11_ldo(11, STEP_25_MV),
343 	regulator_desc_s2mps11_ldo(12, STEP_50_MV),
344 	regulator_desc_s2mps11_ldo(13, STEP_50_MV),
345 	regulator_desc_s2mps11_ldo(14, STEP_50_MV),
346 	regulator_desc_s2mps11_ldo(15, STEP_50_MV),
347 	regulator_desc_s2mps11_ldo(16, STEP_50_MV),
348 	regulator_desc_s2mps11_ldo(17, STEP_50_MV),
349 	regulator_desc_s2mps11_ldo(18, STEP_50_MV),
350 	regulator_desc_s2mps11_ldo(19, STEP_50_MV),
351 	regulator_desc_s2mps11_ldo(20, STEP_50_MV),
352 	regulator_desc_s2mps11_ldo(21, STEP_50_MV),
353 	regulator_desc_s2mps11_ldo(22, STEP_25_MV),
354 	regulator_desc_s2mps11_ldo(23, STEP_25_MV),
355 	regulator_desc_s2mps11_ldo(24, STEP_50_MV),
356 	regulator_desc_s2mps11_ldo(25, STEP_50_MV),
357 	regulator_desc_s2mps11_ldo(26, STEP_50_MV),
358 	regulator_desc_s2mps11_ldo(27, STEP_25_MV),
359 	regulator_desc_s2mps11_ldo(28, STEP_50_MV),
360 	regulator_desc_s2mps11_ldo(29, STEP_50_MV),
361 	regulator_desc_s2mps11_ldo(30, STEP_50_MV),
362 	regulator_desc_s2mps11_ldo(31, STEP_50_MV),
363 	regulator_desc_s2mps11_ldo(32, STEP_50_MV),
364 	regulator_desc_s2mps11_ldo(33, STEP_50_MV),
365 	regulator_desc_s2mps11_ldo(34, STEP_50_MV),
366 	regulator_desc_s2mps11_ldo(35, STEP_50_MV),
367 	regulator_desc_s2mps11_ldo(36, STEP_50_MV),
368 	regulator_desc_s2mps11_ldo(37, STEP_50_MV),
369 	regulator_desc_s2mps11_ldo(38, STEP_50_MV),
370 	regulator_desc_s2mps11_buck1_4(1),
371 	regulator_desc_s2mps11_buck1_4(2),
372 	regulator_desc_s2mps11_buck1_4(3),
373 	regulator_desc_s2mps11_buck1_4(4),
374 	regulator_desc_s2mps11_buck5,
375 	regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
376 	regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_6_25_MV),
377 	regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_6_25_MV),
378 	regulator_desc_s2mps11_buck9,
379 	regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
380 };
381 
382 static const struct regulator_ops s2mps14_reg_ops;
383 
384 #define regulator_desc_s2mps13_ldo(num, min, step, min_sel) {	\
385 	.name		= "LDO"#num,				\
386 	.id		= S2MPS13_LDO##num,			\
387 	.ops		= &s2mps14_reg_ops,			\
388 	.type		= REGULATOR_VOLTAGE,			\
389 	.owner		= THIS_MODULE,				\
390 	.min_uV		= min,					\
391 	.uV_step	= step,					\
392 	.linear_min_sel	= min_sel,				\
393 	.n_voltages	= S2MPS14_LDO_N_VOLTAGES,		\
394 	.vsel_reg	= S2MPS13_REG_L1CTRL + num - 1,		\
395 	.vsel_mask	= S2MPS14_LDO_VSEL_MASK,		\
396 	.enable_reg	= S2MPS13_REG_L1CTRL + num - 1,		\
397 	.enable_mask	= S2MPS14_ENABLE_MASK			\
398 }
399 
400 #define regulator_desc_s2mps13_buck(num, min, step, min_sel) {	\
401 	.name		= "BUCK"#num,				\
402 	.id		= S2MPS13_BUCK##num,			\
403 	.ops		= &s2mps14_reg_ops,			\
404 	.type		= REGULATOR_VOLTAGE,			\
405 	.owner		= THIS_MODULE,				\
406 	.min_uV		= min,					\
407 	.uV_step	= step,					\
408 	.linear_min_sel	= min_sel,				\
409 	.n_voltages	= S2MPS14_BUCK_N_VOLTAGES,		\
410 	.ramp_delay	= S2MPS13_BUCK_RAMP_DELAY,		\
411 	.vsel_reg	= S2MPS13_REG_B1OUT + (num - 1) * 2,	\
412 	.vsel_mask	= S2MPS14_BUCK_VSEL_MASK,		\
413 	.enable_reg	= S2MPS13_REG_B1CTRL + (num - 1) * 2,	\
414 	.enable_mask	= S2MPS14_ENABLE_MASK			\
415 }
416 
417 #define regulator_desc_s2mps13_buck7(num, min, step, min_sel) {	\
418 	.name		= "BUCK"#num,				\
419 	.id		= S2MPS13_BUCK##num,			\
420 	.ops		= &s2mps14_reg_ops,			\
421 	.type		= REGULATOR_VOLTAGE,			\
422 	.owner		= THIS_MODULE,				\
423 	.min_uV		= min,					\
424 	.uV_step	= step,					\
425 	.linear_min_sel	= min_sel,				\
426 	.n_voltages	= S2MPS14_BUCK_N_VOLTAGES,		\
427 	.ramp_delay	= S2MPS13_BUCK_RAMP_DELAY,		\
428 	.vsel_reg	= S2MPS13_REG_B1OUT + (num) * 2 - 1,	\
429 	.vsel_mask	= S2MPS14_BUCK_VSEL_MASK,		\
430 	.enable_reg	= S2MPS13_REG_B1CTRL + (num - 1) * 2,	\
431 	.enable_mask	= S2MPS14_ENABLE_MASK			\
432 }
433 
434 #define regulator_desc_s2mps13_buck8_10(num, min, step, min_sel) {	\
435 	.name		= "BUCK"#num,				\
436 	.id		= S2MPS13_BUCK##num,			\
437 	.ops		= &s2mps14_reg_ops,			\
438 	.type		= REGULATOR_VOLTAGE,			\
439 	.owner		= THIS_MODULE,				\
440 	.min_uV		= min,					\
441 	.uV_step	= step,					\
442 	.linear_min_sel	= min_sel,				\
443 	.n_voltages	= S2MPS14_BUCK_N_VOLTAGES,		\
444 	.ramp_delay	= S2MPS13_BUCK_RAMP_DELAY,		\
445 	.vsel_reg	= S2MPS13_REG_B1OUT + (num) * 2 - 1,	\
446 	.vsel_mask	= S2MPS14_BUCK_VSEL_MASK,		\
447 	.enable_reg	= S2MPS13_REG_B1CTRL + (num) * 2 - 1,	\
448 	.enable_mask	= S2MPS14_ENABLE_MASK			\
449 }
450 
451 static const struct regulator_desc s2mps13_regulators[] = {
452 	regulator_desc_s2mps13_ldo(1,  MIN_800_MV,  STEP_12_5_MV, 0x00),
453 	regulator_desc_s2mps13_ldo(2,  MIN_1400_MV, STEP_50_MV,   0x0C),
454 	regulator_desc_s2mps13_ldo(3,  MIN_1000_MV, STEP_25_MV,   0x08),
455 	regulator_desc_s2mps13_ldo(4,  MIN_800_MV,  STEP_12_5_MV, 0x00),
456 	regulator_desc_s2mps13_ldo(5,  MIN_800_MV,  STEP_12_5_MV, 0x00),
457 	regulator_desc_s2mps13_ldo(6,  MIN_800_MV,  STEP_12_5_MV, 0x00),
458 	regulator_desc_s2mps13_ldo(7,  MIN_1000_MV, STEP_25_MV,   0x08),
459 	regulator_desc_s2mps13_ldo(8,  MIN_1000_MV, STEP_25_MV,   0x08),
460 	regulator_desc_s2mps13_ldo(9,  MIN_1000_MV, STEP_25_MV,   0x08),
461 	regulator_desc_s2mps13_ldo(10, MIN_1400_MV, STEP_50_MV,   0x0C),
462 	regulator_desc_s2mps13_ldo(11, MIN_800_MV,  STEP_25_MV,   0x10),
463 	regulator_desc_s2mps13_ldo(12, MIN_800_MV,  STEP_25_MV,   0x10),
464 	regulator_desc_s2mps13_ldo(13, MIN_800_MV,  STEP_25_MV,   0x10),
465 	regulator_desc_s2mps13_ldo(14, MIN_800_MV,  STEP_12_5_MV, 0x00),
466 	regulator_desc_s2mps13_ldo(15, MIN_800_MV,  STEP_12_5_MV, 0x00),
467 	regulator_desc_s2mps13_ldo(16, MIN_1400_MV, STEP_50_MV,   0x0C),
468 	regulator_desc_s2mps13_ldo(17, MIN_1400_MV, STEP_50_MV,   0x0C),
469 	regulator_desc_s2mps13_ldo(18, MIN_1000_MV, STEP_25_MV,   0x08),
470 	regulator_desc_s2mps13_ldo(19, MIN_1000_MV, STEP_25_MV,   0x08),
471 	regulator_desc_s2mps13_ldo(20, MIN_1400_MV, STEP_50_MV,   0x0C),
472 	regulator_desc_s2mps13_ldo(21, MIN_1000_MV, STEP_25_MV,   0x08),
473 	regulator_desc_s2mps13_ldo(22, MIN_1000_MV, STEP_25_MV,   0x08),
474 	regulator_desc_s2mps13_ldo(23, MIN_800_MV,  STEP_12_5_MV, 0x00),
475 	regulator_desc_s2mps13_ldo(24, MIN_800_MV,  STEP_12_5_MV, 0x00),
476 	regulator_desc_s2mps13_ldo(25, MIN_1400_MV, STEP_50_MV,   0x0C),
477 	regulator_desc_s2mps13_ldo(26, MIN_1400_MV, STEP_50_MV,   0x0C),
478 	regulator_desc_s2mps13_ldo(27, MIN_1400_MV, STEP_50_MV,   0x0C),
479 	regulator_desc_s2mps13_ldo(28, MIN_1000_MV, STEP_25_MV,   0x08),
480 	regulator_desc_s2mps13_ldo(29, MIN_1400_MV, STEP_50_MV,   0x0C),
481 	regulator_desc_s2mps13_ldo(30, MIN_1400_MV, STEP_50_MV,   0x0C),
482 	regulator_desc_s2mps13_ldo(31, MIN_1000_MV, STEP_25_MV,   0x08),
483 	regulator_desc_s2mps13_ldo(32, MIN_1000_MV, STEP_25_MV,   0x08),
484 	regulator_desc_s2mps13_ldo(33, MIN_1400_MV, STEP_50_MV,   0x0C),
485 	regulator_desc_s2mps13_ldo(34, MIN_1000_MV, STEP_25_MV,   0x08),
486 	regulator_desc_s2mps13_ldo(35, MIN_1400_MV, STEP_50_MV,   0x0C),
487 	regulator_desc_s2mps13_ldo(36, MIN_800_MV,  STEP_12_5_MV, 0x00),
488 	regulator_desc_s2mps13_ldo(37, MIN_1000_MV, STEP_25_MV,   0x08),
489 	regulator_desc_s2mps13_ldo(38, MIN_1400_MV, STEP_50_MV,   0x0C),
490 	regulator_desc_s2mps13_ldo(39, MIN_1000_MV, STEP_25_MV,   0x08),
491 	regulator_desc_s2mps13_ldo(40, MIN_1400_MV, STEP_50_MV,   0x0C),
492 	regulator_desc_s2mps13_buck(1,  MIN_500_MV,  STEP_6_25_MV, 0x10),
493 	regulator_desc_s2mps13_buck(2,  MIN_500_MV,  STEP_6_25_MV, 0x10),
494 	regulator_desc_s2mps13_buck(3,  MIN_500_MV,  STEP_6_25_MV, 0x10),
495 	regulator_desc_s2mps13_buck(4,  MIN_500_MV,  STEP_6_25_MV, 0x10),
496 	regulator_desc_s2mps13_buck(5,  MIN_500_MV,  STEP_6_25_MV, 0x10),
497 	regulator_desc_s2mps13_buck(6,  MIN_500_MV,  STEP_6_25_MV, 0x10),
498 	regulator_desc_s2mps13_buck7(7,  MIN_500_MV,  STEP_6_25_MV, 0x10),
499 	regulator_desc_s2mps13_buck8_10(8,  MIN_1000_MV, STEP_12_5_MV, 0x20),
500 	regulator_desc_s2mps13_buck8_10(9,  MIN_1000_MV, STEP_12_5_MV, 0x20),
501 	regulator_desc_s2mps13_buck8_10(10, MIN_500_MV,  STEP_6_25_MV, 0x10),
502 };
503 
504 static int s2mps14_regulator_enable(struct regulator_dev *rdev)
505 {
506 	struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
507 	unsigned int val;
508 
509 	switch (s2mps11->dev_type) {
510 	case S2MPS13X:
511 	case S2MPS14X:
512 		if (test_bit(rdev_get_id(rdev), s2mps11->suspend_state))
513 			val = S2MPS14_ENABLE_SUSPEND;
514 		else if (gpio_is_valid(s2mps11->ext_control_gpio[rdev_get_id(rdev)]))
515 			val = S2MPS14_ENABLE_EXT_CONTROL;
516 		else
517 			val = rdev->desc->enable_mask;
518 		break;
519 	case S2MPU02:
520 		if (test_bit(rdev_get_id(rdev), s2mps11->suspend_state))
521 			val = S2MPU02_ENABLE_SUSPEND;
522 		else
523 			val = rdev->desc->enable_mask;
524 		break;
525 	default:
526 		return -EINVAL;
527 	}
528 
529 	return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
530 			rdev->desc->enable_mask, val);
531 }
532 
533 static int s2mps14_regulator_set_suspend_disable(struct regulator_dev *rdev)
534 {
535 	int ret;
536 	unsigned int val, state;
537 	struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
538 	int rdev_id = rdev_get_id(rdev);
539 
540 	/* Below LDO should be always on or does not support suspend mode. */
541 	switch (s2mps11->dev_type) {
542 	case S2MPS13X:
543 	case S2MPS14X:
544 		switch (rdev_id) {
545 		case S2MPS14_LDO3:
546 			return 0;
547 		default:
548 			state = S2MPS14_ENABLE_SUSPEND;
549 			break;
550 		}
551 		break;
552 	case S2MPU02:
553 		switch (rdev_id) {
554 		case S2MPU02_LDO13:
555 		case S2MPU02_LDO14:
556 		case S2MPU02_LDO15:
557 		case S2MPU02_LDO17:
558 		case S2MPU02_BUCK7:
559 			state = S2MPU02_DISABLE_SUSPEND;
560 			break;
561 		default:
562 			state = S2MPU02_ENABLE_SUSPEND;
563 			break;
564 		}
565 		break;
566 	default:
567 		return -EINVAL;
568 	}
569 
570 	ret = regmap_read(rdev->regmap, rdev->desc->enable_reg, &val);
571 	if (ret < 0)
572 		return ret;
573 
574 	set_bit(rdev_get_id(rdev), s2mps11->suspend_state);
575 	/*
576 	 * Don't enable suspend mode if regulator is already disabled because
577 	 * this would effectively for a short time turn on the regulator after
578 	 * resuming.
579 	 * However we still want to toggle the suspend_state bit for regulator
580 	 * in case if it got enabled before suspending the system.
581 	 */
582 	if (!(val & rdev->desc->enable_mask))
583 		return 0;
584 
585 	return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
586 			rdev->desc->enable_mask, state);
587 }
588 
589 static const struct regulator_ops s2mps14_reg_ops = {
590 	.list_voltage		= regulator_list_voltage_linear,
591 	.map_voltage		= regulator_map_voltage_linear,
592 	.is_enabled		= regulator_is_enabled_regmap,
593 	.enable			= s2mps14_regulator_enable,
594 	.disable		= regulator_disable_regmap,
595 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
596 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
597 	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
598 	.set_suspend_disable	= s2mps14_regulator_set_suspend_disable,
599 };
600 
601 #define regulator_desc_s2mps14_ldo(num, min, step) {	\
602 	.name		= "LDO"#num,			\
603 	.id		= S2MPS14_LDO##num,		\
604 	.ops		= &s2mps14_reg_ops,		\
605 	.type		= REGULATOR_VOLTAGE,		\
606 	.owner		= THIS_MODULE,			\
607 	.min_uV		= min,				\
608 	.uV_step	= step,				\
609 	.n_voltages	= S2MPS14_LDO_N_VOLTAGES,	\
610 	.vsel_reg	= S2MPS14_REG_L1CTRL + num - 1,	\
611 	.vsel_mask	= S2MPS14_LDO_VSEL_MASK,	\
612 	.enable_reg	= S2MPS14_REG_L1CTRL + num - 1,	\
613 	.enable_mask	= S2MPS14_ENABLE_MASK		\
614 }
615 
616 #define regulator_desc_s2mps14_buck(num, min, step, min_sel) {	\
617 	.name		= "BUCK"#num,				\
618 	.id		= S2MPS14_BUCK##num,			\
619 	.ops		= &s2mps14_reg_ops,			\
620 	.type		= REGULATOR_VOLTAGE,			\
621 	.owner		= THIS_MODULE,				\
622 	.min_uV		= min,					\
623 	.uV_step	= step,					\
624 	.n_voltages	= S2MPS14_BUCK_N_VOLTAGES,		\
625 	.linear_min_sel = min_sel,				\
626 	.ramp_delay	= S2MPS14_BUCK_RAMP_DELAY,		\
627 	.vsel_reg	= S2MPS14_REG_B1CTRL2 + (num - 1) * 2,	\
628 	.vsel_mask	= S2MPS14_BUCK_VSEL_MASK,		\
629 	.enable_reg	= S2MPS14_REG_B1CTRL1 + (num - 1) * 2,	\
630 	.enable_mask	= S2MPS14_ENABLE_MASK			\
631 }
632 
633 static const struct regulator_desc s2mps14_regulators[] = {
634 	regulator_desc_s2mps14_ldo(1, MIN_800_MV, STEP_12_5_MV),
635 	regulator_desc_s2mps14_ldo(2, MIN_800_MV, STEP_12_5_MV),
636 	regulator_desc_s2mps14_ldo(3, MIN_800_MV, STEP_25_MV),
637 	regulator_desc_s2mps14_ldo(4, MIN_800_MV, STEP_25_MV),
638 	regulator_desc_s2mps14_ldo(5, MIN_800_MV, STEP_12_5_MV),
639 	regulator_desc_s2mps14_ldo(6, MIN_800_MV, STEP_12_5_MV),
640 	regulator_desc_s2mps14_ldo(7, MIN_800_MV, STEP_25_MV),
641 	regulator_desc_s2mps14_ldo(8, MIN_1800_MV, STEP_25_MV),
642 	regulator_desc_s2mps14_ldo(9, MIN_800_MV, STEP_12_5_MV),
643 	regulator_desc_s2mps14_ldo(10, MIN_800_MV, STEP_12_5_MV),
644 	regulator_desc_s2mps14_ldo(11, MIN_800_MV, STEP_25_MV),
645 	regulator_desc_s2mps14_ldo(12, MIN_1800_MV, STEP_25_MV),
646 	regulator_desc_s2mps14_ldo(13, MIN_1800_MV, STEP_25_MV),
647 	regulator_desc_s2mps14_ldo(14, MIN_1800_MV, STEP_25_MV),
648 	regulator_desc_s2mps14_ldo(15, MIN_1800_MV, STEP_25_MV),
649 	regulator_desc_s2mps14_ldo(16, MIN_1800_MV, STEP_25_MV),
650 	regulator_desc_s2mps14_ldo(17, MIN_1800_MV, STEP_25_MV),
651 	regulator_desc_s2mps14_ldo(18, MIN_1800_MV, STEP_25_MV),
652 	regulator_desc_s2mps14_ldo(19, MIN_800_MV, STEP_25_MV),
653 	regulator_desc_s2mps14_ldo(20, MIN_800_MV, STEP_25_MV),
654 	regulator_desc_s2mps14_ldo(21, MIN_800_MV, STEP_25_MV),
655 	regulator_desc_s2mps14_ldo(22, MIN_800_MV, STEP_12_5_MV),
656 	regulator_desc_s2mps14_ldo(23, MIN_800_MV, STEP_25_MV),
657 	regulator_desc_s2mps14_ldo(24, MIN_1800_MV, STEP_25_MV),
658 	regulator_desc_s2mps14_ldo(25, MIN_1800_MV, STEP_25_MV),
659 	regulator_desc_s2mps14_buck(1, MIN_600_MV, STEP_6_25_MV,
660 				    S2MPS14_BUCK1235_START_SEL),
661 	regulator_desc_s2mps14_buck(2, MIN_600_MV, STEP_6_25_MV,
662 				    S2MPS14_BUCK1235_START_SEL),
663 	regulator_desc_s2mps14_buck(3, MIN_600_MV, STEP_6_25_MV,
664 				    S2MPS14_BUCK1235_START_SEL),
665 	regulator_desc_s2mps14_buck(4, MIN_1400_MV, STEP_12_5_MV,
666 				    S2MPS14_BUCK4_START_SEL),
667 	regulator_desc_s2mps14_buck(5, MIN_600_MV, STEP_6_25_MV,
668 				    S2MPS14_BUCK1235_START_SEL),
669 };
670 
671 static const struct regulator_ops s2mps15_reg_ldo_ops = {
672 	.list_voltage		= regulator_list_voltage_linear_range,
673 	.map_voltage		= regulator_map_voltage_linear_range,
674 	.is_enabled		= regulator_is_enabled_regmap,
675 	.enable			= regulator_enable_regmap,
676 	.disable		= regulator_disable_regmap,
677 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
678 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
679 };
680 
681 static const struct regulator_ops s2mps15_reg_buck_ops = {
682 	.list_voltage		= regulator_list_voltage_linear_range,
683 	.map_voltage		= regulator_map_voltage_linear_range,
684 	.is_enabled		= regulator_is_enabled_regmap,
685 	.enable			= regulator_enable_regmap,
686 	.disable		= regulator_disable_regmap,
687 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
688 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
689 	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
690 };
691 
692 #define regulator_desc_s2mps15_ldo(num, range) {	\
693 	.name		= "LDO"#num,			\
694 	.id		= S2MPS15_LDO##num,		\
695 	.ops		= &s2mps15_reg_ldo_ops,		\
696 	.type		= REGULATOR_VOLTAGE,		\
697 	.owner		= THIS_MODULE,			\
698 	.linear_ranges	= range,			\
699 	.n_linear_ranges = ARRAY_SIZE(range),		\
700 	.n_voltages	= S2MPS15_LDO_N_VOLTAGES,	\
701 	.vsel_reg	= S2MPS15_REG_L1CTRL + num - 1,	\
702 	.vsel_mask	= S2MPS15_LDO_VSEL_MASK,	\
703 	.enable_reg	= S2MPS15_REG_L1CTRL + num - 1,	\
704 	.enable_mask	= S2MPS15_ENABLE_MASK		\
705 }
706 
707 #define regulator_desc_s2mps15_buck(num, range) {			\
708 	.name		= "BUCK"#num,					\
709 	.id		= S2MPS15_BUCK##num,				\
710 	.ops		= &s2mps15_reg_buck_ops,			\
711 	.type		= REGULATOR_VOLTAGE,				\
712 	.owner		= THIS_MODULE,					\
713 	.linear_ranges	= range,					\
714 	.n_linear_ranges = ARRAY_SIZE(range),				\
715 	.ramp_delay	= 12500,					\
716 	.n_voltages	= S2MPS15_BUCK_N_VOLTAGES,			\
717 	.vsel_reg	= S2MPS15_REG_B1CTRL2 + ((num - 1) * 2),	\
718 	.vsel_mask	= S2MPS15_BUCK_VSEL_MASK,			\
719 	.enable_reg	= S2MPS15_REG_B1CTRL1 + ((num - 1) * 2),	\
720 	.enable_mask	= S2MPS15_ENABLE_MASK				\
721 }
722 
723 /* voltage range for s2mps15 LDO 3, 5, 15, 16, 18, 20, 23 and 27 */
724 static const struct regulator_linear_range s2mps15_ldo_voltage_ranges1[] = {
725 	REGULATOR_LINEAR_RANGE(1000000, 0xc, 0x38, 25000),
726 };
727 
728 /* voltage range for s2mps15 LDO 2, 6, 14, 17, 19, 21, 24 and 25 */
729 static const struct regulator_linear_range s2mps15_ldo_voltage_ranges2[] = {
730 	REGULATOR_LINEAR_RANGE(1800000, 0x0, 0x3f, 25000),
731 };
732 
733 /* voltage range for s2mps15 LDO 4, 11, 12, 13, 22 and 26 */
734 static const struct regulator_linear_range s2mps15_ldo_voltage_ranges3[] = {
735 	REGULATOR_LINEAR_RANGE(700000, 0x0, 0x34, 12500),
736 };
737 
738 /* voltage range for s2mps15 LDO 7, 8, 9 and 10 */
739 static const struct regulator_linear_range s2mps15_ldo_voltage_ranges4[] = {
740 	REGULATOR_LINEAR_RANGE(700000, 0x10, 0x20, 25000),
741 };
742 
743 /* voltage range for s2mps15 LDO 1 */
744 static const struct regulator_linear_range s2mps15_ldo_voltage_ranges5[] = {
745 	REGULATOR_LINEAR_RANGE(500000, 0x0, 0x20, 12500),
746 };
747 
748 /* voltage range for s2mps15 BUCK 1, 2, 3, 4, 5, 6 and 7 */
749 static const struct regulator_linear_range s2mps15_buck_voltage_ranges1[] = {
750 	REGULATOR_LINEAR_RANGE(500000, 0x20, 0xc0, 6250),
751 };
752 
753 /* voltage range for s2mps15 BUCK 8, 9 and 10 */
754 static const struct regulator_linear_range s2mps15_buck_voltage_ranges2[] = {
755 	REGULATOR_LINEAR_RANGE(1000000, 0x20, 0x78, 12500),
756 };
757 
758 static const struct regulator_desc s2mps15_regulators[] = {
759 	regulator_desc_s2mps15_ldo(1, s2mps15_ldo_voltage_ranges5),
760 	regulator_desc_s2mps15_ldo(2, s2mps15_ldo_voltage_ranges2),
761 	regulator_desc_s2mps15_ldo(3, s2mps15_ldo_voltage_ranges1),
762 	regulator_desc_s2mps15_ldo(4, s2mps15_ldo_voltage_ranges3),
763 	regulator_desc_s2mps15_ldo(5, s2mps15_ldo_voltage_ranges1),
764 	regulator_desc_s2mps15_ldo(6, s2mps15_ldo_voltage_ranges2),
765 	regulator_desc_s2mps15_ldo(7, s2mps15_ldo_voltage_ranges4),
766 	regulator_desc_s2mps15_ldo(8, s2mps15_ldo_voltage_ranges4),
767 	regulator_desc_s2mps15_ldo(9, s2mps15_ldo_voltage_ranges4),
768 	regulator_desc_s2mps15_ldo(10, s2mps15_ldo_voltage_ranges4),
769 	regulator_desc_s2mps15_ldo(11, s2mps15_ldo_voltage_ranges3),
770 	regulator_desc_s2mps15_ldo(12, s2mps15_ldo_voltage_ranges3),
771 	regulator_desc_s2mps15_ldo(13, s2mps15_ldo_voltage_ranges3),
772 	regulator_desc_s2mps15_ldo(14, s2mps15_ldo_voltage_ranges2),
773 	regulator_desc_s2mps15_ldo(15, s2mps15_ldo_voltage_ranges1),
774 	regulator_desc_s2mps15_ldo(16, s2mps15_ldo_voltage_ranges1),
775 	regulator_desc_s2mps15_ldo(17, s2mps15_ldo_voltage_ranges2),
776 	regulator_desc_s2mps15_ldo(18, s2mps15_ldo_voltage_ranges1),
777 	regulator_desc_s2mps15_ldo(19, s2mps15_ldo_voltage_ranges2),
778 	regulator_desc_s2mps15_ldo(20, s2mps15_ldo_voltage_ranges1),
779 	regulator_desc_s2mps15_ldo(21, s2mps15_ldo_voltage_ranges2),
780 	regulator_desc_s2mps15_ldo(22, s2mps15_ldo_voltage_ranges3),
781 	regulator_desc_s2mps15_ldo(23, s2mps15_ldo_voltage_ranges1),
782 	regulator_desc_s2mps15_ldo(24, s2mps15_ldo_voltage_ranges2),
783 	regulator_desc_s2mps15_ldo(25, s2mps15_ldo_voltage_ranges2),
784 	regulator_desc_s2mps15_ldo(26, s2mps15_ldo_voltage_ranges3),
785 	regulator_desc_s2mps15_ldo(27, s2mps15_ldo_voltage_ranges1),
786 	regulator_desc_s2mps15_buck(1, s2mps15_buck_voltage_ranges1),
787 	regulator_desc_s2mps15_buck(2, s2mps15_buck_voltage_ranges1),
788 	regulator_desc_s2mps15_buck(3, s2mps15_buck_voltage_ranges1),
789 	regulator_desc_s2mps15_buck(4, s2mps15_buck_voltage_ranges1),
790 	regulator_desc_s2mps15_buck(5, s2mps15_buck_voltage_ranges1),
791 	regulator_desc_s2mps15_buck(6, s2mps15_buck_voltage_ranges1),
792 	regulator_desc_s2mps15_buck(7, s2mps15_buck_voltage_ranges1),
793 	regulator_desc_s2mps15_buck(8, s2mps15_buck_voltage_ranges2),
794 	regulator_desc_s2mps15_buck(9, s2mps15_buck_voltage_ranges2),
795 	regulator_desc_s2mps15_buck(10, s2mps15_buck_voltage_ranges2),
796 };
797 
798 static int s2mps14_pmic_enable_ext_control(struct s2mps11_info *s2mps11,
799 		struct regulator_dev *rdev)
800 {
801 	return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
802 			rdev->desc->enable_mask, S2MPS14_ENABLE_EXT_CONTROL);
803 }
804 
805 static void s2mps14_pmic_dt_parse_ext_control_gpio(struct platform_device *pdev,
806 		struct of_regulator_match *rdata, struct s2mps11_info *s2mps11)
807 {
808 	int *gpio = s2mps11->ext_control_gpio;
809 	unsigned int i;
810 	unsigned int valid_regulators[3] = { S2MPS14_LDO10, S2MPS14_LDO11,
811 		S2MPS14_LDO12 };
812 
813 	for (i = 0; i < ARRAY_SIZE(valid_regulators); i++) {
814 		unsigned int reg = valid_regulators[i];
815 
816 		if (!rdata[reg].init_data || !rdata[reg].of_node)
817 			continue;
818 
819 		gpio[reg] = of_get_named_gpio(rdata[reg].of_node,
820 				"samsung,ext-control-gpios", 0);
821 		if (gpio_is_valid(gpio[reg]))
822 			dev_dbg(&pdev->dev, "Using GPIO %d for ext-control over %d/%s\n",
823 					gpio[reg], reg, rdata[reg].name);
824 	}
825 }
826 
827 static int s2mps11_pmic_dt_parse(struct platform_device *pdev,
828 		struct of_regulator_match *rdata, struct s2mps11_info *s2mps11,
829 		unsigned int rdev_num)
830 {
831 	struct device_node *reg_np;
832 
833 	reg_np = of_get_child_by_name(pdev->dev.parent->of_node, "regulators");
834 	if (!reg_np) {
835 		dev_err(&pdev->dev, "could not find regulators sub-node\n");
836 		return -EINVAL;
837 	}
838 
839 	of_regulator_match(&pdev->dev, reg_np, rdata, rdev_num);
840 	if (s2mps11->dev_type == S2MPS14X)
841 		s2mps14_pmic_dt_parse_ext_control_gpio(pdev, rdata, s2mps11);
842 
843 	of_node_put(reg_np);
844 
845 	return 0;
846 }
847 
848 static int s2mpu02_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
849 {
850 	unsigned int ramp_val, ramp_shift, ramp_reg;
851 
852 	switch (rdev_get_id(rdev)) {
853 	case S2MPU02_BUCK1:
854 		ramp_shift = S2MPU02_BUCK1_RAMP_SHIFT;
855 		break;
856 	case S2MPU02_BUCK2:
857 		ramp_shift = S2MPU02_BUCK2_RAMP_SHIFT;
858 		break;
859 	case S2MPU02_BUCK3:
860 		ramp_shift = S2MPU02_BUCK3_RAMP_SHIFT;
861 		break;
862 	case S2MPU02_BUCK4:
863 		ramp_shift = S2MPU02_BUCK4_RAMP_SHIFT;
864 		break;
865 	default:
866 		return 0;
867 	}
868 	ramp_reg = S2MPU02_REG_RAMP1;
869 	ramp_val = get_ramp_delay(ramp_delay);
870 
871 	return regmap_update_bits(rdev->regmap, ramp_reg,
872 				  S2MPU02_BUCK1234_RAMP_MASK << ramp_shift,
873 				  ramp_val << ramp_shift);
874 }
875 
876 static const struct regulator_ops s2mpu02_ldo_ops = {
877 	.list_voltage		= regulator_list_voltage_linear,
878 	.map_voltage		= regulator_map_voltage_linear,
879 	.is_enabled		= regulator_is_enabled_regmap,
880 	.enable			= s2mps14_regulator_enable,
881 	.disable		= regulator_disable_regmap,
882 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
883 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
884 	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
885 	.set_suspend_disable	= s2mps14_regulator_set_suspend_disable,
886 };
887 
888 static const struct regulator_ops s2mpu02_buck_ops = {
889 	.list_voltage		= regulator_list_voltage_linear,
890 	.map_voltage		= regulator_map_voltage_linear,
891 	.is_enabled		= regulator_is_enabled_regmap,
892 	.enable			= s2mps14_regulator_enable,
893 	.disable		= regulator_disable_regmap,
894 	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
895 	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
896 	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
897 	.set_suspend_disable	= s2mps14_regulator_set_suspend_disable,
898 	.set_ramp_delay		= s2mpu02_set_ramp_delay,
899 };
900 
901 #define regulator_desc_s2mpu02_ldo1(num) {		\
902 	.name		= "LDO"#num,			\
903 	.id		= S2MPU02_LDO##num,		\
904 	.ops		= &s2mpu02_ldo_ops,		\
905 	.type		= REGULATOR_VOLTAGE,		\
906 	.owner		= THIS_MODULE,			\
907 	.min_uV		= S2MPU02_LDO_MIN_900MV,	\
908 	.uV_step	= S2MPU02_LDO_STEP_12_5MV,	\
909 	.linear_min_sel	= S2MPU02_LDO_GROUP1_START_SEL,	\
910 	.n_voltages	= S2MPU02_LDO_N_VOLTAGES,	\
911 	.vsel_reg	= S2MPU02_REG_L1CTRL,		\
912 	.vsel_mask	= S2MPU02_LDO_VSEL_MASK,	\
913 	.enable_reg	= S2MPU02_REG_L1CTRL,		\
914 	.enable_mask	= S2MPU02_ENABLE_MASK		\
915 }
916 #define regulator_desc_s2mpu02_ldo2(num) {		\
917 	.name		= "LDO"#num,			\
918 	.id		= S2MPU02_LDO##num,		\
919 	.ops		= &s2mpu02_ldo_ops,		\
920 	.type		= REGULATOR_VOLTAGE,		\
921 	.owner		= THIS_MODULE,			\
922 	.min_uV		= S2MPU02_LDO_MIN_1050MV,	\
923 	.uV_step	= S2MPU02_LDO_STEP_25MV,	\
924 	.linear_min_sel	= S2MPU02_LDO_GROUP2_START_SEL,	\
925 	.n_voltages	= S2MPU02_LDO_N_VOLTAGES,	\
926 	.vsel_reg	= S2MPU02_REG_L2CTRL1,		\
927 	.vsel_mask	= S2MPU02_LDO_VSEL_MASK,	\
928 	.enable_reg	= S2MPU02_REG_L2CTRL1,		\
929 	.enable_mask	= S2MPU02_ENABLE_MASK		\
930 }
931 #define regulator_desc_s2mpu02_ldo3(num) {		\
932 	.name		= "LDO"#num,			\
933 	.id		= S2MPU02_LDO##num,		\
934 	.ops		= &s2mpu02_ldo_ops,		\
935 	.type		= REGULATOR_VOLTAGE,		\
936 	.owner		= THIS_MODULE,			\
937 	.min_uV		= S2MPU02_LDO_MIN_900MV,	\
938 	.uV_step	= S2MPU02_LDO_STEP_12_5MV,	\
939 	.linear_min_sel	= S2MPU02_LDO_GROUP1_START_SEL,	\
940 	.n_voltages	= S2MPU02_LDO_N_VOLTAGES,	\
941 	.vsel_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
942 	.vsel_mask	= S2MPU02_LDO_VSEL_MASK,	\
943 	.enable_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
944 	.enable_mask	= S2MPU02_ENABLE_MASK		\
945 }
946 #define regulator_desc_s2mpu02_ldo4(num) {		\
947 	.name		= "LDO"#num,			\
948 	.id		= S2MPU02_LDO##num,		\
949 	.ops		= &s2mpu02_ldo_ops,		\
950 	.type		= REGULATOR_VOLTAGE,		\
951 	.owner		= THIS_MODULE,			\
952 	.min_uV		= S2MPU02_LDO_MIN_1050MV,	\
953 	.uV_step	= S2MPU02_LDO_STEP_25MV,	\
954 	.linear_min_sel	= S2MPU02_LDO_GROUP2_START_SEL,	\
955 	.n_voltages	= S2MPU02_LDO_N_VOLTAGES,	\
956 	.vsel_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
957 	.vsel_mask	= S2MPU02_LDO_VSEL_MASK,	\
958 	.enable_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
959 	.enable_mask	= S2MPU02_ENABLE_MASK		\
960 }
961 #define regulator_desc_s2mpu02_ldo5(num) {		\
962 	.name		= "LDO"#num,			\
963 	.id		= S2MPU02_LDO##num,		\
964 	.ops		= &s2mpu02_ldo_ops,		\
965 	.type		= REGULATOR_VOLTAGE,		\
966 	.owner		= THIS_MODULE,			\
967 	.min_uV		= S2MPU02_LDO_MIN_1600MV,	\
968 	.uV_step	= S2MPU02_LDO_STEP_50MV,	\
969 	.linear_min_sel	= S2MPU02_LDO_GROUP3_START_SEL,	\
970 	.n_voltages	= S2MPU02_LDO_N_VOLTAGES,	\
971 	.vsel_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
972 	.vsel_mask	= S2MPU02_LDO_VSEL_MASK,	\
973 	.enable_reg	= S2MPU02_REG_L3CTRL + num - 3,	\
974 	.enable_mask	= S2MPU02_ENABLE_MASK		\
975 }
976 
977 #define regulator_desc_s2mpu02_buck1234(num) {			\
978 	.name		= "BUCK"#num,				\
979 	.id		= S2MPU02_BUCK##num,			\
980 	.ops		= &s2mpu02_buck_ops,			\
981 	.type		= REGULATOR_VOLTAGE,			\
982 	.owner		= THIS_MODULE,				\
983 	.min_uV		= S2MPU02_BUCK1234_MIN_600MV,		\
984 	.uV_step	= S2MPU02_BUCK1234_STEP_6_25MV,		\
985 	.n_voltages	= S2MPU02_BUCK_N_VOLTAGES,		\
986 	.linear_min_sel = S2MPU02_BUCK1234_START_SEL,		\
987 	.ramp_delay	= S2MPU02_BUCK_RAMP_DELAY,		\
988 	.vsel_reg	= S2MPU02_REG_B1CTRL2 + (num - 1) * 2,	\
989 	.vsel_mask	= S2MPU02_BUCK_VSEL_MASK,		\
990 	.enable_reg	= S2MPU02_REG_B1CTRL1 + (num - 1) * 2,	\
991 	.enable_mask	= S2MPU02_ENABLE_MASK			\
992 }
993 #define regulator_desc_s2mpu02_buck5(num) {			\
994 	.name		= "BUCK"#num,				\
995 	.id		= S2MPU02_BUCK##num,			\
996 	.ops		= &s2mpu02_ldo_ops,			\
997 	.type		= REGULATOR_VOLTAGE,			\
998 	.owner		= THIS_MODULE,				\
999 	.min_uV		= S2MPU02_BUCK5_MIN_1081_25MV,		\
1000 	.uV_step	= S2MPU02_BUCK5_STEP_6_25MV,		\
1001 	.n_voltages	= S2MPU02_BUCK_N_VOLTAGES,		\
1002 	.linear_min_sel = S2MPU02_BUCK5_START_SEL,		\
1003 	.ramp_delay	= S2MPU02_BUCK_RAMP_DELAY,		\
1004 	.vsel_reg	= S2MPU02_REG_B5CTRL2,			\
1005 	.vsel_mask	= S2MPU02_BUCK_VSEL_MASK,		\
1006 	.enable_reg	= S2MPU02_REG_B5CTRL1,			\
1007 	.enable_mask	= S2MPU02_ENABLE_MASK			\
1008 }
1009 #define regulator_desc_s2mpu02_buck6(num) {			\
1010 	.name		= "BUCK"#num,				\
1011 	.id		= S2MPU02_BUCK##num,			\
1012 	.ops		= &s2mpu02_ldo_ops,			\
1013 	.type		= REGULATOR_VOLTAGE,			\
1014 	.owner		= THIS_MODULE,				\
1015 	.min_uV		= S2MPU02_BUCK6_MIN_1700MV,		\
1016 	.uV_step	= S2MPU02_BUCK6_STEP_2_50MV,		\
1017 	.n_voltages	= S2MPU02_BUCK_N_VOLTAGES,		\
1018 	.linear_min_sel = S2MPU02_BUCK6_START_SEL,		\
1019 	.ramp_delay	= S2MPU02_BUCK_RAMP_DELAY,		\
1020 	.vsel_reg	= S2MPU02_REG_B6CTRL2,			\
1021 	.vsel_mask	= S2MPU02_BUCK_VSEL_MASK,		\
1022 	.enable_reg	= S2MPU02_REG_B6CTRL1,			\
1023 	.enable_mask	= S2MPU02_ENABLE_MASK			\
1024 }
1025 #define regulator_desc_s2mpu02_buck7(num) {			\
1026 	.name		= "BUCK"#num,				\
1027 	.id		= S2MPU02_BUCK##num,			\
1028 	.ops		= &s2mpu02_ldo_ops,			\
1029 	.type		= REGULATOR_VOLTAGE,			\
1030 	.owner		= THIS_MODULE,				\
1031 	.min_uV		= S2MPU02_BUCK7_MIN_900MV,		\
1032 	.uV_step	= S2MPU02_BUCK7_STEP_6_25MV,		\
1033 	.n_voltages	= S2MPU02_BUCK_N_VOLTAGES,		\
1034 	.linear_min_sel = S2MPU02_BUCK7_START_SEL,		\
1035 	.ramp_delay	= S2MPU02_BUCK_RAMP_DELAY,		\
1036 	.vsel_reg	= S2MPU02_REG_B7CTRL2,			\
1037 	.vsel_mask	= S2MPU02_BUCK_VSEL_MASK,		\
1038 	.enable_reg	= S2MPU02_REG_B7CTRL1,			\
1039 	.enable_mask	= S2MPU02_ENABLE_MASK			\
1040 }
1041 
1042 static const struct regulator_desc s2mpu02_regulators[] = {
1043 	regulator_desc_s2mpu02_ldo1(1),
1044 	regulator_desc_s2mpu02_ldo2(2),
1045 	regulator_desc_s2mpu02_ldo4(3),
1046 	regulator_desc_s2mpu02_ldo5(4),
1047 	regulator_desc_s2mpu02_ldo4(5),
1048 	regulator_desc_s2mpu02_ldo3(6),
1049 	regulator_desc_s2mpu02_ldo3(7),
1050 	regulator_desc_s2mpu02_ldo4(8),
1051 	regulator_desc_s2mpu02_ldo5(9),
1052 	regulator_desc_s2mpu02_ldo3(10),
1053 	regulator_desc_s2mpu02_ldo4(11),
1054 	regulator_desc_s2mpu02_ldo5(12),
1055 	regulator_desc_s2mpu02_ldo5(13),
1056 	regulator_desc_s2mpu02_ldo5(14),
1057 	regulator_desc_s2mpu02_ldo5(15),
1058 	regulator_desc_s2mpu02_ldo5(16),
1059 	regulator_desc_s2mpu02_ldo4(17),
1060 	regulator_desc_s2mpu02_ldo5(18),
1061 	regulator_desc_s2mpu02_ldo3(19),
1062 	regulator_desc_s2mpu02_ldo4(20),
1063 	regulator_desc_s2mpu02_ldo5(21),
1064 	regulator_desc_s2mpu02_ldo5(22),
1065 	regulator_desc_s2mpu02_ldo5(23),
1066 	regulator_desc_s2mpu02_ldo4(24),
1067 	regulator_desc_s2mpu02_ldo5(25),
1068 	regulator_desc_s2mpu02_ldo4(26),
1069 	regulator_desc_s2mpu02_ldo5(27),
1070 	regulator_desc_s2mpu02_ldo5(28),
1071 	regulator_desc_s2mpu02_buck1234(1),
1072 	regulator_desc_s2mpu02_buck1234(2),
1073 	regulator_desc_s2mpu02_buck1234(3),
1074 	regulator_desc_s2mpu02_buck1234(4),
1075 	regulator_desc_s2mpu02_buck5(5),
1076 	regulator_desc_s2mpu02_buck6(6),
1077 	regulator_desc_s2mpu02_buck7(7),
1078 };
1079 
1080 static int s2mps11_pmic_probe(struct platform_device *pdev)
1081 {
1082 	struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
1083 	struct sec_platform_data *pdata = NULL;
1084 	struct of_regulator_match *rdata = NULL;
1085 	struct regulator_config config = { };
1086 	struct s2mps11_info *s2mps11;
1087 	unsigned int rdev_num = 0;
1088 	int i, ret = 0;
1089 	const struct regulator_desc *regulators;
1090 
1091 	s2mps11 = devm_kzalloc(&pdev->dev, sizeof(struct s2mps11_info),
1092 				GFP_KERNEL);
1093 	if (!s2mps11)
1094 		return -ENOMEM;
1095 
1096 	s2mps11->dev_type = platform_get_device_id(pdev)->driver_data;
1097 	switch (s2mps11->dev_type) {
1098 	case S2MPS11X:
1099 		rdev_num = ARRAY_SIZE(s2mps11_regulators);
1100 		regulators = s2mps11_regulators;
1101 		BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mps11_regulators));
1102 		break;
1103 	case S2MPS13X:
1104 		rdev_num = ARRAY_SIZE(s2mps13_regulators);
1105 		regulators = s2mps13_regulators;
1106 		BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mps13_regulators));
1107 		break;
1108 	case S2MPS14X:
1109 		rdev_num = ARRAY_SIZE(s2mps14_regulators);
1110 		regulators = s2mps14_regulators;
1111 		BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mps14_regulators));
1112 		break;
1113 	case S2MPS15X:
1114 		rdev_num = ARRAY_SIZE(s2mps15_regulators);
1115 		regulators = s2mps15_regulators;
1116 		BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mps15_regulators));
1117 		break;
1118 	case S2MPU02:
1119 		rdev_num = ARRAY_SIZE(s2mpu02_regulators);
1120 		regulators = s2mpu02_regulators;
1121 		BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mpu02_regulators));
1122 		break;
1123 	default:
1124 		dev_err(&pdev->dev, "Invalid device type: %u\n",
1125 				    s2mps11->dev_type);
1126 		return -EINVAL;
1127 	}
1128 
1129 	s2mps11->ext_control_gpio = devm_kmalloc_array(&pdev->dev,
1130 			rdev_num, sizeof(*s2mps11->ext_control_gpio),
1131 			GFP_KERNEL);
1132 	if (!s2mps11->ext_control_gpio)
1133 		return -ENOMEM;
1134 	/*
1135 	 * 0 is a valid GPIO so initialize all GPIO-s to negative value
1136 	 * to indicate that external control won't be used for this regulator.
1137 	 */
1138 	for (i = 0; i < rdev_num; i++)
1139 		s2mps11->ext_control_gpio[i] = -EINVAL;
1140 
1141 	if (!iodev->dev->of_node) {
1142 		if (iodev->pdata) {
1143 			pdata = iodev->pdata;
1144 			goto common_reg;
1145 		} else {
1146 			dev_err(pdev->dev.parent,
1147 				"Platform data or DT node not supplied\n");
1148 			return -ENODEV;
1149 		}
1150 	}
1151 
1152 	rdata = kcalloc(rdev_num, sizeof(*rdata), GFP_KERNEL);
1153 	if (!rdata)
1154 		return -ENOMEM;
1155 
1156 	for (i = 0; i < rdev_num; i++)
1157 		rdata[i].name = regulators[i].name;
1158 
1159 	ret = s2mps11_pmic_dt_parse(pdev, rdata, s2mps11, rdev_num);
1160 	if (ret)
1161 		goto out;
1162 
1163 common_reg:
1164 	platform_set_drvdata(pdev, s2mps11);
1165 
1166 	config.dev = &pdev->dev;
1167 	config.regmap = iodev->regmap_pmic;
1168 	config.driver_data = s2mps11;
1169 	config.ena_gpio_flags = GPIOF_OUT_INIT_HIGH;
1170 	config.ena_gpio_initialized = true;
1171 	for (i = 0; i < rdev_num; i++) {
1172 		struct regulator_dev *regulator;
1173 
1174 		if (pdata) {
1175 			config.init_data = pdata->regulators[i].initdata;
1176 			config.of_node = pdata->regulators[i].reg_node;
1177 		} else {
1178 			config.init_data = rdata[i].init_data;
1179 			config.of_node = rdata[i].of_node;
1180 		}
1181 		config.ena_gpio = s2mps11->ext_control_gpio[i];
1182 
1183 		regulator = devm_regulator_register(&pdev->dev,
1184 						&regulators[i], &config);
1185 		if (IS_ERR(regulator)) {
1186 			ret = PTR_ERR(regulator);
1187 			dev_err(&pdev->dev, "regulator init failed for %d\n",
1188 				i);
1189 			goto out;
1190 		}
1191 
1192 		if (gpio_is_valid(s2mps11->ext_control_gpio[i])) {
1193 			ret = s2mps14_pmic_enable_ext_control(s2mps11,
1194 					regulator);
1195 			if (ret < 0) {
1196 				dev_err(&pdev->dev,
1197 						"failed to enable GPIO control over %s: %d\n",
1198 						regulator->desc->name, ret);
1199 				goto out;
1200 			}
1201 		}
1202 	}
1203 
1204 out:
1205 	kfree(rdata);
1206 
1207 	return ret;
1208 }
1209 
1210 static const struct platform_device_id s2mps11_pmic_id[] = {
1211 	{ "s2mps11-regulator", S2MPS11X},
1212 	{ "s2mps13-regulator", S2MPS13X},
1213 	{ "s2mps14-regulator", S2MPS14X},
1214 	{ "s2mps15-regulator", S2MPS15X},
1215 	{ "s2mpu02-regulator", S2MPU02},
1216 	{ },
1217 };
1218 MODULE_DEVICE_TABLE(platform, s2mps11_pmic_id);
1219 
1220 static struct platform_driver s2mps11_pmic_driver = {
1221 	.driver = {
1222 		.name = "s2mps11-pmic",
1223 	},
1224 	.probe = s2mps11_pmic_probe,
1225 	.id_table = s2mps11_pmic_id,
1226 };
1227 
1228 module_platform_driver(s2mps11_pmic_driver);
1229 
1230 /* Module information */
1231 MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
1232 MODULE_DESCRIPTION("SAMSUNG S2MPS11/S2MPS14/S2MPS15/S2MPU02 Regulator Driver");
1233 MODULE_LICENSE("GPL");
1234