1 /* drivers/regulator/rk2818_lp8725.c
3 * Copyright (C) 2010 ROCKCHIP, Inc.
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
15 /*******************************************************************/
16 /* COPYRIGHT (C) ROCK-CHIPS FUZHOU . ALL RIGHTS RESERVED. */
17 /*******************************************************************
18 FILE : rk2818_lp8725.c
19 DESC : LP8725 PMIC driver
25 ********************************************************************/
28 #include <linux/bug.h>
29 #include <linux/err.h>
30 #include <linux/i2c.h>
31 #include <linux/kernel.h>
32 #include <linux/regulator/driver.h>
33 #include <linux/regulator/rk2818_lp8725.h>
37 #define DBG(x...) printk(KERN_INFO x)
42 #define DBG_INFO(x...) printk(KERN_INFO x)
44 #define DBG_INFO(x...)
53 struct i2c_client *i2c;
55 struct regulator_dev **rdev;
58 static u8 lp8725_reg_read(struct lp8725 *lp8725, u8 reg);
59 static int lp8725_set_bits(struct lp8725 *lp8725, u8 reg, u16 mask, u16 val);
63 #define LP8725_BUCK_VOL_ENABLE_REG 0x00
64 #define LP8725_BUCK1_BASE 0x08
65 #define LP8725_BUCK2_BASE 0x0A
67 const static int buck_base_addr[] = {
74 #define LP8725_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x])
75 #define LP8725_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1)
77 const static int buck_voltage_map[] = {
78 800, 850, 900, 950, 1000, 1050, 1100, 1150,
79 1200, 1250, 1300, 1350, 1400, 1500, 1600, 1700,
80 1750, 1800, 1850, 1900, 2000, 2100, 2200, 2300,
81 2400, 2500, 2600, 2700, 2800, 2850, 2900, 3000,
84 #define BUCK_TARGET_VOL_MASK 0x1f
85 #define BUCK_TARGET_VOL_MIN_IDX 0x00
86 #define BUCK_TARGET_VOL_MAX_IDX 0x1f
90 #define LP8725_LDO_ENABLE_REG 0x0d
91 #define LP8725_LDO_VOL_CONTR_BASE 0x01
93 #define LP8725_LDO_VOL_CONTR_REG(x) (LP8725_LDO_VOL_CONTR_BASE + x)
95 const static int ldo_voltage_map[] = {
96 1200, 1250, 1300, 1350, 1400, 1450, 1500, 1550,
97 1600, 1650, 1700, 1750, 1800, 1850, 1900, 2000,
98 2100, 2200, 2300, 2400, 2500, 2600, 2650, 2700,
99 2750, 2800, 2850, 2900, 2950, 3000, 3100, 3300,
102 #define LDO_VOL_CONTR_MASK 0x1f
103 #define LDO_VOL_MIN_IDX 0x00
104 #define LDO_VOL_MAX_IDX 0x1f
106 #define LP8725_LILO_ENABLE_REG 0x0d
107 #define LP8725_LILO_VOL_CONTR_BASE 0x06
109 #define LP8725_LILO_VOL_CONTR_REG(x) (LP8725_LILO_VOL_CONTR_BASE + x)
111 const static int lilo_voltage_map[] = {
112 800, 850, 900, 950, 1000, 1050, 1100, 1150,
113 1200, 1250, 1300, 1350, 1400, 1500, 1600, 1700,
114 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500,
115 2600, 2700, 2800, 2850, 2900, 3000, 3100, 3300,
118 #define LILO_VOL_CONTR_MASK 0x1f
119 #define LILO_VOL_MIN_IDX 0x00
120 #define LILO_VOL_MAX_IDX 0x1f
123 static int lp8725_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
125 return 1000 * ldo_voltage_map[index];
128 static int lp8725_ldo_is_enabled(struct regulator_dev *dev)
130 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
131 int ldo = rdev_get_id(dev) - LP8725_LDO1;
132 u16 mask = 1 << (ldo);
135 val = lp8725_reg_read(lp8725, LP8725_LDO_ENABLE_REG);
136 return (val & mask) != 0;
139 static int lp8725_ldo_enable(struct regulator_dev *dev)
141 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
142 int ldo = rdev_get_id(dev) - LP8725_LDO1;
143 u16 mask = 1 << (ldo);
144 return lp8725_set_bits(lp8725, LP8725_LDO_ENABLE_REG, mask, mask);
147 static int lp8725_ldo_disable(struct regulator_dev *dev)
149 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
150 int ldo = rdev_get_id(dev) - LP8725_LDO1;
151 u16 mask = 1 << (ldo);
152 return lp8725_set_bits(lp8725, LP8725_LDO_ENABLE_REG, mask, 0);
155 static int lp8725_ldo_get_voltage(struct regulator_dev *dev)
157 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
158 int ldo = rdev_get_id(dev) - LP8725_LDO1;
162 reg = lp8725_reg_read(lp8725, LP8725_LDO_VOL_CONTR_REG(ldo));
163 reg &= BUCK_TARGET_VOL_MASK;
165 val = 1000 * ldo_voltage_map[reg];
169 static int lp8725_ldo_set_voltage(struct regulator_dev *dev,
170 int min_uV, int max_uV)
172 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
173 int ldo = rdev_get_id(dev) - LP8725_LDO1;
174 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
175 const int *vol_map = ldo_voltage_map;
178 if (min_vol < vol_map[LDO_VOL_MIN_IDX] ||
179 min_vol > vol_map[LDO_VOL_MAX_IDX])
182 for (val = LDO_VOL_MIN_IDX; val <= LDO_VOL_MAX_IDX; val++)
183 if (vol_map[val] >= min_vol)
186 if (vol_map[val] > max_vol)
189 DBG("***run in %s %d reg=0x%x val=0x%x",__FUNCTION__,__LINE__,LP8725_LDO_VOL_CONTR_REG(ldo),val);
191 return lp8725_set_bits(lp8725, LP8725_LDO_VOL_CONTR_REG(ldo),
192 LDO_VOL_CONTR_MASK, val);
195 static struct regulator_ops lp8725_ldo_ops = {
196 .list_voltage = lp8725_ldo_list_voltage,
197 .is_enabled = lp8725_ldo_is_enabled,
198 .enable = lp8725_ldo_enable,
199 .disable = lp8725_ldo_disable,
200 .get_voltage = lp8725_ldo_get_voltage,
201 .set_voltage = lp8725_ldo_set_voltage,
204 static int lp8725_lilo_list_voltage(struct regulator_dev *dev, unsigned index)
206 return 1000 * lilo_voltage_map[index];
209 static int lp8725_lilo_is_enabled(struct regulator_dev *dev)
211 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
212 int lilo = rdev_get_id(dev) - LP8725_LILO1;
213 u16 mask = 1 << (lilo+4);
216 val = lp8725_reg_read(lp8725, LP8725_LILO_ENABLE_REG);
217 return (val & mask) != 0;
220 static int lp8725_lilo_enable(struct regulator_dev *dev)
222 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
223 int lilo = rdev_get_id(dev) - LP8725_LILO1;
224 u16 mask = 1 << (lilo+4);
226 return lp8725_set_bits(lp8725, LP8725_LILO_ENABLE_REG, mask, mask);
229 static int lp8725_lilo_disable(struct regulator_dev *dev)
231 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
232 int lilo = rdev_get_id(dev) - LP8725_LILO1;
233 u16 mask = 1 << (lilo+4);
235 return lp8725_set_bits(lp8725, LP8725_LILO_ENABLE_REG, mask, 0);
238 static int lp8725_lilo_get_voltage(struct regulator_dev *dev)
240 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
241 int lilo = rdev_get_id(dev) - LP8725_LILO1;
245 reg = lp8725_reg_read(lp8725, LP8725_LILO_VOL_CONTR_REG(lilo));
246 reg &= BUCK_TARGET_VOL_MASK;
248 val = 1000 * lilo_voltage_map[reg];
252 static int lp8725_lilo_set_voltage(struct regulator_dev *dev,
253 int min_uV, int max_uV)
255 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
256 int lilo = rdev_get_id(dev) - LP8725_LILO1;
257 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
258 const int *vol_map = lilo_voltage_map;
261 if (min_vol < vol_map[LILO_VOL_MIN_IDX] ||
262 min_vol > vol_map[LILO_VOL_MAX_IDX])
265 for (val = LILO_VOL_MIN_IDX; val <= LILO_VOL_MAX_IDX; val++)
266 if (vol_map[val] >= min_vol)
269 if (vol_map[val] > max_vol)
272 return lp8725_set_bits(lp8725, LP8725_LILO_VOL_CONTR_REG(lilo),
273 LILO_VOL_CONTR_MASK, val);
276 static struct regulator_ops lp8725_lilo_ops = {
277 .list_voltage = lp8725_lilo_list_voltage,
278 .is_enabled = lp8725_lilo_is_enabled,
279 .enable = lp8725_lilo_enable,
280 .disable = lp8725_lilo_disable,
281 .get_voltage = lp8725_lilo_get_voltage,
282 .set_voltage = lp8725_lilo_set_voltage,
285 static int lp8725_dcdc_list_voltage(struct regulator_dev *dev, unsigned index)
287 return 1000 * buck_voltage_map[index];
290 static int lp8725_dcdc_is_enabled(struct regulator_dev *dev)
292 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
293 int buck = rdev_get_id(dev);
302 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
303 return ((val & mask) && (val & mask2)) != 0;
307 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
308 return ((val & mask) && (val & mask2)) != 0;
309 case LP8725_DCDC1_V2:
312 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
313 return ((val & mask) && (!(val & mask2))) !=0;
314 case LP8725_DCDC2_V2:
317 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
318 return ((val & mask) && (!(val & mask2))) !=0;
322 static int lp8725_dcdc_enable(struct regulator_dev *dev)
324 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
325 int buck = rdev_get_id(dev);
332 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
334 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
336 case LP8725_DCDC1_V2:
338 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
340 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
344 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
346 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
348 case LP8725_DCDC2_V2:
350 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
352 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
359 static int lp8725_dcdc_disable(struct regulator_dev *dev)
361 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
362 int buck = rdev_get_id(dev) ;
368 case LP8725_DCDC1_V2:
370 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
372 case LP8725_DCDC2_V2:
374 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask,0);
378 static int lp8725_dcdc_get_voltage(struct regulator_dev *dev)
380 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
381 int buck = rdev_get_id(dev) ;
389 buck -= LP8725_DCDC1;
390 reg = lp8725_reg_read(lp8725, LP8725_BUCK_TARGET_VOL1_REG(buck));
392 case LP8725_DCDC1_V2:
393 case LP8725_DCDC2_V2:
394 buck -= LP8725_DCDC1_V2;
395 reg = lp8725_reg_read(lp8725, LP8725_BUCK_TARGET_VOL2_REG(buck));
399 reg &= BUCK_TARGET_VOL_MASK;
400 val = 1000 * buck_voltage_map[reg];
405 static int lp8725_dcdc_set_voltage(struct regulator_dev *dev,
406 int min_uV, int max_uV)
408 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
409 int buck = rdev_get_id(dev);
410 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
411 const int *vol_map = buck_voltage_map;
415 if (min_vol < vol_map[BUCK_TARGET_VOL_MIN_IDX] ||
416 min_vol > vol_map[BUCK_TARGET_VOL_MAX_IDX])
419 for (val = BUCK_TARGET_VOL_MIN_IDX; val <= BUCK_TARGET_VOL_MAX_IDX;
421 if (vol_map[val] >= min_vol)
424 if (vol_map[val] > max_vol)
431 buck -= LP8725_DCDC1;
432 ret = lp8725_set_bits(lp8725, LP8725_BUCK_TARGET_VOL1_REG(buck),
433 BUCK_TARGET_VOL_MASK, val);
437 case LP8725_DCDC1_V2:
438 case LP8725_DCDC2_V2:
439 buck -= LP8725_DCDC1_V2;
440 ret = lp8725_set_bits(lp8725, LP8725_BUCK_TARGET_VOL2_REG(buck),
441 BUCK_TARGET_VOL_MASK, val);
450 static int lp8725_dcdc_get_mode(struct regulator_dev *dev)
452 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
455 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
456 if ((val & mask) == 0)
457 return REGULATOR_MODE_NORMAL;
459 return REGULATOR_MODE_IDLE;
462 static int lp8725_dcdc_set_mode(struct regulator_dev *dev, unsigned int mode)
464 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
468 case REGULATOR_MODE_NORMAL:
469 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
470 case REGULATOR_MODE_IDLE:
471 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
473 printk("error:pmu_lp8725 only normal and idle mode\n");
478 static struct regulator_ops lp8725_dcdc_ops = {
479 .list_voltage = lp8725_dcdc_list_voltage,
480 .is_enabled = lp8725_dcdc_is_enabled,
481 .enable = lp8725_dcdc_enable,
482 .disable = lp8725_dcdc_disable,
483 .get_voltage = lp8725_dcdc_get_voltage,
484 .set_voltage = lp8725_dcdc_set_voltage,
485 .get_mode = lp8725_dcdc_get_mode,
486 .set_mode = lp8725_dcdc_set_mode,
489 static struct regulator_desc regulators[] = {
493 .ops = &lp8725_ldo_ops,
494 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
495 .type = REGULATOR_VOLTAGE,
496 .owner = THIS_MODULE,
501 .ops = &lp8725_ldo_ops,
502 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
503 .type = REGULATOR_VOLTAGE,
504 .owner = THIS_MODULE,
509 .ops = &lp8725_ldo_ops,
510 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
511 .type = REGULATOR_VOLTAGE,
512 .owner = THIS_MODULE,
517 .ops = &lp8725_ldo_ops,
518 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
519 .type = REGULATOR_VOLTAGE,
520 .owner = THIS_MODULE,
525 .ops = &lp8725_ldo_ops,
526 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
527 .type = REGULATOR_VOLTAGE,
528 .owner = THIS_MODULE,
533 .ops = &lp8725_lilo_ops,
534 .n_voltages = ARRAY_SIZE(lilo_voltage_map),
535 .type = REGULATOR_VOLTAGE,
536 .owner = THIS_MODULE,
541 .ops = &lp8725_lilo_ops,
542 .n_voltages = ARRAY_SIZE(lilo_voltage_map),
543 .type = REGULATOR_VOLTAGE,
544 .owner = THIS_MODULE,
549 .ops = &lp8725_dcdc_ops,
550 .n_voltages = ARRAY_SIZE(buck_voltage_map),
551 .type = REGULATOR_VOLTAGE,
552 .owner = THIS_MODULE,
557 .ops = &lp8725_dcdc_ops,
558 .n_voltages = ARRAY_SIZE(buck_voltage_map),
559 .type = REGULATOR_VOLTAGE,
560 .owner = THIS_MODULE,
564 .id = LP8725_DCDC1_V2,
565 .ops = &lp8725_dcdc_ops,
566 .n_voltages = ARRAY_SIZE(buck_voltage_map),
567 .type = REGULATOR_VOLTAGE,
568 .owner = THIS_MODULE,
572 .id = LP8725_DCDC2_V2,
573 .ops = &lp8725_dcdc_ops,
574 .n_voltages = ARRAY_SIZE(buck_voltage_map),
575 .type = REGULATOR_VOLTAGE,
576 .owner = THIS_MODULE,
580 static int lp8725_i2c_read(struct i2c_client *i2c, char reg, int count, u16 *dest)
583 struct i2c_adapter *adap;
584 struct i2c_msg msgs[2];
594 msgs[0].addr = i2c->addr;
596 msgs[0].flags = i2c->flags;
598 msgs[0].scl_rate = 200*1000;
601 msgs[1].addr = i2c->addr;
602 msgs[1].flags = i2c->flags | I2C_M_RD;
604 msgs[1].scl_rate = 200*1000;
605 ret = i2c_transfer(adap, msgs, 2);
607 DBG("***run in %s %d msgs[1].buf = %d\n",__FUNCTION__,__LINE__,*(msgs[1].buf));
612 static int lp8725_i2c_write(struct i2c_client *i2c, char reg, int count, const u16 src)
616 struct i2c_adapter *adap;
629 msg.addr = i2c->addr;
630 msg.buf = &tx_buf[0];
632 msg.flags = i2c->flags;
633 msg.scl_rate = 200*1000;
635 ret = i2c_transfer(adap, &msg, 1);
639 static u8 lp8725_reg_read(struct lp8725 *lp8725, u8 reg)
643 mutex_lock(&lp8725->io_lock);
645 lp8725_i2c_read(lp8725->i2c, reg, 1, &val);
647 DBG("reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
649 mutex_unlock(&lp8725->io_lock);
654 static int lp8725_set_bits(struct lp8725 *lp8725, u8 reg, u16 mask, u16 val)
659 mutex_lock(&lp8725->io_lock);
661 ret = lp8725_i2c_read(lp8725->i2c, reg, 1, &tmp);
662 tmp = (tmp & ~mask) | val;
664 ret = lp8725_i2c_write(lp8725->i2c, reg, 1, tmp);
665 DBG("reg write 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
667 mutex_unlock(&lp8725->io_lock);
673 static int lp8725_set_init(void)
676 struct regulator *ldo1,*ldo2,*ldo3,*ldo4,*ldo5;
677 struct regulator *lilo1,*lilo2;
678 struct regulator *buck1,*buck2;
680 DBG_INFO("***run in %s %d ",__FUNCTION__,__LINE__);
683 DBG_INFO("***ldo1 vcc init\n");
684 ldo1 = regulator_get(NULL, "ldo1");
685 regulator_enable(ldo1);
686 // regulator_set_voltage(ldo1,2500000,2500000);
687 tmp = regulator_get_voltage(ldo1);
688 DBG_INFO("***regulator_set_init: ldo1 vcc =%d\n",tmp);
691 DBG_INFO("***ldo2 vcc init\n");
692 ldo2 = regulator_get(NULL, "ldo2");
693 regulator_enable(ldo2);
694 // regulator_set_voltage(ldo2,3000000,3000000);
695 tmp = regulator_get_voltage(ldo2);
696 DBG_INFO("***regulator_set_init: ldo2 vcc =%d\n",tmp);
699 DBG_INFO("***ldo3 vcc init\n");
700 ldo3 = regulator_get(NULL, "ldo3");
701 regulator_enable(ldo3);
702 // regulator_set_voltage(ldo3,3000000,3000000);
703 tmp = regulator_get_voltage(ldo3);
704 DBG_INFO("***regulator_set_init: ldo3 vcc =%d\n",tmp);
707 DBG_INFO("***ldo4 vcc init\n");
708 ldo4 = regulator_get(NULL, "ldo4");
709 regulator_enable(ldo4);
710 // regulator_set_voltage(ldo4,1900000,1900000);
711 tmp = regulator_get_voltage(ldo4);
712 DBG_INFO("***regulator_set_init: ldo4 vcc =%d\n",tmp);
715 DBG_INFO("***ldo5 vcc init\n");
716 ldo5 = regulator_get(NULL, "ldo5");
717 regulator_enable(ldo5);
718 regulator_set_voltage(ldo5,1800000,1800000);
719 tmp = regulator_get_voltage(ldo5);
720 DBG_INFO("***regulator_set_init: ldo5 vcc =%d\n",tmp);
723 DBG_INFO("***lilo1 vcc init\n");
724 lilo1 = regulator_get(NULL, "lilo1");
725 regulator_enable(lilo1);
726 // regulator_set_voltage(lilo1,3300000,3300000);
727 tmp = regulator_get_voltage(lilo1);
728 DBG_INFO("***regulator_set_init: lilo1 vcc =%d\n",tmp);
731 DBG_INFO("***lilo2 vcc init\n");
732 lilo2 = regulator_get(NULL, "lilo2");
733 regulator_enable(lilo2);
734 // regulator_set_voltage(lilo2,3300000,3300000);
735 tmp = regulator_get_voltage(lilo2);
736 DBG_INFO("***regulator_set_init: lilo2 vcc =%d\n",tmp);
739 DBG_INFO("***buck1 vcc init\n");
740 buck1 = regulator_get(NULL, "vdd12");
741 // regulator_set_voltage(buck1,1200000,1200000);
742 tmp = regulator_get_voltage(buck1);
743 DBG_INFO("***regulator_set_init: buck1 vcc =%d\n",tmp);
746 DBG_INFO("***buck2 vcc init\n");
747 buck2 = regulator_get(NULL, "vccdr");
748 // regulator_set_voltage(buck1,1800000,1800000);
749 tmp = regulator_get_voltage(buck2);
750 DBG_INFO("***regulator_set_init: buck2 vcc =%d\n",tmp);
756 static int setup_regulators(struct lp8725 *lp8725, struct lp8725_platform_data *pdata)
759 int num_regulators = pdata->num_regulators;
760 lp8725->num_regulators = num_regulators;
761 lp8725->rdev = kzalloc(sizeof(struct regulator_dev *) * num_regulators,
764 /* Instantiate the regulators */
765 for (i = 0; i < num_regulators; i++) {
766 int id = pdata->regulators[i].id;
767 lp8725->rdev[i] = regulator_register(®ulators[id],
768 lp8725->dev, pdata->regulators[i].initdata, lp8725);
770 err = IS_ERR(lp8725->rdev[i]);
772 dev_err(lp8725->dev, "regulator init failed: %d\n",
780 for (i = 0; i < num_regulators; i++)
782 regulator_unregister(lp8725->rdev[i]);
788 static int __devinit lp8725_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
790 struct lp8725 *lp8725;
791 struct lp8725_platform_data *pdata = i2c->dev.platform_data;
794 lp8725 = kzalloc(sizeof(struct lp8725), GFP_KERNEL);
795 if (lp8725 == NULL) {
801 lp8725->dev = &i2c->dev;
802 i2c_set_clientdata(i2c, lp8725);
804 mutex_init(&lp8725->io_lock);
807 ret = setup_regulators(lp8725, pdata);
811 dev_warn(lp8725->dev, "No platform init data supplied\n");
821 static int __devexit lp8725_i2c_remove(struct i2c_client *i2c)
823 struct lp8725 *lp8725 = i2c_get_clientdata(i2c);
825 for (i = 0; i < lp8725->num_regulators; i++)
827 regulator_unregister(lp8725->rdev[i]);
829 i2c_set_clientdata(i2c, NULL);
835 static const struct i2c_device_id lp8725_i2c_id[] = {
840 MODULE_DEVICE_TABLE(i2c, lp8725_i2c_id);
842 static struct i2c_driver lp8725_i2c_driver = {
845 .owner = THIS_MODULE,
847 .probe = lp8725_i2c_probe,
848 .remove = __devexit_p(lp8725_i2c_remove),
849 .id_table = lp8725_i2c_id,
852 static int __init lp8725_module_init(void)
856 ret = i2c_add_driver(&lp8725_i2c_driver);
858 pr_err("Failed to register I2C driver: %d\n", ret);
862 module_init(lp8725_module_init);
864 static void __exit lp8725_module_exit(void)
866 i2c_del_driver(&lp8725_i2c_driver);
868 module_exit(lp8725_module_exit);
870 MODULE_LICENSE("GPL");
871 MODULE_AUTHOR("cym <cym@rock-chips.com>");
872 MODULE_DESCRIPTION("LP8725 PMIC driver");