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>
34 #include <mach/gpio.h>
35 #include <linux/delay.h>
37 //add by robert for reboot notifier
38 #include <linux/notifier.h>
39 #include <linux/reboot.h>
46 #define DBG(x...) printk(KERN_INFO x)
51 #define DBG_INFO(x...) printk(KERN_INFO x)
53 #define DBG_INFO(x...)
62 struct i2c_client *i2c;
64 struct regulator_dev **rdev;
67 static u8 lp8725_reg_read(struct lp8725 *lp8725, u8 reg);
68 static int lp8725_set_bits(struct lp8725 *lp8725, u8 reg, u16 mask, u16 val);
72 #define LP8725_BUCK_VOL_ENABLE_REG 0x00
73 #define LP8725_BUCK1_BASE 0x08
74 #define LP8725_BUCK2_BASE 0x0A
76 const static int buck_base_addr[] = {
83 #define LP8725_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x])
84 #define LP8725_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1)
86 const static int buck_voltage_map[] = {
87 800, 850, 900, 950, 1000, 1050, 1100, 1150,
88 1200, 1250, 1300, 1350, 1400, 1500, 1600, 1700,
89 1750, 1800, 1850, 1900, 2000, 2100, 2200, 2300,
90 2400, 2500, 2600, 2700, 2800, 2850, 2900, 3000,
93 #define BUCK_TARGET_VOL_MASK 0x1f
94 #define BUCK_TARGET_VOL_MIN_IDX 0x00
95 #define BUCK_TARGET_VOL_MAX_IDX 0x1f
99 #define LP8725_LDO_ENABLE_REG 0x0d
100 #define LP8725_LDO_VOL_CONTR_BASE 0x01
102 #define LP8725_LDO_VOL_CONTR_REG(x) (LP8725_LDO_VOL_CONTR_BASE + x)
104 const static int ldo_voltage_map[] = {
105 1200, 1250, 1300, 1350, 1400, 1450, 1500, 1550,
106 1600, 1650, 1700, 1750, 1800, 1850, 1900, 2000,
107 2100, 2200, 2300, 2400, 2500, 2600, 2650, 2700,
108 2750, 2800, 2850, 2900, 2950, 3000, 3100, 3300,
111 #define LDO_VOL_CONTR_MASK 0x1f
112 #define LDO_VOL_MIN_IDX 0x00
113 #define LDO_VOL_MAX_IDX 0x1f
115 #define LP8725_LILO_ENABLE_REG 0x0d
116 #define LP8725_LILO_VOL_CONTR_BASE 0x06
118 #define LP8725_LILO_VOL_CONTR_REG(x) (LP8725_LILO_VOL_CONTR_BASE + x)
120 const static int lilo_voltage_map[] = {
121 800, 850, 900, 950, 1000, 1050, 1100, 1150,
122 1200, 1250, 1300, 1350, 1400, 1500, 1600, 1700,
123 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500,
124 2600, 2700, 2800, 2850, 2900, 3000, 3100, 3300,
127 #define LILO_VOL_CONTR_MASK 0x1f
128 #define LILO_VOL_MIN_IDX 0x00
129 #define LILO_VOL_MAX_IDX 0x1f
132 static int lp8725_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
134 return 1000 * ldo_voltage_map[index];
137 static int lp8725_ldo_is_enabled(struct regulator_dev *dev)
139 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
140 int ldo = rdev_get_id(dev) - LP8725_LDO1;
141 u16 mask = 1 << (ldo);
144 val = lp8725_reg_read(lp8725, LP8725_LDO_ENABLE_REG);
145 return (val & mask) != 0;
148 static int lp8725_ldo_enable(struct regulator_dev *dev)
150 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
151 int ldo = rdev_get_id(dev) - LP8725_LDO1;
152 u16 mask = 1 << (ldo);
153 return lp8725_set_bits(lp8725, LP8725_LDO_ENABLE_REG, mask, mask);
156 static int lp8725_ldo_disable(struct regulator_dev *dev)
158 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
159 int ldo = rdev_get_id(dev) - LP8725_LDO1;
160 u16 mask = 1 << (ldo);
161 return lp8725_set_bits(lp8725, LP8725_LDO_ENABLE_REG, mask, 0);
164 static int lp8725_ldo_get_voltage(struct regulator_dev *dev)
166 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
167 int ldo = rdev_get_id(dev) - LP8725_LDO1;
171 reg = lp8725_reg_read(lp8725, LP8725_LDO_VOL_CONTR_REG(ldo));
172 reg &= BUCK_TARGET_VOL_MASK;
174 val = 1000 * ldo_voltage_map[reg];
178 static int lp8725_ldo_set_voltage(struct regulator_dev *dev,
179 int min_uV, int max_uV)
181 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
182 int ldo = rdev_get_id(dev) - LP8725_LDO1;
183 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
184 const int *vol_map = ldo_voltage_map;
187 if (min_vol < vol_map[LDO_VOL_MIN_IDX] ||
188 min_vol > vol_map[LDO_VOL_MAX_IDX])
191 for (val = LDO_VOL_MIN_IDX; val <= LDO_VOL_MAX_IDX; val++)
192 if (vol_map[val] >= min_vol)
195 if (vol_map[val] > max_vol)
198 DBG("***run in %s %d reg=0x%x val=0x%x",__FUNCTION__,__LINE__,LP8725_LDO_VOL_CONTR_REG(ldo),val);
200 return lp8725_set_bits(lp8725, LP8725_LDO_VOL_CONTR_REG(ldo),
201 LDO_VOL_CONTR_MASK, val);
204 static struct regulator_ops lp8725_ldo_ops = {
205 .list_voltage = lp8725_ldo_list_voltage,
206 .is_enabled = lp8725_ldo_is_enabled,
207 .enable = lp8725_ldo_enable,
208 .disable = lp8725_ldo_disable,
209 .get_voltage = lp8725_ldo_get_voltage,
210 .set_voltage = lp8725_ldo_set_voltage,
213 static int lp8725_lilo_list_voltage(struct regulator_dev *dev, unsigned index)
215 return 1000 * lilo_voltage_map[index];
218 static int lp8725_lilo_is_enabled(struct regulator_dev *dev)
220 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
221 int lilo = rdev_get_id(dev) - LP8725_LILO1;
222 u16 mask = 1 << (lilo+5);
225 val = lp8725_reg_read(lp8725, LP8725_LILO_ENABLE_REG);
226 return (val & mask) != 0;
229 static int lp8725_lilo_enable(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+5);
235 return lp8725_set_bits(lp8725, LP8725_LILO_ENABLE_REG, mask, mask);
238 static int lp8725_lilo_disable(struct regulator_dev *dev)
240 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
241 int lilo = rdev_get_id(dev) - LP8725_LILO1;
242 u16 mask = 1 << (lilo+5);
244 return lp8725_set_bits(lp8725, LP8725_LILO_ENABLE_REG, mask, 0);
247 static int lp8725_lilo_get_voltage(struct regulator_dev *dev)
249 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
250 int lilo = rdev_get_id(dev) - LP8725_LILO1;
254 reg = lp8725_reg_read(lp8725, LP8725_LILO_VOL_CONTR_REG(lilo));
255 reg &= BUCK_TARGET_VOL_MASK;
257 val = 1000 * lilo_voltage_map[reg];
261 static int lp8725_lilo_set_voltage(struct regulator_dev *dev,
262 int min_uV, int max_uV)
264 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
265 int lilo = rdev_get_id(dev) - LP8725_LILO1;
266 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
267 const int *vol_map = lilo_voltage_map;
270 if (min_vol < vol_map[LILO_VOL_MIN_IDX] ||
271 min_vol > vol_map[LILO_VOL_MAX_IDX])
274 for (val = LILO_VOL_MIN_IDX; val <= LILO_VOL_MAX_IDX; val++)
275 if (vol_map[val] >= min_vol)
278 if (vol_map[val] > max_vol)
281 return lp8725_set_bits(lp8725, LP8725_LILO_VOL_CONTR_REG(lilo),
282 LILO_VOL_CONTR_MASK, val);
285 static struct regulator_ops lp8725_lilo_ops = {
286 .list_voltage = lp8725_lilo_list_voltage,
287 .is_enabled = lp8725_lilo_is_enabled,
288 .enable = lp8725_lilo_enable,
289 .disable = lp8725_lilo_disable,
290 .get_voltage = lp8725_lilo_get_voltage,
291 .set_voltage = lp8725_lilo_set_voltage,
294 static int lp8725_dcdc_list_voltage(struct regulator_dev *dev, unsigned index)
296 return 1000 * buck_voltage_map[index];
299 static int lp8725_dcdc_is_enabled(struct regulator_dev *dev)
301 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
302 int buck = rdev_get_id(dev);
311 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
312 return ((val & mask) && (val & mask2)) != 0;
316 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
317 return ((val & mask) && (val & mask2)) != 0;
318 case LP8725_DCDC1_V2:
321 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
322 return ((val & mask) && (!(val & mask2))) !=0;
323 case LP8725_DCDC2_V2:
326 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
327 return ((val & mask) && (!(val & mask2))) !=0;
331 static int lp8725_dcdc_enable(struct regulator_dev *dev)
333 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
334 int buck = rdev_get_id(dev);
341 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
343 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
345 case LP8725_DCDC1_V2:
347 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
349 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
353 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
355 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
357 case LP8725_DCDC2_V2:
359 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
361 ret = lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
368 static int lp8725_dcdc_disable(struct regulator_dev *dev)
370 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
371 int buck = rdev_get_id(dev) ;
377 case LP8725_DCDC1_V2:
379 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
381 case LP8725_DCDC2_V2:
383 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask,0);
387 static int lp8725_dcdc_get_voltage(struct regulator_dev *dev)
389 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
390 int buck = rdev_get_id(dev) ;
398 buck -= LP8725_DCDC1;
399 reg = lp8725_reg_read(lp8725, LP8725_BUCK_TARGET_VOL1_REG(buck));
401 case LP8725_DCDC1_V2:
402 case LP8725_DCDC2_V2:
403 buck -= LP8725_DCDC1_V2;
404 reg = lp8725_reg_read(lp8725, LP8725_BUCK_TARGET_VOL2_REG(buck));
408 reg &= BUCK_TARGET_VOL_MASK;
409 val = 1000 * buck_voltage_map[reg];
414 static int lp8725_dcdc_set_voltage(struct regulator_dev *dev,
415 int min_uV, int max_uV)
417 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
418 int buck = rdev_get_id(dev);
419 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
420 const int *vol_map = buck_voltage_map;
424 if (min_vol < vol_map[BUCK_TARGET_VOL_MIN_IDX] ||
425 min_vol > vol_map[BUCK_TARGET_VOL_MAX_IDX])
428 for (val = BUCK_TARGET_VOL_MIN_IDX; val <= BUCK_TARGET_VOL_MAX_IDX;
430 if (vol_map[val] >= min_vol)
433 if (vol_map[val] > max_vol)
440 buck -= LP8725_DCDC1;
441 ret = lp8725_set_bits(lp8725, LP8725_BUCK_TARGET_VOL1_REG(buck),
442 BUCK_TARGET_VOL_MASK, val);
446 case LP8725_DCDC1_V2:
447 case LP8725_DCDC2_V2:
448 buck -= LP8725_DCDC1_V2;
449 ret = lp8725_set_bits(lp8725, LP8725_BUCK_TARGET_VOL2_REG(buck),
450 BUCK_TARGET_VOL_MASK, val);
459 static unsigned int lp8725_dcdc_get_mode(struct regulator_dev *dev)
461 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
464 val = lp8725_reg_read(lp8725, LP8725_BUCK_VOL_ENABLE_REG);
465 if ((val & mask) == 0)
466 return REGULATOR_MODE_NORMAL;
468 return REGULATOR_MODE_IDLE;
471 static int lp8725_dcdc_set_mode(struct regulator_dev *dev, unsigned int mode)
473 struct lp8725 *lp8725 = rdev_get_drvdata(dev);
477 case REGULATOR_MODE_NORMAL:
478 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, 0);
479 case REGULATOR_MODE_IDLE:
480 return lp8725_set_bits(lp8725, LP8725_BUCK_VOL_ENABLE_REG, mask, mask);
482 printk("error:pmu_lp8725 only normal and idle mode\n");
487 static struct regulator_ops lp8725_dcdc_ops = {
488 .list_voltage = lp8725_dcdc_list_voltage,
489 .is_enabled = lp8725_dcdc_is_enabled,
490 .enable = lp8725_dcdc_enable,
491 .disable = lp8725_dcdc_disable,
492 .get_voltage = lp8725_dcdc_get_voltage,
493 .set_voltage = lp8725_dcdc_set_voltage,
494 .get_mode = lp8725_dcdc_get_mode,
495 .set_mode = lp8725_dcdc_set_mode,
498 static struct regulator_desc regulators[] = {
502 .ops = &lp8725_ldo_ops,
503 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
504 .type = REGULATOR_VOLTAGE,
505 .owner = THIS_MODULE,
510 .ops = &lp8725_ldo_ops,
511 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
512 .type = REGULATOR_VOLTAGE,
513 .owner = THIS_MODULE,
518 .ops = &lp8725_ldo_ops,
519 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
520 .type = REGULATOR_VOLTAGE,
521 .owner = THIS_MODULE,
526 .ops = &lp8725_ldo_ops,
527 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
528 .type = REGULATOR_VOLTAGE,
529 .owner = THIS_MODULE,
534 .ops = &lp8725_ldo_ops,
535 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
536 .type = REGULATOR_VOLTAGE,
537 .owner = THIS_MODULE,
542 .ops = &lp8725_lilo_ops,
543 .n_voltages = ARRAY_SIZE(lilo_voltage_map),
544 .type = REGULATOR_VOLTAGE,
545 .owner = THIS_MODULE,
550 .ops = &lp8725_lilo_ops,
551 .n_voltages = ARRAY_SIZE(lilo_voltage_map),
552 .type = REGULATOR_VOLTAGE,
553 .owner = THIS_MODULE,
558 .ops = &lp8725_dcdc_ops,
559 .n_voltages = ARRAY_SIZE(buck_voltage_map),
560 .type = REGULATOR_VOLTAGE,
561 .owner = THIS_MODULE,
566 .ops = &lp8725_dcdc_ops,
567 .n_voltages = ARRAY_SIZE(buck_voltage_map),
568 .type = REGULATOR_VOLTAGE,
569 .owner = THIS_MODULE,
573 .id = LP8725_DCDC1_V2,
574 .ops = &lp8725_dcdc_ops,
575 .n_voltages = ARRAY_SIZE(buck_voltage_map),
576 .type = REGULATOR_VOLTAGE,
577 .owner = THIS_MODULE,
581 .id = LP8725_DCDC2_V2,
582 .ops = &lp8725_dcdc_ops,
583 .n_voltages = ARRAY_SIZE(buck_voltage_map),
584 .type = REGULATOR_VOLTAGE,
585 .owner = THIS_MODULE,
589 static int lp8725_i2c_read(struct i2c_client *i2c, char reg, int count, u16 *dest)
592 struct i2c_adapter *adap;
593 struct i2c_msg msgs[2];
603 msgs[0].addr = i2c->addr;
605 msgs[0].flags = i2c->flags;
607 msgs[0].scl_rate = 200*1000;
610 msgs[1].addr = i2c->addr;
611 msgs[1].flags = i2c->flags | I2C_M_RD;
613 msgs[1].scl_rate = 200*1000;
614 ret = i2c_transfer(adap, msgs, 2);
616 DBG("***run in %s %d msgs[1].buf = %d\n",__FUNCTION__,__LINE__,*(msgs[1].buf));
621 static int lp8725_i2c_write(struct i2c_client *i2c, char reg, int count, const u16 src)
625 struct i2c_adapter *adap;
638 msg.addr = i2c->addr;
639 msg.buf = &tx_buf[0];
641 msg.flags = i2c->flags;
642 msg.scl_rate = 200*1000;
644 ret = i2c_transfer(adap, &msg, 1);
648 static u8 lp8725_reg_read(struct lp8725 *lp8725, u8 reg)
652 mutex_lock(&lp8725->io_lock);
654 lp8725_i2c_read(lp8725->i2c, reg, 1, &val);
656 DBG("reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
658 mutex_unlock(&lp8725->io_lock);
663 static int lp8725_set_bits(struct lp8725 *lp8725, u8 reg, u16 mask, u16 val)
668 mutex_lock(&lp8725->io_lock);
670 ret = lp8725_i2c_read(lp8725->i2c, reg, 1, &tmp);
671 tmp = (tmp & ~mask) | val;
673 ret = lp8725_i2c_write(lp8725->i2c, reg, 1, tmp);
674 DBG("reg write 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
676 mutex_unlock(&lp8725->io_lock);
682 //add by robert for power on bp
683 #define AP_TD_UNDEFINED_GBIN5 FPGA_PIO2_02
684 #define AP_RESET_TD FPGA_PIO2_04
685 #define AP_SHUTDOWN_TD_PMU FPGA_PIO2_05
686 #define AP_PW_EN_TD FPGA_PIO2_03
688 static int bp_power_on(void)
692 ret = gpio_request(AP_TD_UNDEFINED_GBIN5, NULL);
694 printk("%s:failed to request fpga s %d\n",__FUNCTION__,__LINE__);
697 ret = gpio_request(AP_RESET_TD, NULL);
699 printk("%s:failed to request fpga s %d\n",__FUNCTION__,__LINE__);
704 ret = gpio_request(AP_SHUTDOWN_TD_PMU, NULL);
706 printk("%s:failed to request fpga %d\n",__FUNCTION__,__LINE__);
710 ret = gpio_request(AP_PW_EN_TD, NULL);
712 printk("%s:failed to request fpga %d\n",__FUNCTION__,__LINE__);
716 gpio_set_value(AP_TD_UNDEFINED_GBIN5, 1);
717 gpio_direction_output(AP_TD_UNDEFINED_GBIN5, 1);
718 gpio_direction_input(AP_RESET_TD);
720 gpio_set_value(AP_SHUTDOWN_TD_PMU, 0);
721 gpio_direction_output(AP_SHUTDOWN_TD_PMU, 0);
723 gpio_set_value(AP_PW_EN_TD, 0);
724 gpio_direction_output(AP_PW_EN_TD, 0);
726 gpio_set_value(AP_PW_EN_TD, 1);
728 gpio_set_value(AP_PW_EN_TD, 0);
732 gpio_free(AP_SHUTDOWN_TD_PMU);
734 gpio_free(AP_RESET_TD);
736 gpio_free(AP_TD_UNDEFINED_GBIN5);
743 static int bp_power_off(struct notifier_block *this,
744 unsigned long code, void *unused)
746 printk("+++--++++++%s_________%d \r\n",__FUNCTION__,code);
748 gpio_set_value(AP_TD_UNDEFINED_GBIN5, 0);
750 gpio_set_value(AP_PW_EN_TD, 0);
751 //gpio_direction_output(AP_PW_EN_TD, 0);
753 gpio_set_value(AP_PW_EN_TD, 1);
755 gpio_set_value(AP_PW_EN_TD, 0);
758 gpio_set_value(AP_SHUTDOWN_TD_PMU, 1);
760 // gpio_free(AP_PW_EN_TD);
761 printk("++++--+++++%s ok_________\r\n",__FUNCTION__);
766 static int lp8725_set_init(void)
769 struct regulator *ldo1,*ldo2,*ldo3,*ldo4,*ldo5;
770 struct regulator *lilo1,*lilo2;
771 struct regulator *buck1,*buck2;
773 DBG_INFO("***run in %s %d ",__FUNCTION__,__LINE__);
776 DBG_INFO("***ldo1 vcc init\n");
777 ldo1 = regulator_get(NULL, "ldo1");
778 regulator_enable(ldo1);
779 // regulator_set_voltage(ldo1,2500000,2500000);
780 tmp = regulator_get_voltage(ldo1);
781 DBG_INFO("***regulator_set_init: ldo1 vcc =%d\n",tmp);
784 DBG_INFO("***ldo2 vcc init\n");
785 ldo2 = regulator_get(NULL, "ldo2");
786 regulator_enable(ldo2);
787 // regulator_set_voltage(ldo2,3000000,3000000);
788 tmp = regulator_get_voltage(ldo2);
789 DBG_INFO("***regulator_set_init: ldo2 vcc =%d\n",tmp);
792 DBG_INFO("***ldo3 vcc init\n");
793 ldo3 = regulator_get(NULL, "ldo3");
794 regulator_enable(ldo3);
795 // regulator_set_voltage(ldo3,3000000,3000000);
796 tmp = regulator_get_voltage(ldo3);
797 DBG_INFO("***regulator_set_init: ldo3 vcc =%d\n",tmp);
800 DBG_INFO("***ldo4 vcc init\n");
801 ldo4 = regulator_get(NULL, "ldo4");
802 regulator_enable(ldo4);
803 // regulator_set_voltage(ldo4,1900000,1900000);
804 tmp = regulator_get_voltage(ldo4);
805 DBG_INFO("***regulator_set_init: ldo4 vcc =%d\n",tmp);
808 DBG_INFO("***ldo5 vcc init\n");
809 ldo5 = regulator_get(NULL, "ldo5");
810 regulator_enable(ldo5);
811 regulator_set_voltage(ldo5,1800000,1800000);
812 tmp = regulator_get_voltage(ldo5);
813 DBG_INFO("***regulator_set_init: ldo5 vcc =%d\n",tmp);
816 DBG_INFO("***lilo1 vcc init\n");
817 lilo1 = regulator_get(NULL, "lilo1");
818 regulator_enable(lilo1);
819 // regulator_set_voltage(lilo1,3300000,3300000);
820 tmp = regulator_get_voltage(lilo1);
821 DBG_INFO("***regulator_set_init: lilo1 vcc =%d\n",tmp);
824 DBG_INFO("***lilo2 vcc init\n");
825 lilo2 = regulator_get(NULL, "lilo2");
826 regulator_enable(lilo2);
827 // regulator_set_voltage(lilo2,3300000,3300000);
828 tmp = regulator_get_voltage(lilo2);
829 DBG_INFO("***regulator_set_init: lilo2 vcc =%d\n",tmp);
832 DBG_INFO("***buck1 vcc init\n");
833 buck1 = regulator_get(NULL, "vdd12");
834 // regulator_set_voltage(buck1,1200000,1200000);
835 tmp = regulator_get_voltage(buck1);
836 DBG_INFO("***regulator_set_init: buck1 vcc =%d\n",tmp);
839 DBG_INFO("***buck2 vcc init\n");
840 buck2 = regulator_get(NULL, "vccdr");
841 // regulator_set_voltage(buck1,1800000,1800000);
842 tmp = regulator_get_voltage(buck2);
843 DBG_INFO("***regulator_set_init: buck2 vcc =%d\n",tmp);
846 //add by robert for power on bp
854 static int __devinit setup_regulators(struct lp8725 *lp8725, struct lp8725_platform_data *pdata)
858 lp8725->num_regulators = pdata->num_regulators;
859 lp8725->rdev = kcalloc(pdata->num_regulators,
860 sizeof(struct regulator_dev *), GFP_KERNEL);
865 /* Instantiate the regulators */
866 for (i = 0; i < pdata->num_regulators; i++) {
867 int id = pdata->regulators[i].id;
868 lp8725->rdev[i] = regulator_register(®ulators[id],
869 lp8725->dev, pdata->regulators[i].initdata, lp8725);
871 if (IS_ERR(lp8725->rdev[i])) {
872 err = PTR_ERR(lp8725->rdev[i]);
873 dev_err(lp8725->dev, "regulator init failed: %d\n",
882 regulator_unregister(lp8725->rdev[i]);
888 static int __devinit lp8725_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
890 struct lp8725 *lp8725;
891 struct lp8725_platform_data *pdata = i2c->dev.platform_data;
894 lp8725 = kzalloc(sizeof(struct lp8725), GFP_KERNEL);
895 if (lp8725 == NULL) {
901 lp8725->dev = &i2c->dev;
902 i2c_set_clientdata(i2c, lp8725);
904 mutex_init(&lp8725->io_lock);
907 ret = setup_regulators(lp8725, pdata);
911 dev_warn(lp8725->dev, "No platform init data supplied\n");
921 static int __devexit lp8725_i2c_remove(struct i2c_client *i2c)
923 struct lp8725 *lp8725 = i2c_get_clientdata(i2c);
926 for (i = 0; i < lp8725->num_regulators; i++)
928 regulator_unregister(lp8725->rdev[i]);
930 i2c_set_clientdata(i2c, NULL);
936 static const struct i2c_device_id lp8725_i2c_id[] = {
941 MODULE_DEVICE_TABLE(i2c, lp8725_i2c_id);
943 static struct i2c_driver lp8725_i2c_driver = {
946 .owner = THIS_MODULE,
948 .probe = lp8725_i2c_probe,
949 .remove = __devexit_p(lp8725_i2c_remove),
950 .id_table = lp8725_i2c_id,
954 //add by robert for bp powerdown register
955 static struct notifier_block BP_powerdown_notifier = {
956 .notifier_call = bp_power_off,
962 static int __init lp8725_module_init(void)
966 ret = i2c_add_driver(&lp8725_i2c_driver);
968 pr_err("Failed to register I2C driver: %d\n", ret);
970 //add by robert for bp powerdown register
971 ret = register_reboot_notifier(&BP_powerdown_notifier);
974 printk("cannot register reboot notifier (err=%d), %s\n", ret,__FUNCTION__);
981 module_init(lp8725_module_init);
983 static void __exit lp8725_module_exit(void)
985 //add by robert for bp power down
986 unregister_reboot_notifier(&BP_powerdown_notifier);
989 i2c_del_driver(&lp8725_i2c_driver);
991 module_exit(lp8725_module_exit);
993 MODULE_LICENSE("GPL");
994 MODULE_AUTHOR("cym <cym@rock-chips.com>");
995 MODULE_DESCRIPTION("LP8725 PMIC driver");