aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator
diff options
context:
space:
mode:
authorAmit Daniel Kachhap <amit.daniel@samsung.com>2014-07-15 07:02:52 -0400
committerMark Brown <broonie@linaro.org>2014-08-16 17:51:16 -0400
commitd264fd4541753bf3fe2613805b3cab95b54a3f32 (patch)
tree0439f29aff30567bc89e8591090402c96e248703 /drivers/regulator
parent0e4f417857083f399769491f6e7773d111debd0f (diff)
regulator: s2mpa01: Optimize the regulator description macro
This patch makes the regulator description macro take minimum and steps voltage as parameter. In this way many repeated macros can be removed. Now these macros are repeated only if the the LDO/BUCK ctrl registers have non-linear positions. The good thing is these ctrl registers are mostly linear so they are not passed as parameters. This patch reduces the code size and also allow easy addition of more s2mpxxx PMIC drivers which differs a lot in minimum/step voltages. Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Amit Daniel Kachhap <amit.daniel@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/s2mpa01.c134
1 files changed, 36 insertions, 98 deletions
diff --git a/drivers/regulator/s2mpa01.c b/drivers/regulator/s2mpa01.c
index 962c5f192f7c..4acefa6b462e 100644
--- a/drivers/regulator/s2mpa01.c
+++ b/drivers/regulator/s2mpa01.c
@@ -235,28 +235,14 @@ static struct regulator_ops s2mpa01_buck_ops = {
235 .set_ramp_delay = s2mpa01_set_ramp_delay, 235 .set_ramp_delay = s2mpa01_set_ramp_delay,
236}; 236};
237 237
238#define regulator_desc_ldo1(num) { \ 238#define regulator_desc_ldo(num, step) { \
239 .name = "LDO"#num, \ 239 .name = "LDO"#num, \
240 .id = S2MPA01_LDO##num, \ 240 .id = S2MPA01_LDO##num, \
241 .ops = &s2mpa01_ldo_ops, \ 241 .ops = &s2mpa01_ldo_ops, \
242 .type = REGULATOR_VOLTAGE, \ 242 .type = REGULATOR_VOLTAGE, \
243 .owner = THIS_MODULE, \ 243 .owner = THIS_MODULE, \
244 .min_uV = MIN_800_MV, \ 244 .min_uV = MIN_800_MV, \
245 .uV_step = STEP_50_MV, \ 245 .uV_step = step, \
246 .n_voltages = S2MPA01_LDO_N_VOLTAGES, \
247 .vsel_reg = S2MPA01_REG_L1CTRL + num - 1, \
248 .vsel_mask = S2MPA01_LDO_VSEL_MASK, \
249 .enable_reg = S2MPA01_REG_L1CTRL + num - 1, \
250 .enable_mask = S2MPA01_ENABLE_MASK \
251}
252#define regulator_desc_ldo2(num) { \
253 .name = "LDO"#num, \
254 .id = S2MPA01_LDO##num, \
255 .ops = &s2mpa01_ldo_ops, \
256 .type = REGULATOR_VOLTAGE, \
257 .owner = THIS_MODULE, \
258 .min_uV = MIN_800_MV, \
259 .uV_step = STEP_25_MV, \
260 .n_voltages = S2MPA01_LDO_N_VOLTAGES, \ 246 .n_voltages = S2MPA01_LDO_N_VOLTAGES, \
261 .vsel_reg = S2MPA01_REG_L1CTRL + num - 1, \ 247 .vsel_reg = S2MPA01_REG_L1CTRL + num - 1, \
262 .vsel_mask = S2MPA01_LDO_VSEL_MASK, \ 248 .vsel_mask = S2MPA01_LDO_VSEL_MASK, \
@@ -296,14 +282,14 @@ static struct regulator_ops s2mpa01_buck_ops = {
296 .enable_mask = S2MPA01_ENABLE_MASK \ 282 .enable_mask = S2MPA01_ENABLE_MASK \
297} 283}
298 284
299#define regulator_desc_buck6_7(num) { \ 285#define regulator_desc_buck6_10(num, min, step) { \
300 .name = "BUCK"#num, \ 286 .name = "BUCK"#num, \
301 .id = S2MPA01_BUCK##num, \ 287 .id = S2MPA01_BUCK##num, \
302 .ops = &s2mpa01_buck_ops, \ 288 .ops = &s2mpa01_buck_ops, \
303 .type = REGULATOR_VOLTAGE, \ 289 .type = REGULATOR_VOLTAGE, \
304 .owner = THIS_MODULE, \ 290 .owner = THIS_MODULE, \
305 .min_uV = MIN_600_MV, \ 291 .min_uV = min, \
306 .uV_step = STEP_6_25_MV, \ 292 .uV_step = step, \
307 .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ 293 .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \
308 .ramp_delay = S2MPA01_RAMP_DELAY, \ 294 .ramp_delay = S2MPA01_RAMP_DELAY, \
309 .vsel_reg = S2MPA01_REG_B6CTRL2 + (num - 6) * 2, \ 295 .vsel_reg = S2MPA01_REG_B6CTRL2 + (num - 6) * 2, \
@@ -312,91 +298,43 @@ static struct regulator_ops s2mpa01_buck_ops = {
312 .enable_mask = S2MPA01_ENABLE_MASK \ 298 .enable_mask = S2MPA01_ENABLE_MASK \
313} 299}
314 300
315#define regulator_desc_buck8 { \
316 .name = "BUCK8", \
317 .id = S2MPA01_BUCK8, \
318 .ops = &s2mpa01_buck_ops, \
319 .type = REGULATOR_VOLTAGE, \
320 .owner = THIS_MODULE, \
321 .min_uV = MIN_800_MV, \
322 .uV_step = STEP_12_5_MV, \
323 .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \
324 .ramp_delay = S2MPA01_RAMP_DELAY, \
325 .vsel_reg = S2MPA01_REG_B8CTRL2, \
326 .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \
327 .enable_reg = S2MPA01_REG_B8CTRL1, \
328 .enable_mask = S2MPA01_ENABLE_MASK \
329}
330
331#define regulator_desc_buck9 { \
332 .name = "BUCK9", \
333 .id = S2MPA01_BUCK9, \
334 .ops = &s2mpa01_buck_ops, \
335 .type = REGULATOR_VOLTAGE, \
336 .owner = THIS_MODULE, \
337 .min_uV = MIN_1500_MV, \
338 .uV_step = STEP_12_5_MV, \
339 .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \
340 .ramp_delay = S2MPA01_RAMP_DELAY, \
341 .vsel_reg = S2MPA01_REG_B9CTRL2, \
342 .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \
343 .enable_reg = S2MPA01_REG_B9CTRL1, \
344 .enable_mask = S2MPA01_ENABLE_MASK \
345}
346
347#define regulator_desc_buck10 { \
348 .name = "BUCK10", \
349 .id = S2MPA01_BUCK10, \
350 .ops = &s2mpa01_buck_ops, \
351 .type = REGULATOR_VOLTAGE, \
352 .owner = THIS_MODULE, \
353 .min_uV = MIN_1000_MV, \
354 .uV_step = STEP_12_5_MV, \
355 .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \
356 .ramp_delay = S2MPA01_RAMP_DELAY, \
357 .vsel_reg = S2MPA01_REG_B10CTRL2, \
358 .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \
359 .enable_reg = S2MPA01_REG_B10CTRL1, \
360 .enable_mask = S2MPA01_ENABLE_MASK \
361}
362
363static struct regulator_desc regulators[] = { 301static struct regulator_desc regulators[] = {
364 regulator_desc_ldo2(1), 302 regulator_desc_ldo(1, STEP_25_MV),
365 regulator_desc_ldo1(2), 303 regulator_desc_ldo(2, STEP_50_MV),
366 regulator_desc_ldo1(3), 304 regulator_desc_ldo(3, STEP_50_MV),
367 regulator_desc_ldo1(4), 305 regulator_desc_ldo(4, STEP_50_MV),
368 regulator_desc_ldo1(5), 306 regulator_desc_ldo(5, STEP_50_MV),
369 regulator_desc_ldo2(6), 307 regulator_desc_ldo(6, STEP_25_MV),
370 regulator_desc_ldo1(7), 308 regulator_desc_ldo(7, STEP_50_MV),
371 regulator_desc_ldo1(8), 309 regulator_desc_ldo(8, STEP_50_MV),
372 regulator_desc_ldo1(9), 310 regulator_desc_ldo(9, STEP_50_MV),
373 regulator_desc_ldo1(10), 311 regulator_desc_ldo(10, STEP_50_MV),
374 regulator_desc_ldo2(11), 312 regulator_desc_ldo(11, STEP_25_MV),
375 regulator_desc_ldo1(12), 313 regulator_desc_ldo(12, STEP_50_MV),
376 regulator_desc_ldo1(13), 314 regulator_desc_ldo(13, STEP_50_MV),
377 regulator_desc_ldo1(14), 315 regulator_desc_ldo(14, STEP_50_MV),
378 regulator_desc_ldo1(15), 316 regulator_desc_ldo(15, STEP_50_MV),
379 regulator_desc_ldo1(16), 317 regulator_desc_ldo(16, STEP_50_MV),
380 regulator_desc_ldo1(17), 318 regulator_desc_ldo(17, STEP_50_MV),
381 regulator_desc_ldo1(18), 319 regulator_desc_ldo(18, STEP_50_MV),
382 regulator_desc_ldo1(19), 320 regulator_desc_ldo(19, STEP_50_MV),
383 regulator_desc_ldo1(20), 321 regulator_desc_ldo(20, STEP_50_MV),
384 regulator_desc_ldo1(21), 322 regulator_desc_ldo(21, STEP_50_MV),
385 regulator_desc_ldo2(22), 323 regulator_desc_ldo(22, STEP_25_MV),
386 regulator_desc_ldo2(23), 324 regulator_desc_ldo(23, STEP_25_MV),
387 regulator_desc_ldo1(24), 325 regulator_desc_ldo(24, STEP_50_MV),
388 regulator_desc_ldo1(25), 326 regulator_desc_ldo(25, STEP_50_MV),
389 regulator_desc_ldo1(26), 327 regulator_desc_ldo(26, STEP_50_MV),
390 regulator_desc_buck1_4(1), 328 regulator_desc_buck1_4(1),
391 regulator_desc_buck1_4(2), 329 regulator_desc_buck1_4(2),
392 regulator_desc_buck1_4(3), 330 regulator_desc_buck1_4(3),
393 regulator_desc_buck1_4(4), 331 regulator_desc_buck1_4(4),
394 regulator_desc_buck5, 332 regulator_desc_buck5,
395 regulator_desc_buck6_7(6), 333 regulator_desc_buck6_10(6, MIN_600_MV, STEP_6_25_MV),
396 regulator_desc_buck6_7(7), 334 regulator_desc_buck6_10(7, MIN_600_MV, STEP_6_25_MV),
397 regulator_desc_buck8, 335 regulator_desc_buck6_10(8, MIN_800_MV, STEP_12_5_MV),
398 regulator_desc_buck9, 336 regulator_desc_buck6_10(9, MIN_1500_MV, STEP_12_5_MV),
399 regulator_desc_buck10, 337 regulator_desc_buck6_10(10, MIN_1000_MV, STEP_12_5_MV),
400}; 338};
401 339
402static int s2mpa01_pmic_probe(struct platform_device *pdev) 340static int s2mpa01_pmic_probe(struct platform_device *pdev)