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
= 950000, .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
, j
;
315 static u8 buck1_last_val
;
317 ret
= max8998_get_voltage_register(rdev
, ®
, &shift
, &mask
);
323 dev_dbg(max8998
->dev
,
324 "BUCK1, selector:%d, buck1_vol1:%d, buck1_vol2:%d\n"
325 "buck1_vol3:%d, buck1_vol4:%d\n",
326 selector
, max8998
->buck1_vol
[0], max8998
->buck1_vol
[1],
327 max8998
->buck1_vol
[2], max8998
->buck1_vol
[3]);
329 if (gpio_is_valid(pdata
->buck1_set1
) &&
330 gpio_is_valid(pdata
->buck1_set2
)) {
332 /* check if requested voltage */
333 /* value is already defined */
334 for (j
= 0; j
< ARRAY_SIZE(max8998
->buck1_vol
); j
++) {
335 if (max8998
->buck1_vol
[j
] == selector
) {
336 max8998
->buck1_idx
= j
;
337 buck1_gpio_set(pdata
->buck1_set1
,
338 pdata
->buck1_set2
, j
);
343 if (pdata
->buck_voltage_lock
)
346 /* no predefine regulator found */
347 max8998
->buck1_idx
= (buck1_last_val
% 2) + 2;
348 dev_dbg(max8998
->dev
, "max8998->buck1_idx:%d\n",
350 max8998
->buck1_vol
[max8998
->buck1_idx
] = selector
;
351 ret
= max8998_get_voltage_register(rdev
, ®
,
354 ret
= max8998_write_reg(i2c
, reg
, selector
);
355 buck1_gpio_set(pdata
->buck1_set1
,
356 pdata
->buck1_set2
, max8998
->buck1_idx
);
359 dev_dbg(max8998
->dev
, "%s: SET1:%d, SET2:%d\n",
360 i2c
->name
, gpio_get_value(pdata
->buck1_set1
),
361 gpio_get_value(pdata
->buck1_set2
));
364 ret
= max8998_write_reg(i2c
, reg
, selector
);
369 dev_dbg(max8998
->dev
,
370 "BUCK2, selector:%d buck2_vol1:%d, buck2_vol2:%d\n",
371 selector
, max8998
->buck2_vol
[0], max8998
->buck2_vol
[1]);
372 if (gpio_is_valid(pdata
->buck2_set3
)) {
374 /* check if requested voltage */
375 /* value is already defined */
376 for (j
= 0; j
< ARRAY_SIZE(max8998
->buck2_vol
); j
++) {
377 if (max8998
->buck2_vol
[j
] == selector
) {
378 max8998
->buck2_idx
= j
;
379 buck2_gpio_set(pdata
->buck2_set3
, j
);
384 if (pdata
->buck_voltage_lock
)
387 max8998_get_voltage_register(rdev
,
388 ®
, &shift
, &mask
);
389 ret
= max8998_write_reg(i2c
, reg
, selector
);
390 max8998
->buck2_vol
[max8998
->buck2_idx
] = selector
;
391 buck2_gpio_set(pdata
->buck2_set3
, max8998
->buck2_idx
);
393 dev_dbg(max8998
->dev
, "%s: SET3:%d\n", i2c
->name
,
394 gpio_get_value(pdata
->buck2_set3
));
396 ret
= max8998_write_reg(i2c
, reg
, selector
);
402 ret
= max8998_update_reg(i2c
, reg
, selector
<<shift
,
410 static int max8998_set_voltage_buck_time_sel(struct regulator_dev
*rdev
,
411 unsigned int old_selector
,
412 unsigned int new_selector
)
414 struct max8998_data
*max8998
= rdev_get_drvdata(rdev
);
415 struct i2c_client
*i2c
= max8998
->iodev
->i2c
;
416 const struct voltage_map_desc
*desc
;
417 int buck
= rdev_get_id(rdev
);
421 if (buck
< MAX8998_BUCK1
|| buck
> MAX8998_BUCK4
)
424 desc
= ldo_voltage_map
[buck
];
426 /* Voltage stabilization */
427 ret
= max8998_read_reg(i2c
, MAX8998_REG_ONOFF4
, &val
);
431 /* lp3974 hasn't got ENRAMP bit - ramp is assumed as true */
432 /* MAX8998 has ENRAMP bit implemented, so test it*/
433 if (max8998
->iodev
->type
== TYPE_MAX8998
&& !(val
& MAX8998_ENRAMP
))
436 difference
= (new_selector
- old_selector
) * desc
->step
/ 1000;
438 return DIV_ROUND_UP(difference
, (val
& 0x0f) + 1);
443 static struct regulator_ops max8998_ldo_ops
= {
444 .list_voltage
= regulator_list_voltage_linear
,
445 .map_voltage
= regulator_map_voltage_linear
,
446 .is_enabled
= max8998_ldo_is_enabled
,
447 .enable
= max8998_ldo_enable
,
448 .disable
= max8998_ldo_disable
,
449 .get_voltage_sel
= max8998_get_voltage_sel
,
450 .set_voltage_sel
= max8998_set_voltage_ldo_sel
,
453 static struct regulator_ops max8998_buck_ops
= {
454 .list_voltage
= regulator_list_voltage_linear
,
455 .map_voltage
= regulator_map_voltage_linear
,
456 .is_enabled
= max8998_ldo_is_enabled
,
457 .enable
= max8998_ldo_enable
,
458 .disable
= max8998_ldo_disable
,
459 .get_voltage_sel
= max8998_get_voltage_sel
,
460 .set_voltage_sel
= max8998_set_voltage_buck_sel
,
461 .set_voltage_time_sel
= max8998_set_voltage_buck_time_sel
,
464 static struct regulator_ops max8998_others_ops
= {
465 .is_enabled
= max8998_ldo_is_enabled
,
466 .enable
= max8998_ldo_enable
,
467 .disable
= max8998_ldo_disable
,
470 static struct regulator_desc regulators
[] = {
474 .ops
= &max8998_ldo_ops
,
475 .type
= REGULATOR_VOLTAGE
,
476 .owner
= THIS_MODULE
,
480 .ops
= &max8998_ldo_ops
,
481 .type
= REGULATOR_VOLTAGE
,
482 .owner
= THIS_MODULE
,
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_buck_ops
,
571 .type
= REGULATOR_VOLTAGE
,
572 .owner
= THIS_MODULE
,
576 .ops
= &max8998_buck_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
,
592 .name
= "EN32KHz AP",
593 .id
= MAX8998_EN32KHZ_AP
,
594 .ops
= &max8998_others_ops
,
595 .type
= REGULATOR_VOLTAGE
,
596 .owner
= THIS_MODULE
,
598 .name
= "EN32KHz CP",
599 .id
= MAX8998_EN32KHZ_CP
,
600 .ops
= &max8998_others_ops
,
601 .type
= REGULATOR_VOLTAGE
,
602 .owner
= THIS_MODULE
,
605 .id
= MAX8998_ENVICHG
,
606 .ops
= &max8998_others_ops
,
607 .type
= REGULATOR_VOLTAGE
,
608 .owner
= THIS_MODULE
,
611 .id
= MAX8998_ESAFEOUT1
,
612 .ops
= &max8998_others_ops
,
613 .type
= REGULATOR_VOLTAGE
,
614 .owner
= THIS_MODULE
,
617 .id
= MAX8998_ESAFEOUT2
,
618 .ops
= &max8998_others_ops
,
619 .type
= REGULATOR_VOLTAGE
,
620 .owner
= THIS_MODULE
,
624 static int max8998_pmic_probe(struct platform_device
*pdev
)
626 struct max8998_dev
*iodev
= dev_get_drvdata(pdev
->dev
.parent
);
627 struct max8998_platform_data
*pdata
= dev_get_platdata(iodev
->dev
);
628 struct regulator_config config
= { };
629 struct regulator_dev
**rdev
;
630 struct max8998_data
*max8998
;
631 struct i2c_client
*i2c
;
635 dev_err(pdev
->dev
.parent
, "No platform init data supplied\n");
639 max8998
= devm_kzalloc(&pdev
->dev
, sizeof(struct max8998_data
),
644 size
= sizeof(struct regulator_dev
*) * pdata
->num_regulators
;
645 max8998
->rdev
= devm_kzalloc(&pdev
->dev
, size
, GFP_KERNEL
);
649 rdev
= max8998
->rdev
;
650 max8998
->dev
= &pdev
->dev
;
651 max8998
->iodev
= iodev
;
652 max8998
->num_regulators
= pdata
->num_regulators
;
653 platform_set_drvdata(pdev
, max8998
);
654 i2c
= max8998
->iodev
->i2c
;
656 max8998
->buck1_idx
= pdata
->buck1_default_idx
;
657 max8998
->buck2_idx
= pdata
->buck2_default_idx
;
660 /* For unused GPIO NOT marked as -1 (thereof equal to 0) WARN_ON */
661 /* will be displayed */
663 /* Check if MAX8998 voltage selection GPIOs are defined */
664 if (gpio_is_valid(pdata
->buck1_set1
) &&
665 gpio_is_valid(pdata
->buck1_set2
)) {
666 /* Check if SET1 is not equal to 0 */
667 if (!pdata
->buck1_set1
) {
669 "MAX8998 SET1 GPIO defined as 0 !\n");
670 WARN_ON(!pdata
->buck1_set1
);
674 /* Check if SET2 is not equal to 0 */
675 if (!pdata
->buck1_set2
) {
677 "MAX8998 SET2 GPIO defined as 0 !\n");
678 WARN_ON(!pdata
->buck1_set2
);
683 gpio_request(pdata
->buck1_set1
, "MAX8998 BUCK1_SET1");
684 gpio_direction_output(pdata
->buck1_set1
,
685 max8998
->buck1_idx
& 0x1);
688 gpio_request(pdata
->buck1_set2
, "MAX8998 BUCK1_SET2");
689 gpio_direction_output(pdata
->buck1_set2
,
690 (max8998
->buck1_idx
>> 1) & 0x1);
691 /* Set predefined value for BUCK1 register 1 */
693 while (buck12_voltage_map_desc
.min
+
694 buck12_voltage_map_desc
.step
*i
695 < pdata
->buck1_voltage1
)
697 max8998
->buck1_vol
[0] = i
;
698 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE1
, i
);
702 /* Set predefined value for BUCK1 register 2 */
704 while (buck12_voltage_map_desc
.min
+
705 buck12_voltage_map_desc
.step
*i
706 < pdata
->buck1_voltage2
)
709 max8998
->buck1_vol
[1] = i
;
710 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE2
, i
);
714 /* Set predefined value for BUCK1 register 3 */
716 while (buck12_voltage_map_desc
.min
+
717 buck12_voltage_map_desc
.step
*i
718 < pdata
->buck1_voltage3
)
721 max8998
->buck1_vol
[2] = i
;
722 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE3
, i
);
726 /* Set predefined value for BUCK1 register 4 */
728 while (buck12_voltage_map_desc
.min
+
729 buck12_voltage_map_desc
.step
*i
730 < pdata
->buck1_voltage4
)
733 max8998
->buck1_vol
[3] = i
;
734 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK1_VOLTAGE4
, i
);
740 if (gpio_is_valid(pdata
->buck2_set3
)) {
741 /* Check if SET3 is not equal to 0 */
742 if (!pdata
->buck2_set3
) {
744 "MAX8998 SET3 GPIO defined as 0 !\n");
745 WARN_ON(!pdata
->buck2_set3
);
749 gpio_request(pdata
->buck2_set3
, "MAX8998 BUCK2_SET3");
750 gpio_direction_output(pdata
->buck2_set3
,
751 max8998
->buck2_idx
& 0x1);
753 /* BUCK2 register 1 */
755 while (buck12_voltage_map_desc
.min
+
756 buck12_voltage_map_desc
.step
*i
757 < pdata
->buck2_voltage1
)
759 max8998
->buck2_vol
[0] = i
;
760 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK2_VOLTAGE1
, i
);
764 /* BUCK2 register 2 */
766 while (buck12_voltage_map_desc
.min
+
767 buck12_voltage_map_desc
.step
*i
768 < pdata
->buck2_voltage2
)
770 max8998
->buck2_vol
[1] = i
;
771 ret
= max8998_write_reg(i2c
, MAX8998_REG_BUCK2_VOLTAGE2
, i
);
776 for (i
= 0; i
< pdata
->num_regulators
; i
++) {
777 const struct voltage_map_desc
*desc
;
778 int id
= pdata
->regulators
[i
].id
;
779 int index
= id
- MAX8998_LDO2
;
781 desc
= ldo_voltage_map
[id
];
782 if (desc
&& regulators
[index
].ops
!= &max8998_others_ops
) {
783 int count
= (desc
->max
- desc
->min
) / desc
->step
+ 1;
785 regulators
[index
].n_voltages
= count
;
786 regulators
[index
].min_uV
= desc
->min
;
787 regulators
[index
].uV_step
= desc
->step
;
790 config
.dev
= max8998
->dev
;
791 config
.init_data
= pdata
->regulators
[i
].initdata
;
792 config
.driver_data
= max8998
;
794 rdev
[i
] = regulator_register(®ulators
[index
], &config
);
795 if (IS_ERR(rdev
[i
])) {
796 ret
= PTR_ERR(rdev
[i
]);
797 dev_err(max8998
->dev
, "regulator init failed\n");
807 regulator_unregister(rdev
[i
]);
812 static int max8998_pmic_remove(struct platform_device
*pdev
)
814 struct max8998_data
*max8998
= platform_get_drvdata(pdev
);
815 struct regulator_dev
**rdev
= max8998
->rdev
;
818 for (i
= 0; i
< max8998
->num_regulators
; i
++)
819 regulator_unregister(rdev
[i
]);
823 static const struct platform_device_id max8998_pmic_id
[] = {
824 { "max8998-pmic", TYPE_MAX8998
},
825 { "lp3974-pmic", TYPE_LP3974
},
828 MODULE_DEVICE_TABLE(platform
, max8998_pmic_id
);
830 static struct platform_driver max8998_pmic_driver
= {
832 .name
= "max8998-pmic",
833 .owner
= THIS_MODULE
,
835 .probe
= max8998_pmic_probe
,
836 .remove
= max8998_pmic_remove
,
837 .id_table
= max8998_pmic_id
,
840 static int __init
max8998_pmic_init(void)
842 return platform_driver_register(&max8998_pmic_driver
);
844 subsys_initcall(max8998_pmic_init
);
846 static void __exit
max8998_pmic_cleanup(void)
848 platform_driver_unregister(&max8998_pmic_driver
);
850 module_exit(max8998_pmic_cleanup
);
852 MODULE_DESCRIPTION("MAXIM 8998 voltage regulator driver");
853 MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>");
854 MODULE_LICENSE("GPL");