2 * max8998.c - Voltage regulator driver for the Maxim 8998
4 * Copyright (C) 2009-2010 Samsung Electronics
5 * Kyungmin Park <kyungmin.park@samsung.com>
6 * Marek Szyprowski <m.szyprowski@samsung.com>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <linux/module.h>
24 #include <linux/init.h>
25 #include <linux/i2c.h>
26 #include <linux/err.h>
27 #include <linux/gpio.h>
28 #include <linux/slab.h>
29 #include <linux/interrupt.h>
30 #include <linux/mutex.h>
31 #include <linux/delay.h>
32 #include <linux/platform_device.h>
33 #include <linux/regulator/driver.h>
34 #include <linux/mfd/max8998.h>
35 #include <linux/mfd/max8998-private.h>
39 struct max8998_dev
*iodev
;
41 struct regulator_dev
**rdev
;
44 struct voltage_map_desc
{
51 static const struct voltage_map_desc ldo23_voltage_map_desc
= {
52 .min
= 800, .step
= 50, .max
= 1300,
54 static const struct voltage_map_desc ldo456711_voltage_map_desc
= {
55 .min
= 1600, .step
= 100, .max
= 3600,
57 static const struct voltage_map_desc ldo8_voltage_map_desc
= {
58 .min
= 3000, .step
= 100, .max
= 3600,
60 static const struct voltage_map_desc ldo9_voltage_map_desc
= {
61 .min
= 2800, .step
= 100, .max
= 3100,
63 static const struct voltage_map_desc ldo10_voltage_map_desc
= {
64 .min
= 950, .step
= 50, .max
= 1300,
66 static const struct voltage_map_desc ldo1213_voltage_map_desc
= {
67 .min
= 800, .step
= 100, .max
= 3300,
69 static const struct voltage_map_desc ldo1415_voltage_map_desc
= {
70 .min
= 1200, .step
= 100, .max
= 3300,
72 static const struct voltage_map_desc ldo1617_voltage_map_desc
= {
73 .min
= 1600, .step
= 100, .max
= 3600,
75 static const struct voltage_map_desc buck12_voltage_map_desc
= {
76 .min
= 750, .step
= 25, .max
= 1525,
78 static const struct voltage_map_desc buck3_voltage_map_desc
= {
79 .min
= 1600, .step
= 100, .max
= 3600,
81 static const struct voltage_map_desc buck4_voltage_map_desc
= {
82 .min
= 800, .step
= 100, .max
= 2300,
85 static const struct voltage_map_desc
*ldo_voltage_map
[] = {
88 &ldo23_voltage_map_desc
, /* LDO2 */
89 &ldo23_voltage_map_desc
, /* LDO3 */
90 &ldo456711_voltage_map_desc
, /* LDO4 */
91 &ldo456711_voltage_map_desc
, /* LDO5 */
92 &ldo456711_voltage_map_desc
, /* LDO6 */
93 &ldo456711_voltage_map_desc
, /* LDO7 */
94 &ldo8_voltage_map_desc
, /* LDO8 */
95 &ldo9_voltage_map_desc
, /* LDO9 */
96 &ldo10_voltage_map_desc
, /* LDO10 */
97 &ldo456711_voltage_map_desc
, /* LDO11 */
98 &ldo1213_voltage_map_desc
, /* LDO12 */
99 &ldo1213_voltage_map_desc
, /* LDO13 */
100 &ldo1415_voltage_map_desc
, /* LDO14 */
101 &ldo1415_voltage_map_desc
, /* LDO15 */
102 &ldo1617_voltage_map_desc
, /* LDO16 */
103 &ldo1617_voltage_map_desc
, /* LDO17 */
104 &buck12_voltage_map_desc
, /* BUCK1 */
105 &buck12_voltage_map_desc
, /* BUCK2 */
106 &buck3_voltage_map_desc
, /* BUCK3 */
107 &buck4_voltage_map_desc
, /* BUCK4 */
110 static inline int max8998_get_ldo(struct regulator_dev
*rdev
)
112 return rdev_get_id(rdev
);
115 static int max8998_list_voltage(struct regulator_dev
*rdev
,
116 unsigned int selector
)
118 const struct voltage_map_desc
*desc
;
119 int ldo
= max8998_get_ldo(rdev
);
122 if (ldo
>= ARRAY_SIZE(ldo_voltage_map
))
125 desc
= ldo_voltage_map
[ldo
];
129 val
= desc
->min
+ desc
->step
* selector
;
136 static int max8998_get_enable_register(struct regulator_dev
*rdev
,
137 int *reg
, int *shift
)
139 int ldo
= max8998_get_ldo(rdev
);
142 case MAX8998_LDO2
... MAX8998_LDO5
:
143 *reg
= MAX8998_REG_ONOFF1
;
144 *shift
= 3 - (ldo
- MAX8998_LDO2
);
146 case MAX8998_LDO6
... MAX8998_LDO13
:
147 *reg
= MAX8998_REG_ONOFF2
;
148 *shift
= 7 - (ldo
- MAX8998_LDO6
);
150 case MAX8998_LDO14
... MAX8998_LDO17
:
151 *reg
= MAX8998_REG_ONOFF3
;
152 *shift
= 7 - (ldo
- MAX8998_LDO14
);
154 case MAX8998_BUCK1
... MAX8998_BUCK4
:
155 *reg
= MAX8998_REG_ONOFF1
;
156 *shift
= 7 - (ldo
- MAX8998_BUCK1
);
158 case MAX8998_EN32KHZ_AP
... MAX8998_ENVICHG
:
159 *reg
= MAX8998_REG_ONOFF4
;
160 *shift
= 7 - (ldo
- MAX8998_EN32KHZ_AP
);
162 case MAX8998_ESAFEOUT1
... MAX8998_ESAFEOUT2
:
163 *reg
= MAX8998_REG_CHGR2
;
164 *shift
= 7 - (ldo
- MAX8998_ESAFEOUT1
);
173 static int max8998_ldo_is_enabled(struct regulator_dev
*rdev
)
175 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
176 int ret
, reg
, shift
= 8;
179 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
183 ret
= max8998_read_reg(max8998
->iodev
, reg
, &val
);
187 return val
& (1 << shift
);
190 static int max8998_ldo_enable(struct regulator_dev
*rdev
)
192 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
193 int reg
, shift
= 8, ret
;
195 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
199 return max8998_update_reg(max8998
->iodev
, reg
, 1<<shift
, 1<<shift
);
202 static int max8998_ldo_disable(struct regulator_dev
*rdev
)
204 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
205 int reg
, shift
= 8, ret
;
207 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
211 return max8998_update_reg(max8998
->iodev
, reg
, 0, 1<<shift
);
214 static int max8998_get_voltage_register(struct regulator_dev
*rdev
,
215 int *_reg
, int *_shift
, int *_mask
)
217 int ldo
= max8998_get_ldo(rdev
);
218 int reg
, shift
= 0, mask
= 0xff;
221 case MAX8998_LDO2
... MAX8998_LDO3
:
222 reg
= MAX8998_REG_LDO2_LDO3
;
224 if (ldo
== MAX8998_LDO2
)
229 case MAX8998_LDO4
... MAX8998_LDO7
:
230 reg
= MAX8998_REG_LDO4
+ (ldo
- MAX8998_LDO4
);
232 case MAX8998_LDO8
... MAX8998_LDO9
:
233 reg
= MAX8998_REG_LDO8_LDO9
;
235 if (ldo
== MAX8998_LDO8
)
240 case MAX8998_LDO10
... MAX8998_LDO11
:
241 reg
= MAX8998_REG_LDO10_LDO11
;
242 if (ldo
== MAX8998_LDO10
) {
250 case MAX8998_LDO12
... MAX8998_LDO17
:
251 reg
= MAX8998_REG_LDO12
+ (ldo
- MAX8998_LDO12
);
254 reg
= MAX8998_REG_BUCK1_DVSARM1
;
257 reg
= MAX8998_REG_BUCK2_DVSINT1
;
260 reg
= MAX8998_REG_BUCK3
;
263 reg
= MAX8998_REG_BUCK4
;
276 static int max8998_get_voltage(struct regulator_dev
*rdev
)
278 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
279 int reg
, shift
= 0, mask
, ret
;
282 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
286 ret
= max8998_read_reg(max8998
->iodev
, reg
, &val
);
293 return max8998_list_voltage(rdev
, val
);
296 static int max8998_set_voltage(struct regulator_dev
*rdev
,
297 int min_uV
, int max_uV
)
299 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
300 int min_vol
= min_uV
/ 1000, max_vol
= max_uV
/ 1000;
301 int previous_vol
= 0;
302 const struct voltage_map_desc
*desc
;
303 int ldo
= max8998_get_ldo(rdev
);
304 int reg
, shift
= 0, mask
, ret
;
307 bool en_ramp
= false;
309 if (ldo
>= ARRAY_SIZE(ldo_voltage_map
))
312 desc
= ldo_voltage_map
[ldo
];
316 if (max_vol
< desc
->min
|| min_vol
> desc
->max
)
319 while (desc
->min
+ desc
->step
*i
< min_vol
&&
320 desc
->min
+ desc
->step
*i
< desc
->max
)
323 if (desc
->min
+ desc
->step
*i
> max_vol
)
326 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
330 /* wait for RAMP_UP_DELAY if rdev is BUCK1/2 and
332 if (ldo
== MAX8998_BUCK1
|| ldo
== MAX8998_BUCK2
) {
333 max8998_read_reg(max8998
->iodev
, MAX8998_REG_ONOFF4
, &val
);
334 if (val
& (1 << 4)) {
336 previous_vol
= max8998_get_voltage(rdev
);
340 ret
= max8998_update_reg(max8998
->iodev
, reg
, i
<<shift
, mask
<<shift
);
342 if (en_ramp
== true) {
343 int difference
= desc
->min
+ desc
->step
*i
- previous_vol
/1000;
345 udelay(difference
/ ((val
& 0x0f) + 1));
351 static struct regulator_ops max8998_ldo_ops
= {
352 .list_voltage
= max8998_list_voltage
,
353 .is_enabled
= max8998_ldo_is_enabled
,
354 .enable
= max8998_ldo_enable
,
355 .disable
= max8998_ldo_disable
,
356 .get_voltage
= max8998_get_voltage
,
357 .set_voltage
= max8998_set_voltage
,
358 .set_suspend_enable
= max8998_ldo_enable
,
359 .set_suspend_disable
= max8998_ldo_disable
,
362 static struct regulator_ops max8998_buck_ops
= {
363 .list_voltage
= max8998_list_voltage
,
364 .is_enabled
= max8998_ldo_is_enabled
,
365 .enable
= max8998_ldo_enable
,
366 .disable
= max8998_ldo_disable
,
367 .get_voltage
= max8998_get_voltage
,
368 .set_voltage
= max8998_set_voltage
,
369 .set_suspend_enable
= max8998_ldo_enable
,
370 .set_suspend_disable
= max8998_ldo_disable
,
373 static struct regulator_ops max8998_others_ops
= {
374 .is_enabled
= max8998_ldo_is_enabled
,
375 .enable
= max8998_ldo_enable
,
376 .disable
= max8998_ldo_disable
,
377 .set_suspend_enable
= max8998_ldo_enable
,
378 .set_suspend_disable
= max8998_ldo_disable
,
381 static struct regulator_desc regulators
[] = {
385 .ops
= &max8998_ldo_ops
,
386 .type
= REGULATOR_VOLTAGE
,
387 .owner
= THIS_MODULE
,
391 .ops
= &max8998_ldo_ops
,
392 .type
= REGULATOR_VOLTAGE
,
393 .owner
= THIS_MODULE
,
397 .ops
= &max8998_ldo_ops
,
398 .type
= REGULATOR_VOLTAGE
,
399 .owner
= THIS_MODULE
,
403 .ops
= &max8998_ldo_ops
,
404 .type
= REGULATOR_VOLTAGE
,
405 .owner
= THIS_MODULE
,
409 .ops
= &max8998_ldo_ops
,
410 .type
= REGULATOR_VOLTAGE
,
411 .owner
= THIS_MODULE
,
415 .ops
= &max8998_ldo_ops
,
416 .type
= REGULATOR_VOLTAGE
,
417 .owner
= THIS_MODULE
,
421 .ops
= &max8998_ldo_ops
,
422 .type
= REGULATOR_VOLTAGE
,
423 .owner
= THIS_MODULE
,
427 .ops
= &max8998_ldo_ops
,
428 .type
= REGULATOR_VOLTAGE
,
429 .owner
= THIS_MODULE
,
433 .ops
= &max8998_ldo_ops
,
434 .type
= REGULATOR_VOLTAGE
,
435 .owner
= THIS_MODULE
,
439 .ops
= &max8998_ldo_ops
,
440 .type
= REGULATOR_VOLTAGE
,
441 .owner
= THIS_MODULE
,
445 .ops
= &max8998_ldo_ops
,
446 .type
= REGULATOR_VOLTAGE
,
447 .owner
= THIS_MODULE
,
451 .ops
= &max8998_ldo_ops
,
452 .type
= REGULATOR_VOLTAGE
,
453 .owner
= THIS_MODULE
,
457 .ops
= &max8998_ldo_ops
,
458 .type
= REGULATOR_VOLTAGE
,
459 .owner
= THIS_MODULE
,
463 .ops
= &max8998_ldo_ops
,
464 .type
= REGULATOR_VOLTAGE
,
465 .owner
= THIS_MODULE
,
469 .ops
= &max8998_ldo_ops
,
470 .type
= REGULATOR_VOLTAGE
,
471 .owner
= THIS_MODULE
,
475 .ops
= &max8998_ldo_ops
,
476 .type
= REGULATOR_VOLTAGE
,
477 .owner
= THIS_MODULE
,
481 .ops
= &max8998_buck_ops
,
482 .type
= REGULATOR_VOLTAGE
,
483 .owner
= THIS_MODULE
,
487 .ops
= &max8998_buck_ops
,
488 .type
= REGULATOR_VOLTAGE
,
489 .owner
= THIS_MODULE
,
493 .ops
= &max8998_buck_ops
,
494 .type
= REGULATOR_VOLTAGE
,
495 .owner
= THIS_MODULE
,
499 .ops
= &max8998_buck_ops
,
500 .type
= REGULATOR_VOLTAGE
,
501 .owner
= THIS_MODULE
,
503 .name
= "EN32KHz AP",
504 .id
= MAX8998_EN32KHZ_AP
,
505 .ops
= &max8998_others_ops
,
506 .type
= REGULATOR_VOLTAGE
,
507 .owner
= THIS_MODULE
,
509 .name
= "EN32KHz CP",
510 .id
= MAX8998_EN32KHZ_CP
,
511 .ops
= &max8998_others_ops
,
512 .type
= REGULATOR_VOLTAGE
,
513 .owner
= THIS_MODULE
,
516 .id
= MAX8998_ENVICHG
,
517 .ops
= &max8998_others_ops
,
518 .type
= REGULATOR_VOLTAGE
,
519 .owner
= THIS_MODULE
,
522 .id
= MAX8998_ESAFEOUT1
,
523 .ops
= &max8998_others_ops
,
524 .type
= REGULATOR_VOLTAGE
,
525 .owner
= THIS_MODULE
,
528 .id
= MAX8998_ESAFEOUT2
,
529 .ops
= &max8998_others_ops
,
530 .type
= REGULATOR_VOLTAGE
,
531 .owner
= THIS_MODULE
,
535 static __devinit
int max8998_pmic_probe(struct platform_device
*pdev
)
537 struct max8998_dev
*iodev
= dev_get_drvdata(pdev
->dev
.parent
);
538 struct max8998_platform_data
*pdata
= dev_get_platdata(iodev
->dev
);
539 struct regulator_dev
**rdev
;
540 struct max8998_data
*max8998
;
544 dev_err(pdev
->dev
.parent
, "No platform init data supplied\n");
548 max8998
= kzalloc(sizeof(struct max8998_data
), GFP_KERNEL
);
552 size
= sizeof(struct regulator_dev
*) * pdata
->num_regulators
;
553 max8998
->rdev
= kzalloc(size
, GFP_KERNEL
);
554 if (!max8998
->rdev
) {
559 rdev
= max8998
->rdev
;
560 max8998
->dev
= &pdev
->dev
;
561 max8998
->iodev
= iodev
;
562 max8998
->num_regulators
= pdata
->num_regulators
;
563 platform_set_drvdata(pdev
, max8998
);
565 for (i
= 0; i
< pdata
->num_regulators
; i
++) {
566 const struct voltage_map_desc
*desc
;
567 int id
= pdata
->regulators
[i
].id
;
568 int index
= id
- MAX8998_LDO2
;
570 desc
= ldo_voltage_map
[id
];
571 if (desc
&& regulators
[index
].ops
!= &max8998_others_ops
) {
572 int count
= (desc
->max
- desc
->min
) / desc
->step
+ 1;
573 regulators
[index
].n_voltages
= count
;
575 rdev
[i
] = regulator_register(®ulators
[index
], max8998
->dev
,
576 pdata
->regulators
[i
].initdata
, max8998
);
577 if (IS_ERR(rdev
[i
])) {
578 ret
= PTR_ERR(rdev
[i
]);
579 dev_err(max8998
->dev
, "regulator init failed\n");
588 for (i
= 0; i
< max8998
->num_regulators
; i
++)
590 regulator_unregister(rdev
[i
]);
592 kfree(max8998
->rdev
);
598 static int __devexit
max8998_pmic_remove(struct platform_device
*pdev
)
600 struct max8998_data
*max8998
= platform_get_drvdata(pdev
);
601 struct regulator_dev
**rdev
= max8998
->rdev
;
604 for (i
= 0; i
< max8998
->num_regulators
; i
++)
606 regulator_unregister(rdev
[i
]);
608 kfree(max8998
->rdev
);
614 static struct platform_driver max8998_pmic_driver
= {
616 .name
= "max8998-pmic",
617 .owner
= THIS_MODULE
,
619 .probe
= max8998_pmic_probe
,
620 .remove
= __devexit_p(max8998_pmic_remove
),
623 static int __init
max8998_pmic_init(void)
625 return platform_driver_register(&max8998_pmic_driver
);
627 subsys_initcall(max8998_pmic_init
);
629 static void __exit
max8998_pmic_cleanup(void)
631 platform_driver_unregister(&max8998_pmic_driver
);
633 module_exit(max8998_pmic_cleanup
);
635 MODULE_DESCRIPTION("MAXIM 8998 voltage regulator driver");
636 MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>");
637 MODULE_LICENSE("GPL");