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/platform_device.h>
32 #include <linux/regulator/driver.h>
33 #include <linux/mfd/max8998.h>
34 #include <linux/mfd/max8998-private.h>
38 struct max8998_dev
*iodev
;
40 struct regulator_dev
**rdev
;
41 u8 buck1_vol
[4]; /* voltages for selection */
43 unsigned int buck1_idx
; /* index to last changed voltage */
45 unsigned int buck2_idx
;
48 struct voltage_map_desc
{
54 /* Voltage maps in uV*/
55 static const struct voltage_map_desc ldo23_voltage_map_desc
= {
56 .min
= 800000, .step
= 50000, .max
= 1300000,
58 static const struct voltage_map_desc ldo456711_voltage_map_desc
= {
59 .min
= 1600000, .step
= 100000, .max
= 3600000,
61 static const struct voltage_map_desc ldo8_voltage_map_desc
= {
62 .min
= 3000000, .step
= 100000, .max
= 3600000,
64 static const struct voltage_map_desc ldo9_voltage_map_desc
= {
65 .min
= 2800000, .step
= 100000, .max
= 3100000,
67 static const struct voltage_map_desc ldo10_voltage_map_desc
= {
68 .min
= 95000, .step
= 50000, .max
= 1300000,
70 static const struct voltage_map_desc ldo1213_voltage_map_desc
= {
71 .min
= 800000, .step
= 100000, .max
= 3300000,
73 static const struct voltage_map_desc ldo1415_voltage_map_desc
= {
74 .min
= 1200000, .step
= 100000, .max
= 3300000,
76 static const struct voltage_map_desc ldo1617_voltage_map_desc
= {
77 .min
= 1600000, .step
= 100000, .max
= 3600000,
79 static const struct voltage_map_desc buck12_voltage_map_desc
= {
80 .min
= 750000, .step
= 25000, .max
= 1525000,
82 static const struct voltage_map_desc buck3_voltage_map_desc
= {
83 .min
= 1600000, .step
= 100000, .max
= 3600000,
85 static const struct voltage_map_desc buck4_voltage_map_desc
= {
86 .min
= 800000, .step
= 100000, .max
= 2300000,
89 static const struct voltage_map_desc
*ldo_voltage_map
[] = {
92 &ldo23_voltage_map_desc
, /* LDO2 */
93 &ldo23_voltage_map_desc
, /* LDO3 */
94 &ldo456711_voltage_map_desc
, /* LDO4 */
95 &ldo456711_voltage_map_desc
, /* LDO5 */
96 &ldo456711_voltage_map_desc
, /* LDO6 */
97 &ldo456711_voltage_map_desc
, /* LDO7 */
98 &ldo8_voltage_map_desc
, /* LDO8 */
99 &ldo9_voltage_map_desc
, /* LDO9 */
100 &ldo10_voltage_map_desc
, /* LDO10 */
101 &ldo456711_voltage_map_desc
, /* LDO11 */
102 &ldo1213_voltage_map_desc
, /* LDO12 */
103 &ldo1213_voltage_map_desc
, /* LDO13 */
104 &ldo1415_voltage_map_desc
, /* LDO14 */
105 &ldo1415_voltage_map_desc
, /* LDO15 */
106 &ldo1617_voltage_map_desc
, /* LDO16 */
107 &ldo1617_voltage_map_desc
, /* LDO17 */
108 &buck12_voltage_map_desc
, /* BUCK1 */
109 &buck12_voltage_map_desc
, /* BUCK2 */
110 &buck3_voltage_map_desc
, /* BUCK3 */
111 &buck4_voltage_map_desc
, /* BUCK4 */
114 static int max8998_get_enable_register(struct regulator_dev
*rdev
,
115 int *reg
, int *shift
)
117 int ldo
= rdev_get_id(rdev
);
120 case MAX8998_LDO2
... MAX8998_LDO5
:
121 *reg
= MAX8998_REG_ONOFF1
;
122 *shift
= 3 - (ldo
- MAX8998_LDO2
);
124 case MAX8998_LDO6
... MAX8998_LDO13
:
125 *reg
= MAX8998_REG_ONOFF2
;
126 *shift
= 7 - (ldo
- MAX8998_LDO6
);
128 case MAX8998_LDO14
... MAX8998_LDO17
:
129 *reg
= MAX8998_REG_ONOFF3
;
130 *shift
= 7 - (ldo
- MAX8998_LDO14
);
132 case MAX8998_BUCK1
... MAX8998_BUCK4
:
133 *reg
= MAX8998_REG_ONOFF1
;
134 *shift
= 7 - (ldo
- MAX8998_BUCK1
);
136 case MAX8998_EN32KHZ_AP
... MAX8998_ENVICHG
:
137 *reg
= MAX8998_REG_ONOFF4
;
138 *shift
= 7 - (ldo
- MAX8998_EN32KHZ_AP
);
140 case MAX8998_ESAFEOUT1
... MAX8998_ESAFEOUT2
:
141 *reg
= MAX8998_REG_CHGR2
;
142 *shift
= 7 - (ldo
- MAX8998_ESAFEOUT1
);
151 static int max8998_ldo_is_enabled(struct regulator_dev
*rdev
)
153 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
154 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
155 int ret
, reg
, shift
= 8;
158 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
162 ret
= max8998_read_reg(i2c
, reg
, &val
);
166 return val
& (1 << shift
);
169 static int max8998_ldo_enable(struct regulator_dev
*rdev
)
171 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
172 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
173 int reg
, shift
= 8, ret
;
175 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
179 return max8998_update_reg(i2c
, reg
, 1<<shift
, 1<<shift
);
182 static int max8998_ldo_disable(struct regulator_dev
*rdev
)
184 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
185 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
186 int reg
, shift
= 8, ret
;
188 ret
= max8998_get_enable_register(rdev
, ®
, &shift
);
192 return max8998_update_reg(i2c
, reg
, 0, 1<<shift
);
195 static int max8998_get_voltage_register(struct regulator_dev
*rdev
,
196 int *_reg
, int *_shift
, int *_mask
)
198 int ldo
= rdev_get_id(rdev
);
199 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
200 int reg
, shift
= 0, mask
= 0xff;
203 case MAX8998_LDO2
... MAX8998_LDO3
:
204 reg
= MAX8998_REG_LDO2_LDO3
;
206 if (ldo
== MAX8998_LDO2
)
211 case MAX8998_LDO4
... MAX8998_LDO7
:
212 reg
= MAX8998_REG_LDO4
+ (ldo
- MAX8998_LDO4
);
214 case MAX8998_LDO8
... MAX8998_LDO9
:
215 reg
= MAX8998_REG_LDO8_LDO9
;
217 if (ldo
== MAX8998_LDO8
)
222 case MAX8998_LDO10
... MAX8998_LDO11
:
223 reg
= MAX8998_REG_LDO10_LDO11
;
224 if (ldo
== MAX8998_LDO10
) {
232 case MAX8998_LDO12
... MAX8998_LDO17
:
233 reg
= MAX8998_REG_LDO12
+ (ldo
- MAX8998_LDO12
);
236 reg
= MAX8998_REG_BUCK1_VOLTAGE1
+ max8998
->buck1_idx
;
239 reg
= MAX8998_REG_BUCK2_VOLTAGE1
+ max8998
->buck2_idx
;
242 reg
= MAX8998_REG_BUCK3
;
245 reg
= MAX8998_REG_BUCK4
;
258 static int max8998_get_voltage_sel(struct regulator_dev
*rdev
)
260 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
261 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
262 int reg
, shift
= 0, mask
, ret
;
265 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
269 ret
= max8998_read_reg(i2c
, reg
, &val
);
279 static int max8998_set_voltage_ldo_sel(struct regulator_dev
*rdev
,
282 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
283 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
284 int reg
, shift
= 0, mask
, ret
;
286 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
290 ret
= max8998_update_reg(i2c
, reg
, selector
<<shift
, mask
<<shift
);
295 static inline void buck1_gpio_set(int gpio1
, int gpio2
, int v
)
297 gpio_set_value(gpio1
, v
& 0x1);
298 gpio_set_value(gpio2
, (v
>> 1) & 0x1);
301 static inline void buck2_gpio_set(int gpio
, int v
)
303 gpio_set_value(gpio
, v
& 0x1);
306 static int max8998_set_voltage_buck_sel(struct regulator_dev
*rdev
,
309 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
310 struct max8998_platform_data
*pdata
=
311 dev_get_platdata(max8998
->iodev
->dev
);
312 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
313 int buck
= rdev_get_id(rdev
);
314 int reg
, shift
= 0, mask
, ret
;
316 static u8 buck1_last_val
;
318 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
322 previous_sel
= max8998_get_voltage_sel(rdev
);
324 /* Check if voltage needs to be changed */
325 /* if previous_voltage equal new voltage, return */
326 if (previous_sel
== selector
) {
327 dev_dbg(max8998
->dev
, "No voltage change, old:%d, new:%d\n",
328 regulator_list_voltage_linear(rdev
, previous_sel
),
329 regulator_list_voltage_linear(rdev
, selector
));
335 dev_dbg(max8998
->dev
,
336 "BUCK1, selector:%d, buck1_vol1:%d, buck1_vol2:%d\n"
337 "buck1_vol3:%d, buck1_vol4:%d\n",
338 selector
, max8998
->buck1_vol
[0], max8998
->buck1_vol
[1],
339 max8998
->buck1_vol
[2], max8998
->buck1_vol
[3]);
341 if (gpio_is_valid(pdata
->buck1_set1
) &&
342 gpio_is_valid(pdata
->buck1_set2
)) {
344 /* check if requested voltage */
345 /* value is already defined */
346 for (j
= 0; j
< ARRAY_SIZE(max8998
->buck1_vol
); j
++) {
347 if (max8998
->buck1_vol
[j
] == selector
) {
348 max8998
->buck1_idx
= j
;
349 buck1_gpio_set(pdata
->buck1_set1
,
350 pdata
->buck1_set2
, j
);
355 if (pdata
->buck_voltage_lock
)
358 /* no predefine regulator found */
359 max8998
->buck1_idx
= (buck1_last_val
% 2) + 2;
360 dev_dbg(max8998
->dev
, "max8998->buck1_idx:%d\n",
362 max8998
->buck1_vol
[max8998
->buck1_idx
] = selector
;
363 ret
= max8998_get_voltage_register(rdev
, ®
,
366 ret
= max8998_write_reg(i2c
, reg
, selector
);
367 buck1_gpio_set(pdata
->buck1_set1
,
368 pdata
->buck1_set2
, max8998
->buck1_idx
);
371 dev_dbg(max8998
->dev
, "%s: SET1:%d, SET2:%d\n",
372 i2c
->name
, gpio_get_value(pdata
->buck1_set1
),
373 gpio_get_value(pdata
->buck1_set2
));
376 ret
= max8998_write_reg(i2c
, reg
, selector
);
381 dev_dbg(max8998
->dev
,
382 "BUCK2, selector:%d buck2_vol1:%d, buck2_vol2:%d\n",
383 selector
, max8998
->buck2_vol
[0], max8998
->buck2_vol
[1]);
384 if (gpio_is_valid(pdata
->buck2_set3
)) {
386 /* check if requested voltage */
387 /* value is already defined */
388 for (j
= 0; j
< ARRAY_SIZE(max8998
->buck2_vol
); j
++) {
389 if (max8998
->buck2_vol
[j
] == selector
) {
390 max8998
->buck2_idx
= j
;
391 buck2_gpio_set(pdata
->buck2_set3
, j
);
396 if (pdata
->buck_voltage_lock
)
399 max8998_get_voltage_register(rdev
,
400 ®
, &shift
, &mask
);
401 ret
= max8998_write_reg(i2c
, reg
, selector
);
402 max8998
->buck2_vol
[max8998
->buck2_idx
] = selector
;
403 buck2_gpio_set(pdata
->buck2_set3
, max8998
->buck2_idx
);
405 dev_dbg(max8998
->dev
, "%s: SET3:%d\n", i2c
->name
,
406 gpio_get_value(pdata
->buck2_set3
));
408 ret
= max8998_write_reg(i2c
, reg
, selector
);
414 ret
= max8998_update_reg(i2c
, reg
, selector
<<shift
,
422 static int max8998_set_voltage_buck_time_sel(struct regulator_dev
*rdev
,
423 unsigned int old_selector
,
424 unsigned int new_selector
)
426 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
427 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
428 const struct voltage_map_desc
*desc
;
429 int buck
= rdev_get_id(rdev
);
433 if (buck
< MAX8998_BUCK1
|| buck
> MAX8998_BUCK4
)
436 desc
= ldo_voltage_map
[buck
];
438 /* Voltage stabilization */
439 ret
= max8998_read_reg(i2c
, MAX8998_REG_ONOFF4
, &val
);
443 /* lp3974 hasn't got ENRAMP bit - ramp is assumed as true */
444 /* MAX8998 has ENRAMP bit implemented, so test it*/
445 if (max8998
->iodev
->type
== TYPE_MAX8998
&& !(val
& MAX8998_ENRAMP
))
448 difference
= (new_selector
- old_selector
) * desc
->step
/ 1000;
450 return DIV_ROUND_UP(difference
, (val
& 0x0f) + 1);
455 static struct regulator_ops max8998_ldo_ops
= {
456 .list_voltage
= regulator_list_voltage_linear
,
457 .map_voltage
= regulator_map_voltage_linear
,
458 .is_enabled
= max8998_ldo_is_enabled
,
459 .enable
= max8998_ldo_enable
,
460 .disable
= max8998_ldo_disable
,
461 .get_voltage_sel
= max8998_get_voltage_sel
,
462 .set_voltage_sel
= max8998_set_voltage_ldo_sel
,
465 static struct regulator_ops max8998_buck_ops
= {
466 .list_voltage
= regulator_list_voltage_linear
,
467 .map_voltage
= regulator_map_voltage_linear
,
468 .is_enabled
= max8998_ldo_is_enabled
,
469 .enable
= max8998_ldo_enable
,
470 .disable
= max8998_ldo_disable
,
471 .get_voltage_sel
= max8998_get_voltage_sel
,
472 .set_voltage_sel
= max8998_set_voltage_buck_sel
,
473 .set_voltage_time_sel
= max8998_set_voltage_buck_time_sel
,
476 static struct regulator_ops max8998_others_ops
= {
477 .is_enabled
= max8998_ldo_is_enabled
,
478 .enable
= max8998_ldo_enable
,
479 .disable
= max8998_ldo_disable
,
482 static struct regulator_desc regulators
[] = {
486 .ops
= &max8998_ldo_ops
,
487 .type
= REGULATOR_VOLTAGE
,
488 .owner
= THIS_MODULE
,
492 .ops
= &max8998_ldo_ops
,
493 .type
= REGULATOR_VOLTAGE
,
494 .owner
= THIS_MODULE
,
498 .ops
= &max8998_ldo_ops
,
499 .type
= REGULATOR_VOLTAGE
,
500 .owner
= THIS_MODULE
,
504 .ops
= &max8998_ldo_ops
,
505 .type
= REGULATOR_VOLTAGE
,
506 .owner
= THIS_MODULE
,
510 .ops
= &max8998_ldo_ops
,
511 .type
= REGULATOR_VOLTAGE
,
512 .owner
= THIS_MODULE
,
516 .ops
= &max8998_ldo_ops
,
517 .type
= REGULATOR_VOLTAGE
,
518 .owner
= THIS_MODULE
,
522 .ops
= &max8998_ldo_ops
,
523 .type
= REGULATOR_VOLTAGE
,
524 .owner
= THIS_MODULE
,
528 .ops
= &max8998_ldo_ops
,
529 .type
= REGULATOR_VOLTAGE
,
530 .owner
= THIS_MODULE
,
534 .ops
= &max8998_ldo_ops
,
535 .type
= REGULATOR_VOLTAGE
,
536 .owner
= THIS_MODULE
,
540 .ops
= &max8998_ldo_ops
,
541 .type
= REGULATOR_VOLTAGE
,
542 .owner
= THIS_MODULE
,
546 .ops
= &max8998_ldo_ops
,
547 .type
= REGULATOR_VOLTAGE
,
548 .owner
= THIS_MODULE
,
552 .ops
= &max8998_ldo_ops
,
553 .type
= REGULATOR_VOLTAGE
,
554 .owner
= THIS_MODULE
,
558 .ops
= &max8998_ldo_ops
,
559 .type
= REGULATOR_VOLTAGE
,
560 .owner
= THIS_MODULE
,
564 .ops
= &max8998_ldo_ops
,
565 .type
= REGULATOR_VOLTAGE
,
566 .owner
= THIS_MODULE
,
570 .ops
= &max8998_ldo_ops
,
571 .type
= REGULATOR_VOLTAGE
,
572 .owner
= THIS_MODULE
,
576 .ops
= &max8998_ldo_ops
,
577 .type
= REGULATOR_VOLTAGE
,
578 .owner
= THIS_MODULE
,
582 .ops
= &max8998_buck_ops
,
583 .type
= REGULATOR_VOLTAGE
,
584 .owner
= THIS_MODULE
,
588 .ops
= &max8998_buck_ops
,
589 .type
= REGULATOR_VOLTAGE
,
590 .owner
= THIS_MODULE
,
594 .ops
= &max8998_buck_ops
,
595 .type
= REGULATOR_VOLTAGE
,
596 .owner
= THIS_MODULE
,
600 .ops
= &max8998_buck_ops
,
601 .type
= REGULATOR_VOLTAGE
,
602 .owner
= THIS_MODULE
,
604 .name
= "EN32KHz AP",
605 .id
= MAX8998_EN32KHZ_AP
,
606 .ops
= &max8998_others_ops
,
607 .type
= REGULATOR_VOLTAGE
,
608 .owner
= THIS_MODULE
,
610 .name
= "EN32KHz CP",
611 .id
= MAX8998_EN32KHZ_CP
,
612 .ops
= &max8998_others_ops
,
613 .type
= REGULATOR_VOLTAGE
,
614 .owner
= THIS_MODULE
,
617 .id
= MAX8998_ENVICHG
,
618 .ops
= &max8998_others_ops
,
619 .type
= REGULATOR_VOLTAGE
,
620 .owner
= THIS_MODULE
,
623 .id
= MAX8998_ESAFEOUT1
,
624 .ops
= &max8998_others_ops
,
625 .type
= REGULATOR_VOLTAGE
,
626 .owner
= THIS_MODULE
,
629 .id
= MAX8998_ESAFEOUT2
,
630 .ops
= &max8998_others_ops
,
631 .type
= REGULATOR_VOLTAGE
,
632 .owner
= THIS_MODULE
,
636 static int max8998_pmic_probe(struct platform_device
*pdev
)
638 struct max8998_dev
*iodev
= dev_get_drvdata(pdev
->dev
.parent
);
639 struct max8998_platform_data
*pdata
= dev_get_platdata(iodev
->dev
);
640 struct regulator_config config
= { };
641 struct regulator_dev
**rdev
;
642 struct max8998_data
*max8998
;
643 struct i2c_client
*i2c
;
647 dev_err(pdev
->dev
.parent
, "No platform init data supplied\n");
651 max8998
= devm_kzalloc(&pdev
->dev
, sizeof(struct max8998_data
),
656 size
= sizeof(struct regulator_dev
*) * pdata
->num_regulators
;
657 max8998
->rdev
= devm_kzalloc(&pdev
->dev
, size
, GFP_KERNEL
);
661 rdev
= max8998
->rdev
;
662 max8998
->dev
= &pdev
->dev
;
663 max8998
->iodev
= iodev
;
664 max8998
->num_regulators
= pdata
->num_regulators
;
665 platform_set_drvdata(pdev
, max8998
);
666 i2c
= max8998
->iodev
->i2c
;
668 max8998
->buck1_idx
= pdata
->buck1_default_idx
;
669 max8998
->buck2_idx
= pdata
->buck2_default_idx
;
672 /* For unused GPIO NOT marked as -1 (thereof equal to 0) WARN_ON */
673 /* will be displayed */
675 /* Check if MAX8998 voltage selection GPIOs are defined */
676 if (gpio_is_valid(pdata
->buck1_set1
) &&
677 gpio_is_valid(pdata
->buck1_set2
)) {
678 /* Check if SET1 is not equal to 0 */
679 if (!pdata
->buck1_set1
) {
680 printk(KERN_ERR
"MAX8998 SET1 GPIO defined as 0 !\n");
681 WARN_ON(!pdata
->buck1_set1
);
685 /* Check if SET2 is not equal to 0 */
686 if (!pdata
->buck1_set2
) {
687 printk(KERN_ERR
"MAX8998 SET2 GPIO defined as 0 !\n");
688 WARN_ON(!pdata
->buck1_set2
);
693 gpio_request(pdata
->buck1_set1
, "MAX8998 BUCK1_SET1");
694 gpio_direction_output(pdata
->buck1_set1
,
695 max8998
->buck1_idx
& 0x1);
698 gpio_request(pdata
->buck1_set2
, "MAX8998 BUCK1_SET2");
699 gpio_direction_output(pdata
->buck1_set2
,
700 (max8998
->buck1_idx
>> 1) & 0x1);
701 /* Set predefined value for BUCK1 register 1 */
703 while (buck12_voltage_map_desc
.min
+
704 buck12_voltage_map_desc
.step
*i
705 < pdata
->buck1_voltage1
)
707 max8998
->buck1_vol
[0] = i
;
708 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE1
, i
);
712 /* Set predefined value for BUCK1 register 2 */
714 while (buck12_voltage_map_desc
.min
+
715 buck12_voltage_map_desc
.step
*i
716 < pdata
->buck1_voltage2
)
719 max8998
->buck1_vol
[1] = i
;
720 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE2
, i
);
724 /* Set predefined value for BUCK1 register 3 */
726 while (buck12_voltage_map_desc
.min
+
727 buck12_voltage_map_desc
.step
*i
728 < pdata
->buck1_voltage3
)
731 max8998
->buck1_vol
[2] = i
;
732 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE3
, i
);
736 /* Set predefined value for BUCK1 register 4 */
738 while (buck12_voltage_map_desc
.min
+
739 buck12_voltage_map_desc
.step
*i
740 < pdata
->buck1_voltage4
)
743 max8998
->buck1_vol
[3] = i
;
744 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE4
, i
);
750 if (gpio_is_valid(pdata
->buck2_set3
)) {
751 /* Check if SET3 is not equal to 0 */
752 if (!pdata
->buck2_set3
) {
753 printk(KERN_ERR
"MAX8998 SET3 GPIO defined as 0 !\n");
754 WARN_ON(!pdata
->buck2_set3
);
758 gpio_request(pdata
->buck2_set3
, "MAX8998 BUCK2_SET3");
759 gpio_direction_output(pdata
->buck2_set3
,
760 max8998
->buck2_idx
& 0x1);
762 /* BUCK2 register 1 */
764 while (buck12_voltage_map_desc
.min
+
765 buck12_voltage_map_desc
.step
*i
766 < pdata
->buck2_voltage1
)
768 max8998
->buck2_vol
[0] = i
;
769 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK2_VOLTAGE1
, i
);
773 /* BUCK2 register 2 */
775 while (buck12_voltage_map_desc
.min
+
776 buck12_voltage_map_desc
.step
*i
777 < pdata
->buck2_voltage2
)
779 max8998
->buck2_vol
[1] = i
;
780 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK2_VOLTAGE2
, i
);
785 for (i
= 0; i
< pdata
->num_regulators
; i
++) {
786 const struct voltage_map_desc
*desc
;
787 int id
= pdata
->regulators
[i
].id
;
788 int index
= id
- MAX8998_LDO2
;
790 desc
= ldo_voltage_map
[id
];
791 if (desc
&& regulators
[index
].ops
!= &max8998_others_ops
) {
792 int count
= (desc
->max
- desc
->min
) / desc
->step
+ 1;
794 regulators
[index
].n_voltages
= count
;
795 regulators
[index
].min_uV
= desc
->min
;
796 regulators
[index
].uV_step
= desc
->step
;
799 config
.dev
= max8998
->dev
;
800 config
.init_data
= pdata
->regulators
[i
].initdata
;
801 config
.driver_data
= max8998
;
803 rdev
[i
] = regulator_register(®ulators
[index
], &config
);
804 if (IS_ERR(rdev
[i
])) {
805 ret
= PTR_ERR(rdev
[i
]);
806 dev_err(max8998
->dev
, "regulator init failed\n");
816 regulator_unregister(rdev
[i
]);
821 static int max8998_pmic_remove(struct platform_device
*pdev
)
823 struct max8998_data
*max8998
= platform_get_drvdata(pdev
);
824 struct regulator_dev
**rdev
= max8998
->rdev
;
827 for (i
= 0; i
< max8998
->num_regulators
; i
++)
828 regulator_unregister(rdev
[i
]);
832 static const struct platform_device_id max8998_pmic_id
[] = {
833 { "max8998-pmic", TYPE_MAX8998
},
834 { "lp3974-pmic", TYPE_LP3974
},
837 MODULE_DEVICE_TABLE(platform
, max8998_pmic_id
);
839 static struct platform_driver max8998_pmic_driver
= {
841 .name
= "max8998-pmic",
842 .owner
= THIS_MODULE
,
844 .probe
= max8998_pmic_probe
,
845 .remove
= max8998_pmic_remove
,
846 .id_table
= max8998_pmic_id
,
849 static int __init
max8998_pmic_init(void)
851 return platform_driver_register(&max8998_pmic_driver
);
853 subsys_initcall(max8998_pmic_init
);
855 static void __exit
max8998_pmic_cleanup(void)
857 platform_driver_unregister(&max8998_pmic_driver
);
859 module_exit(max8998_pmic_cleanup
);
861 MODULE_DESCRIPTION("MAXIM 8998 voltage regulator driver");
862 MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>");
863 MODULE_LICENSE("GPL");