2 * Regulator driver for rk808 PMIC chip for rk31xx
4 * Based on rk808.c that is work by zhangqing<zhangqing@rock-chips.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
12 #include <linux/bug.h>
13 #include <linux/err.h>
14 #include <linux/i2c.h>
15 #include <linux/kernel.h>
16 #include <linux/regulator/driver.h>
17 #include <linux/mfd/rk808.h>
18 #include <linux/mfd/core.h>
19 #include <linux/delay.h>
20 #include <linux/slab.h>
21 #include <linux/mutex.h>
22 #ifdef CONFIG_HAS_EARLYSUSPEND
23 #include <linux/earlysuspend.h>
25 #include <linux/interrupt.h>
26 #include <linux/module.h>
27 #include <linux/of_irq.h>
28 #include <linux/of_gpio.h>
30 #include <linux/of_device.h>
31 #include <linux/regulator/of_regulator.h>
32 #include <linux/regulator/driver.h>
33 #include <linux/regulator/machine.h>
34 #include <linux/regmap.h>
37 #define DBG(x...) printk(KERN_INFO x)
42 #define DBG_INFO(x...) printk(KERN_INFO x)
44 #define DBG_INFO(x...)
48 struct rk808 *g_rk808;
49 #define DCDC_RAISE_VOL_BYSTEP 1
50 #define DCDC_VOL_STEP 25000 //25mv
52 static struct mfd_cell rk808s[] = {
58 #define BUCK_VOL_MASK 0x3f
59 #define LDO_VOL_MASK 0x3f
61 #define VOL_MIN_IDX 0x00
62 #define VOL_MAX_IDX 0x3f
64 const static int buck_set_vol_base_addr[] = {
67 RK808_BUCK3_CONFIG_REG,
70 const static int buck_contr_base_addr[] = {
71 RK808_BUCK1_CONFIG_REG,
72 RK808_BUCK2_CONFIG_REG,
73 RK808_BUCK3_CONFIG_REG,
74 RK808_BUCK4_CONFIG_REG,
76 #define rk808_BUCK_SET_VOL_REG(x) (buck_set_vol_base_addr[x])
77 #define rk808_BUCK_CONTR_REG(x) (buck_contr_base_addr[x])
80 const static int ldo_set_vol_base_addr[] = {
81 RK808_LDO1_ON_VSEL_REG,
82 RK808_LDO2_ON_VSEL_REG,
83 RK808_LDO3_ON_VSEL_REG,
84 RK808_LDO4_ON_VSEL_REG,
85 RK808_LDO5_ON_VSEL_REG,
86 RK808_LDO6_ON_VSEL_REG,
87 RK808_LDO7_ON_VSEL_REG,
88 RK808_LDO8_ON_VSEL_REG,
89 // RK808_LDO1_ON_VSEL_REG,
92 const static int ldo_contr_base_addr[] = {
93 rk808_LDO1_CONTR_BASE,
94 rk808_LDO2_CONTR_BASE,
95 rk808_LDO3_CONTR_BASE,
96 rk808_LDO4_CONTR_BASE,
97 rk808_LDO5_CONTR_BASE,
98 rk808_LDO6_CONTR_BASE,
99 rk808_LDO7_CONTR_BASE,
100 rk808_LDO8_CONTR_BASE,
101 // rk808_LDO9_CONTR_BASE,
104 #define rk808_LDO_SET_VOL_REG(x) (ldo_set_vol_base_addr[x])
105 //#define rk808_LDO_CONTR_REG(x) (ldo_contr_base_addr[x])
107 const static int buck_voltage_map[] = {
108 700, 712, 725, 737, 750, 762, 775, 787, 800,
109 812, 825, 837, 850,862, 875, 887, 900, 912,
110 925, 937, 950, 962, 975, 987, 1000, 1012, 1025,
111 1037, 1050,1062, 1075, 1087, 1100, 1112, 1125, 1137,
112 1150,1162, 1175, 1187, 1200, 1212, 1225, 1237, 1250,
113 1262, 1275, 1287, 1300, 1312, 1325, 1337, 1350,1362,
114 1375, 1387, 1400, 1412, 1425, 1437, 1450,1462, 1475,
118 const static int buck4_voltage_map[] = {
119 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600,
120 2700, 2800, 2900, 3000, 3100, 3200,3300,
123 const static int ldo_voltage_map[] = {
124 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600,
125 2700, 2800, 2900, 3000, 3100, 3200,3300, 3400,
127 const static int ldo3_voltage_map[] = {
128 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600,
129 1700, 1800, 1900, 2000,2100, 2200, 2500,
131 const static int ldo6_voltage_map[] = {
132 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600,
133 1700, 1800, 1900, 2000,2100, 2200, 2300,2400,2500,
136 static int rk808_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
138 int ldo= rdev_get_id(dev) - RK808_LDO1;
140 if (index >= ARRAY_SIZE(ldo3_voltage_map))
142 return 1000 * ldo3_voltage_map[index];
144 else if (ldo == 5 || ldo ==6){
145 if (index >= ARRAY_SIZE(ldo6_voltage_map))
147 return 1000 * ldo6_voltage_map[index];
150 if (index >= ARRAY_SIZE(ldo_voltage_map))
152 return 1000 * ldo_voltage_map[index];
155 static int rk808_ldo_is_enabled(struct regulator_dev *dev)
157 struct rk808 *rk808 = rdev_get_drvdata(dev);
158 int ldo= rdev_get_id(dev) - RK808_LDO1;
161 val = rk808_reg_read(rk808, RK808_LDO_EN_REG);
164 if (val & (1 << ldo))
169 static int rk808_ldo_enable(struct regulator_dev *dev)
171 struct rk808 *rk808 = rdev_get_drvdata(dev);
172 int ldo= rdev_get_id(dev) - RK808_LDO1;
174 return rk808_set_bits(rk808, RK808_LDO_EN_REG, 1 << ldo, 1 << ldo);
177 static int rk808_ldo_disable(struct regulator_dev *dev)
179 struct rk808 *rk808 = rdev_get_drvdata(dev);
180 int ldo= rdev_get_id(dev) - RK808_LDO1;
182 return rk808_set_bits(rk808, RK808_LDO_EN_REG, 1 << ldo, 0);
185 static int rk808_ldo_suspend_enable(struct regulator_dev *dev)
187 struct rk808 *rk808 = rdev_get_drvdata(dev);
188 int ldo= rdev_get_id(dev) - RK808_LDO1;
190 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG2, 1 << ldo, 0);
193 static int rk808_ldo_suspend_disable(struct regulator_dev *dev)
195 struct rk808 *rk808 = rdev_get_drvdata(dev);
196 int ldo= rdev_get_id(dev) - RK808_LDO1;
198 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG2, 1 << ldo, 1 << ldo);
201 static int rk808_ldo_get_voltage(struct regulator_dev *dev)
203 struct rk808 *rk808 = rdev_get_drvdata(dev);
204 int ldo= rdev_get_id(dev) - RK808_LDO1;
207 reg = rk808_reg_read(rk808,rk808_LDO_SET_VOL_REG(ldo));
210 val = 1000 * ldo3_voltage_map[reg];
212 else if (ldo == 5 || ldo ==6){
213 val = 1000 * ldo6_voltage_map[reg];
216 val = 1000 * ldo_voltage_map[reg];
220 static int rk808_ldo_set_sleep_voltage(struct regulator_dev *dev,
223 struct rk808 *rk808 = rdev_get_drvdata(dev);
224 int ldo= rdev_get_id(dev) - RK808_LDO1;
225 const int *vol_map = ldo_voltage_map;
226 int min_vol = uV / 1000;
231 vol_map = ldo3_voltage_map;
234 else if (ldo == 5 || ldo ==6){
235 vol_map = ldo6_voltage_map;
242 if (min_vol < vol_map[0] ||
243 min_vol > vol_map[num])
246 for (val = 0; val <= num; val++){
247 if (vol_map[val] >= min_vol)
251 ret = rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo) +0x01,
256 static int rk808_ldo_set_voltage(struct regulator_dev *dev,
257 int min_uV, int max_uV,unsigned *selector)
259 struct rk808 *rk808 = rdev_get_drvdata(dev);
260 int ldo= rdev_get_id(dev) - RK808_LDO1;
262 int min_vol = min_uV / 1000;
267 vol_map = ldo3_voltage_map;
270 else if (ldo == 5 || ldo ==6){
271 vol_map = ldo6_voltage_map;
275 vol_map = ldo_voltage_map;
279 if (min_vol < vol_map[0] ||
280 min_vol > vol_map[num])
283 for (val = 0; val <= num; val++){
284 if (vol_map[val] >= min_vol)
288 ret = rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo),
293 static unsigned int rk808_ldo_get_mode(struct regulator_dev *dev)
295 struct rk808 *rk808 = rdev_get_drvdata(dev);
296 int ldo = rdev_get_id(dev) - RK808_LDO1;
299 val = rk808_reg_read(rk808, rk808_LDO_SET_VOL_REG(ldo));
305 return REGULATOR_MODE_NORMAL;
307 return REGULATOR_MODE_STANDBY;
310 static int rk808_ldo_set_mode(struct regulator_dev *dev, unsigned int mode)
312 struct rk808 *rk808 = rdev_get_drvdata(dev);
313 int ldo = rdev_get_id(dev) - RK808_LDO1;
317 case REGULATOR_MODE_FAST:
318 return rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo), mask, mask);
319 case REGULATOR_MODE_NORMAL:
320 return rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo), mask, 0);
322 printk("error:pmu_rk808 only lowpower and nomal mode\n");
328 static struct regulator_ops rk808_ldo_ops = {
329 .set_voltage = rk808_ldo_set_voltage,
330 .get_voltage = rk808_ldo_get_voltage,
331 .list_voltage = rk808_ldo_list_voltage,
332 .is_enabled = rk808_ldo_is_enabled,
333 .enable = rk808_ldo_enable,
334 .disable = rk808_ldo_disable,
335 .set_suspend_enable =rk808_ldo_suspend_enable,
336 .set_suspend_disable =rk808_ldo_suspend_disable,
337 .get_mode = rk808_ldo_get_mode,
338 .set_mode = rk808_ldo_set_mode,
339 .set_suspend_voltage = rk808_ldo_set_sleep_voltage,
343 static int rk808_dcdc_list_voltage(struct regulator_dev *dev, unsigned selector)
346 int buck = rdev_get_id(dev) - RK808_DCDC1;
348 if (selector < 0x0 ||selector > BUCK_VOL_MASK )
354 volt = 700000 + selector * 12500;
357 volt = 1800000 + selector * 100000;
369 static int rk808_dcdc_is_enabled(struct regulator_dev *dev)
371 struct rk808 *rk808 = rdev_get_drvdata(dev);
372 int buck = rdev_get_id(dev) - RK808_DCDC1;
375 val = rk808_reg_read(rk808, RK808_DCDC_EN_REG);
378 if (val & (1 << buck))
383 static int rk808_dcdc_enable(struct regulator_dev *dev)
385 struct rk808 *rk808 = rdev_get_drvdata(dev);
386 int buck = rdev_get_id(dev) - RK808_DCDC1;
388 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << buck, 1 << buck);
391 static int rk808_dcdc_disable(struct regulator_dev *dev)
393 struct rk808 *rk808 = rdev_get_drvdata(dev);
394 int buck = rdev_get_id(dev) - RK808_DCDC1;
396 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << buck , 0);
399 static int rk808_dcdc_suspend_enable(struct regulator_dev *dev)
401 struct rk808 *rk808 = rdev_get_drvdata(dev);
402 int buck = rdev_get_id(dev) - RK808_DCDC1;
404 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << buck, 0);
407 static int rk808_dcdc_suspend_disable(struct regulator_dev *dev)
409 struct rk808 *rk808 = rdev_get_drvdata(dev);
410 int buck = rdev_get_id(dev) - RK808_DCDC1;
412 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << buck , 1 << buck);
414 static int rk808_dcdc_get_voltage(struct regulator_dev *dev)
416 struct rk808 *rk808 = rdev_get_drvdata(dev);
417 int buck = rdev_get_id(dev) - RK808_DCDC1;
421 reg = rk808_reg_read(rk808,rk808_BUCK_SET_VOL_REG(buck));
423 reg &= BUCK_VOL_MASK;
424 val = rk808_dcdc_list_voltage(dev,reg);
427 static int rk808_dcdc_select_min_voltage(struct regulator_dev *dev,
428 int min_uV, int max_uV ,int buck)
432 if (buck == 0 || buck == 1){
435 else if (min_uV <= 1500000)
436 vsel = ((min_uV - 700000) / 12500) ;
441 if (min_uV < 1800000)
443 else if (min_uV <= 3300000)
444 vsel = ((min_uV - 1800000) / 100000) ;
448 if (rk808_dcdc_list_voltage(dev, vsel) > max_uV)
453 static int rk808_dcdc_set_voltage(struct regulator_dev *dev,
454 int min_uV, int max_uV,unsigned *selector)
456 struct rk808 *rk808 = rdev_get_drvdata(dev);
457 int buck = rdev_get_id(dev) - RK808_DCDC1;
459 int ret = 0,old_voltage =0,vol_temp =0;
464 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
465 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
468 #if defined(DCDC_RAISE_VOL_BYSTEP)
469 old_voltage = rk808_dcdc_get_voltage(dev);
470 if (max_uV >old_voltage){
471 vol_temp = old_voltage;
473 vol_temp += DCDC_VOL_STEP;
474 val = rk808_dcdc_select_min_voltage(dev,vol_temp,vol_temp,buck);
475 // printk("rk808_dcdc_set_voltage buck = %d vol_temp= %d old_voltage= %d min_uV =%d \n",buck,vol_temp,old_voltage,min_uV);
476 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
477 }while(vol_temp != max_uV);
480 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
481 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
484 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
485 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
490 static int rk808_dcdc_set_sleep_voltage(struct regulator_dev *dev,
493 struct rk808 *rk808 = rdev_get_drvdata(dev);
494 int buck = rdev_get_id(dev) - RK808_DCDC1;
501 val = rk808_dcdc_select_min_voltage(dev,uV,uV,buck);
502 ret = rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), BUCK_VOL_MASK, val);
506 static unsigned int rk808_dcdc_get_mode(struct regulator_dev *dev)
508 struct rk808 *rk808 = rdev_get_drvdata(dev);
509 int buck = rdev_get_id(dev) - RK808_DCDC1;
512 val = rk808_reg_read(rk808, rk808_BUCK_SET_VOL_REG(buck));
518 return REGULATOR_MODE_FAST;
520 return REGULATOR_MODE_NORMAL;
523 static int rk808_dcdc_set_mode(struct regulator_dev *dev, unsigned int mode)
525 struct rk808 *rk808 = rdev_get_drvdata(dev);
526 int buck = rdev_get_id(dev) - RK808_DCDC1;
531 case REGULATOR_MODE_FAST:
532 return rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), mask, mask);
533 case REGULATOR_MODE_NORMAL:
534 return rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), mask, 0);
536 printk("error:pmu_rk808 only powersave and pwm mode\n");
541 static int rk808_dcdc_set_suspend_mode(struct regulator_dev *dev, unsigned int mode)
543 struct rk808 *rk808 = rdev_get_drvdata(dev);
544 int buck = rdev_get_id(dev) - RK808_DCDC1;
549 case REGULATOR_MODE_FAST:
550 return rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), mask, mask);
551 case REGULATOR_MODE_NORMAL:
552 return rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), mask, 0);
554 printk("error:pmu_rk808 only powersave and pwm mode\n");
559 static int rk808_dcdc_set_voltage_time_sel(struct regulator_dev *dev, unsigned int old_selector,
560 unsigned int new_selector)
562 int old_volt, new_volt;
564 old_volt = rk808_dcdc_list_voltage(dev, old_selector);
568 new_volt = rk808_dcdc_list_voltage(dev, new_selector);
572 return DIV_ROUND_UP(abs(old_volt - new_volt)*2, 2500);
575 static struct regulator_ops rk808_dcdc_ops = {
576 .set_voltage = rk808_dcdc_set_voltage,
577 .get_voltage = rk808_dcdc_get_voltage,
578 .list_voltage= rk808_dcdc_list_voltage,
579 .is_enabled = rk808_dcdc_is_enabled,
580 .enable = rk808_dcdc_enable,
581 .disable = rk808_dcdc_disable,
582 .set_suspend_enable =rk808_dcdc_suspend_enable,
583 .set_suspend_disable =rk808_dcdc_suspend_disable,
584 .get_mode = rk808_dcdc_get_mode,
585 .set_mode = rk808_dcdc_set_mode,
586 .set_suspend_mode = rk808_dcdc_set_suspend_mode,
587 .set_suspend_voltage = rk808_dcdc_set_sleep_voltage,
588 .set_voltage_time_sel = rk808_dcdc_set_voltage_time_sel,
590 static struct regulator_desc regulators[] = {
595 .ops = &rk808_dcdc_ops,
596 .n_voltages = ARRAY_SIZE(buck_voltage_map),
597 .type = REGULATOR_VOLTAGE,
598 .owner = THIS_MODULE,
603 .ops = &rk808_dcdc_ops,
604 .n_voltages = ARRAY_SIZE(buck_voltage_map),
605 .type = REGULATOR_VOLTAGE,
606 .owner = THIS_MODULE,
611 .ops = &rk808_dcdc_ops,
612 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
613 .type = REGULATOR_VOLTAGE,
614 .owner = THIS_MODULE,
619 .ops = &rk808_dcdc_ops,
620 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
621 .type = REGULATOR_VOLTAGE,
622 .owner = THIS_MODULE,
628 .ops = &rk808_ldo_ops,
629 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
630 .type = REGULATOR_VOLTAGE,
631 .owner = THIS_MODULE,
636 .ops = &rk808_ldo_ops,
637 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
638 .type = REGULATOR_VOLTAGE,
639 .owner = THIS_MODULE,
644 .ops = &rk808_ldo_ops,
645 .n_voltages = ARRAY_SIZE(ldo3_voltage_map),
646 .type = REGULATOR_VOLTAGE,
647 .owner = THIS_MODULE,
652 .ops = &rk808_ldo_ops,
653 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
654 .type = REGULATOR_VOLTAGE,
655 .owner = THIS_MODULE,
661 .ops = &rk808_ldo_ops,
662 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
663 .type = REGULATOR_VOLTAGE,
664 .owner = THIS_MODULE,
669 .ops = &rk808_ldo_ops,
670 .n_voltages = ARRAY_SIZE(ldo6_voltage_map),
671 .type = REGULATOR_VOLTAGE,
672 .owner = THIS_MODULE,
677 .ops = &rk808_ldo_ops,
678 .n_voltages = ARRAY_SIZE(ldo6_voltage_map),
679 .type = REGULATOR_VOLTAGE,
680 .owner = THIS_MODULE,
685 .ops = &rk808_ldo_ops,
686 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
687 .type = REGULATOR_VOLTAGE,
688 .owner = THIS_MODULE,
696 int rk808_i2c_read(struct rk808 *rk808, char reg, int count,u8 *dest)
698 struct i2c_client *i2c = rk808->i2c;
700 struct i2c_adapter *adap;
701 struct i2c_msg msgs[2];
711 msgs[0].addr = i2c->addr;
713 msgs[0].flags = i2c->flags;
715 msgs[0].scl_rate = 100*1000;
717 msgs[1].buf = (u8 *)dest;
718 msgs[1].addr = i2c->addr;
719 msgs[1].flags = i2c->flags |I2C_M_RD;
721 msgs[1].scl_rate = 100*1000;
723 ret = i2c_transfer(adap, msgs, 2);
725 DBG("***run in %s %x % x\n",__FUNCTION__,i2c->addr,*(msgs[1].buf));
729 int rk808_i2c_write(struct rk808 *rk808, char reg, int count, const u8 src)
732 struct i2c_client *i2c = rk808->i2c;
733 struct i2c_adapter *adap;
746 msg.addr = i2c->addr;
747 msg.buf = &tx_buf[0];
749 msg.flags = i2c->flags;
750 msg.scl_rate = 100*1000;
752 ret = i2c_transfer(adap, &msg, 1);
756 u8 rk808_reg_read(struct rk808 *rk808, u8 reg)
760 mutex_lock(&rk808->io_lock);
762 rk808_i2c_read(rk808, reg, 1, &val);
764 DBG("reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
766 mutex_unlock(&rk808->io_lock);
770 EXPORT_SYMBOL_GPL(rk808_reg_read);
772 int rk808_reg_write(struct rk808 *rk808, u8 reg, u8 val)
776 mutex_lock(&rk808->io_lock);
778 err = rk808_i2c_write(rk808, reg, 1,val);
780 dev_err(rk808->dev, "Write for reg 0x%x failed\n", reg);
782 mutex_unlock(&rk808->io_lock);
785 EXPORT_SYMBOL_GPL(rk808_reg_write);
787 int rk808_set_bits(struct rk808 *rk808, u8 reg, u8 mask, u8 val)
792 mutex_lock(&rk808->io_lock);
794 ret = rk808_i2c_read(rk808, reg, 1, &tmp);
795 DBG("1 reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)tmp&0xff);
796 tmp = (tmp & ~mask) | val;
798 ret = rk808_i2c_write(rk808, reg, 1, tmp);
799 DBG("reg write 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
801 rk808_i2c_read(rk808, reg, 1, &tmp);
802 DBG("2 reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)tmp&0xff);
803 mutex_unlock(&rk808->io_lock);
807 EXPORT_SYMBOL_GPL(rk808_set_bits);
809 int rk808_clear_bits(struct rk808 *rk808, u8 reg, u8 mask)
814 mutex_lock(&rk808->io_lock);
815 err = rk808_i2c_read(rk808, reg, 1, &data);
817 dev_err(rk808->dev, "read from reg %x failed\n", reg);
822 err = rk808_i2c_write(rk808, reg, 1, data);
824 dev_err(rk808->dev, "write to reg %x failed\n", reg);
827 mutex_unlock(&rk808->io_lock);
830 EXPORT_SYMBOL_GPL(rk808_clear_bits);
832 int rk808_bulk_read(struct rk808 *rk808, u8 reg,
837 #if defined(CONFIG_MFD_RK610)
838 int i; //Solve communication conflict when rk610 and rk808 on the same i2c
840 mutex_lock(&rk808->io_lock);
841 for(i=0; i<count; i++){
842 ret = rk808_reg_read(rk808, reg+i);
844 printk("%s: failed read reg 0x%0x, ret = %d\n", __FUNCTION__, reg+i, ret);
845 mutex_unlock(&rk808->io_lock);
848 buf[i] = ret & 0x000000FF;
851 mutex_unlock(&rk808->io_lock);
853 mutex_lock(&rk808->io_lock);
855 ret = rk808->read(rk808, reg, count, buf);
857 mutex_unlock(&rk808->io_lock);
862 EXPORT_SYMBOL_GPL(rk808_bulk_read);
864 int rk808_bulk_write(struct rk808 *rk808, u8 reg,
869 #if defined(CONFIG_MFD_RK610)
870 int i; // //Solve communication conflict when rk610 and 808 on the same i2c
872 mutex_lock(&rk808->io_lock);
873 for(i=0; i<count; i++){
874 ret = rk808_reg_write(rk808, reg+i, buf[i]);
876 printk("%s: failed write reg=0x%0x, val=0x%0x, ret = %d\n", __FUNCTION__, reg+i, buf[i], ret);
877 mutex_unlock(&rk808->io_lock);
881 mutex_unlock(&rk808->io_lock);
883 mutex_lock(&rk808->io_lock);
885 ret = rk808->write(rk808, reg, count, buf);
887 mutex_unlock(&rk808->io_lock);
892 EXPORT_SYMBOL_GPL(rk808_bulk_write);
896 static ssize_t rk808_test_store(struct kobject *kobj, struct kobj_attribute *attr,
897 const char *buf, size_t n)
903 const char *buftmp = buf;
904 struct rk808 *rk808 = g_rk808;
906 * W Addr(8Bit) regAddr(8Bit) data0(8Bit) data1(8Bit) data2(8Bit) data3(8Bit)
907 * :data can be less than 4 byte
909 * C gpio_name(poweron/powerhold/sleep/boot0/boot1) value(H/L)
911 regAddr = (u16)(getdata[0] & 0xff);
912 if (strncmp(buf, "start", 5) == 0) {
915 } else if (strncmp(buf, "stop", 4== 0) ){
918 sscanf(buftmp, "%c ", &cmd);
919 printk("------zhangqing: get cmd = %c\n", cmd);
923 sscanf(buftmp, "%c %x %x ", &cmd, &getdata[0],&getdata[1]);
924 regAddr = (u16)(getdata[0] & 0xff);
925 data = (u8)(getdata[1] & 0xff);
926 printk("get value = %x\n", data);
928 rk808_i2c_write(rk808, regAddr, 1, data);
929 rk808_i2c_read(rk808, regAddr, 1, &data);
930 printk("%x %x\n", getdata[1],data);
935 sscanf(buftmp, "%c %x ", &cmd, &getdata[0]);
936 printk("CMD : %c %x\n", cmd, getdata[0]);
938 regAddr = (u16)(getdata[0] & 0xff);
939 rk808_i2c_read(rk808, regAddr, 1, &data);
940 printk("%x %x\n", getdata[0],data);
945 printk("Unknown command\n");
952 static ssize_t rk808_test_show(struct kobject *kobj, struct kobj_attribute *attr,
957 return sprintf(s, "%s\n", buf);
961 static struct kobject *rk808_kobj;
962 struct rk808_attribute {
963 struct attribute attr;
964 ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
966 ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
967 const char *buf, size_t n);
970 static struct rk808_attribute rk808_attrs[] = {
971 /* node_name permision show_func store_func */
972 __ATTR(rk808_test, S_IRUGO | S_IWUSR, rk808_test_show, rk808_test_store),
976 extern void rk28_send_wakeup_key(void);
977 static irqreturn_t rk808_vbat_lo_irq(int irq, void *data)
979 printk("rk808 vbat low %s:irq=%d\n",__func__,irq);
980 rk808_set_bits(g_rk808,0x4c,(0x1 << 1),(0x1 <<1));
981 // rk28_send_wakeup_key();
986 static struct of_device_id rk808_of_match[] = {
987 { .compatible = "rockchip,rk808"},
990 MODULE_DEVICE_TABLE(of, rk808_of_match);
994 static struct of_regulator_match rk808_reg_matches[] = {
995 { .name = "rk_dcdc1", .driver_data = (void *)0 },
996 { .name = "rk_dcdc2", .driver_data = (void *)1 },
997 { .name = "rk_dcdc3", .driver_data = (void *)2 },
998 { .name = "rk_dcdc4", .driver_data = (void *)3 },
999 { .name = "rk_ldo1", .driver_data = (void *)4 },
1000 { .name = "rk_ldo2", .driver_data = (void *)5 },
1001 { .name = "rk_ldo3", .driver_data = (void *)6 },
1002 { .name = "rk_ldo4", .driver_data = (void *)7 },
1003 { .name = "rk_ldo5", .driver_data = (void *)8 },
1004 { .name = "rk_ldo6", .driver_data = (void *)9 },
1005 { .name = "rk_ldo7", .driver_data = (void *)10 },
1006 { .name = "rk_ldo8", .driver_data = (void *)11 },
1009 static struct rk808_board *rk808_parse_dt(struct rk808 *rk808)
1011 struct rk808_board *pdata;
1012 struct device_node *regs,*rk808_pmic_np;
1015 rk808_pmic_np = of_node_get(rk808->dev->of_node);
1016 if (!rk808_pmic_np) {
1017 printk("could not find pmic sub-node\n");
1021 regs = of_find_node_by_name(rk808_pmic_np, "regulators");
1025 count = of_regulator_match(rk808->dev, regs, rk808_reg_matches,
1026 rk808_NUM_REGULATORS);
1028 if ((count < 0) || (count > rk808_NUM_REGULATORS))
1031 pdata = devm_kzalloc(rk808->dev, sizeof(*pdata), GFP_KERNEL);
1035 for (i = 0; i < count; i++) {
1036 if (!rk808_reg_matches[i].init_data || !rk808_reg_matches[i].of_node)
1039 pdata->rk808_init_data[i] = rk808_reg_matches[i].init_data;
1040 pdata->of_node[i] = rk808_reg_matches[i].of_node;
1042 pdata->irq = rk808->chip_irq;
1043 pdata->irq_base = -1;
1045 pdata->irq_gpio = of_get_named_gpio(rk808_pmic_np,"gpios",0);
1046 if (!gpio_is_valid(pdata->irq_gpio)) {
1047 printk("invalid gpio: %d\n", pdata->irq_gpio);
1051 pdata->pmic_sleep_gpio = of_get_named_gpio(rk808_pmic_np,"gpios",1);
1052 if (!gpio_is_valid(pdata->pmic_sleep_gpio)) {
1053 printk("invalid gpio: %d\n", pdata->pmic_sleep_gpio);
1055 pdata->pmic_sleep = true;
1061 static struct rk808_board *rk808_parse_dt(struct i2c_client *i2c)
1068 int rk808_device_shutdown(void)
1072 struct rk808 *rk808 = g_rk808;
1074 printk("%s\n",__func__);
1076 ret = rk808_reg_read(rk808,RK808_DEVCTRL_REG);
1077 ret = rk808_set_bits(rk808, RK808_DEVCTRL_REG,(0x1<<3),(0x1<<3));
1078 // ret = rk808_set_bits(rk808, RK808_DEVCTRL_REG,(0x1<<4),(0x1<<4));
1080 printk("rk808 power off error!\n");
1085 EXPORT_SYMBOL_GPL(rk808_device_shutdown);
1087 __weak void rk808_device_suspend(void) {}
1088 __weak void rk808_device_resume(void) {}
1090 static int rk808_suspend(struct i2c_client *i2c, pm_message_t mesg)
1092 rk808_device_suspend();
1096 static int rk808_resume(struct i2c_client *i2c)
1098 rk808_device_resume();
1102 static int rk808_suspend(struct i2c_client *i2c, pm_message_t mesg)
1107 static int rk808_resume(struct i2c_client *i2c)
1113 static bool is_volatile_reg(struct device *dev, unsigned int reg)
1115 if ((reg >= RK808_DCDC_EN_REG) && (reg <= RK808_LDO8_SLP_VSEL_REG)) {
1121 static const struct regmap_config rk808_regmap_config = {
1124 .volatile_reg = is_volatile_reg,
1125 .max_register = rk808_NUM_REGULATORS - 1,
1126 .cache_type = REGCACHE_RBTREE,
1129 #ifdef CONFIG_HAS_EARLYSUSPEND
1130 __weak void rk808_early_suspend(struct early_suspend *h) {}
1131 __weak void rk808_late_resume(struct early_suspend *h) {}
1134 static int rk808_pre_init(struct rk808 *rk808)
1137 printk("%s,line=%d\n", __func__,__LINE__);
1138 /***********set ILIM ************/
1139 val = rk808_reg_read(rk808,RK808_BUCK3_CONFIG_REG);
1140 val &= (~(0x7 <<0));
1142 ret = rk808_reg_write(rk808,RK808_BUCK3_CONFIG_REG,val);
1144 printk(KERN_ERR "Unable to write RK808_BUCK3_CONFIG_REG reg\n");
1148 val = rk808_reg_read(rk808,RK808_BUCK4_CONFIG_REG);
1149 val &= (~(0x7 <<0));
1151 ret = rk808_reg_write(rk808,RK808_BUCK4_CONFIG_REG,val);
1153 printk(KERN_ERR "Unable to write RK808_BUCK4_CONFIG_REG reg\n");
1157 val = rk808_reg_read(rk808,RK808_BOOST_CONFIG_REG);
1158 val &= (~(0x7 <<0));
1160 ret = rk808_reg_write(rk808,RK808_BOOST_CONFIG_REG,val);
1162 printk(KERN_ERR "Unable to write RK808_BOOST_CONFIG_REG reg\n");
1165 /*****************************************/
1166 /***********set buck OTP function************/
1167 ret = rk808_reg_write(rk808,0x6f,0x5a);
1169 printk(KERN_ERR "Unable to write 0x6f reg\n");
1173 ret = rk808_reg_write(rk808,0x91,0x80);
1175 printk(KERN_ERR "Unable to write 0x91 reg\n");
1179 ret = rk808_reg_write(rk808,0x92,0x55);
1181 printk(KERN_ERR "Unable to write 0x92 reg\n");
1184 /*****************************************/
1185 /***********set buck 12.5mv/us ************/
1186 val = rk808_reg_read(rk808,RK808_BUCK1_CONFIG_REG);
1187 val &= (~(0x3 <<3));
1189 ret = rk808_reg_write(rk808,RK808_BUCK1_CONFIG_REG,val);
1191 printk(KERN_ERR "Unable to write RK808_BUCK1_CONFIG_REG reg\n");
1195 val = rk808_reg_read(rk808,RK808_BUCK2_CONFIG_REG);
1196 val &= (~(0x3 <<3));
1198 ret = rk808_reg_write(rk808,RK808_BUCK2_CONFIG_REG,val);
1200 printk(KERN_ERR "Unable to write RK808_BUCK2_CONFIG_REG reg\n");
1203 /*****************************************/
1205 /*******enable switch and boost***********/
1206 val = rk808_reg_read(rk808,RK808_DCDC_EN_REG);
1207 val |= (0x3 << 5); //enable switch1/2
1208 val |= (0x1 << 4); //enable boost
1209 ret = rk808_reg_write(rk808,RK808_DCDC_EN_REG,val);
1211 printk(KERN_ERR "Unable to write RK808_DCDC_EN_REG reg\n");
1214 /****************************************/
1216 /****************set vbat low **********/
1217 val = rk808_reg_read(rk808,RK808_VB_MON_REG);
1218 val &=(~(VBAT_LOW_VOL_MASK | VBAT_LOW_ACT_MASK));
1219 val |= (RK808_VBAT_LOW_3V5 | EN_VBAT_LOW_IRQ);
1220 ret = rk808_reg_write(rk808,RK808_VB_MON_REG,val);
1222 printk(KERN_ERR "Unable to write RK818_VB_MON_REG reg\n");
1225 /**************************************/
1227 /**********mask int****************/
1228 val = rk808_reg_read(rk808,RK808_INT_STS_MSK_REG1);
1229 val |= (0x1<<0); //mask vout_lo_int
1230 ret = rk808_reg_write(rk808,RK808_INT_STS_MSK_REG1,val);
1232 printk(KERN_ERR "Unable to write RK808_INT_STS_MSK_REG1 reg\n");
1235 /**********************************/
1236 /**********enable clkout2****************/
1237 ret = rk808_reg_write(rk808,RK808_CLK32OUT_REG,0x01);
1239 printk(KERN_ERR "Unable to write RK808_CLK32OUT_REG reg\n");
1242 /**********************************/
1246 static int rk808_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
1248 struct rk808 *rk808;
1249 struct rk808_board *pdev;
1250 const struct of_device_id *match;
1251 struct regulator_config config = { };
1252 struct regulator_dev *rk808_rdev;
1253 struct regulator_init_data *reg_data;
1254 const char *rail_name = NULL;
1255 int ret,vlow_irq,i=0;
1257 printk("%s,line=%d\n", __func__,__LINE__);
1259 if (i2c->dev.of_node) {
1260 match = of_match_device(rk808_of_match, &i2c->dev);
1262 dev_err(&i2c->dev,"Failed to find matching dt id\n");
1267 rk808 = devm_kzalloc(&i2c->dev,sizeof(struct rk808), GFP_KERNEL);
1268 if (rk808 == NULL) {
1273 rk808->dev = &i2c->dev;
1274 i2c_set_clientdata(i2c, rk808);
1275 // rk808->read = rk808_i2c_read;
1276 // rk808->write = rk808_i2c_write;
1278 rk808->regmap = devm_regmap_init_i2c(i2c, &rk808_regmap_config);
1279 if (IS_ERR(rk808->regmap)) {
1280 printk("regmap initialization failed\n");
1284 mutex_init(&rk808->io_lock);
1286 ret = rk808_reg_read(rk808,0x2f);
1287 if ((ret < 0) || (ret == 0xff)){
1288 printk("The device is not rk808 %d\n",ret);
1292 ret = rk808_pre_init(rk808);
1294 printk("The rk808_pre_init failed %d\n",ret);
1298 if (rk808->dev->of_node)
1299 pdev = rk808_parse_dt(rk808);
1301 /******************************set sleep vol & dcdc mode******************/
1303 rk808->pmic_sleep_gpio = pdev->pmic_sleep_gpio;
1304 if (rk808->pmic_sleep_gpio) {
1305 ret = gpio_request(rk808->pmic_sleep_gpio, "rk808_pmic_sleep");
1307 dev_err(rk808->dev,"Failed to request gpio %d with ret:""%d\n", rk808->pmic_sleep_gpio, ret);
1310 gpio_direction_output(rk808->pmic_sleep_gpio,0);
1311 ret = gpio_get_value(rk808->pmic_sleep_gpio);
1312 gpio_free(rk808->pmic_sleep_gpio);
1313 pr_info("%s: rk808_pmic_sleep=%x\n", __func__, ret);
1316 /**********************************************************/
1319 rk808->num_regulators = rk808_NUM_REGULATORS;
1320 rk808->rdev = kcalloc(rk808_NUM_REGULATORS,sizeof(struct regulator_dev *), GFP_KERNEL);
1324 /* Instantiate the regulators */
1325 for (i = 0; i < rk808_NUM_REGULATORS; i++) {
1326 reg_data = pdev->rk808_init_data[i];
1329 config.dev = rk808->dev;
1330 config.driver_data = rk808;
1331 config.regmap = rk808->regmap;
1332 if (rk808->dev->of_node)
1333 config.of_node = pdev->of_node[i];
1334 if (reg_data && reg_data->constraints.name)
1335 rail_name = reg_data->constraints.name;
1337 rail_name = regulators[i].name;
1338 reg_data->supply_regulator = rail_name;
1340 config.init_data =reg_data;
1342 rk808_rdev = regulator_register(®ulators[i],&config);
1343 if (IS_ERR(rk808_rdev)) {
1344 printk("failed to register %d regulator\n",i);
1347 rk808->rdev[i] = rk808_rdev;
1351 // rk808->wakeup = pdev->wakeup;
1352 rk808->irq_gpio = pdev->irq_gpio;
1353 ret = rk808_irq_init(rk808, rk808->irq_gpio, pdev);
1357 ret = mfd_add_devices(rk808->dev, -1,
1358 rk808s, ARRAY_SIZE(rk808s),
1361 /********************vbat low int**************/
1362 vlow_irq = irq_create_mapping(rk808->irq_domain, RK808_IRQ_VB_LO);
1363 ret = request_threaded_irq(vlow_irq, NULL, rk808_vbat_lo_irq,
1364 IRQF_TRIGGER_RISING, "rk808_vbatlow",
1367 dev_err(rk808->dev, "Failed to request periodic IRQ %d: %d\n",
1368 vlow_irq+ RK808_IRQ_VB_LO, ret);
1372 /*********************************************/
1376 #ifdef CONFIG_HAS_EARLYSUSPEND
1377 rk808->rk808_suspend.suspend = rk808_early_suspend,
1378 rk808->rk808_suspend.resume = rk808_late_resume,
1379 rk808->rk808_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1,
1380 register_early_suspend(&rk808->rk808_suspend);
1384 rk808_kobj = kobject_create_and_add("rk808", NULL);
1387 for (i = 0; i < ARRAY_SIZE(rk808_attrs); i++) {
1388 ret = sysfs_create_file(rk808_kobj, &rk808_attrs[i].attr);
1390 printk("create index %d error\n", i);
1399 mfd_remove_devices(rk808->dev);
1404 static int rk808_i2c_remove(struct i2c_client *i2c)
1406 struct rk808 *rk808 = i2c_get_clientdata(i2c);
1409 for (i = 0; i < rk808->num_regulators; i++)
1411 regulator_unregister(rk808->rdev[i]);
1413 i2c_set_clientdata(i2c, NULL);
1419 static const struct i2c_device_id rk808_i2c_id[] = {
1424 MODULE_DEVICE_TABLE(i2c, rk808_i2c_id);
1426 static struct i2c_driver rk808_i2c_driver = {
1429 .owner = THIS_MODULE,
1430 .of_match_table =of_match_ptr(rk808_of_match),
1432 .probe = rk808_i2c_probe,
1433 .remove = rk808_i2c_remove,
1434 .id_table = rk808_i2c_id,
1436 .suspend = rk808_suspend,
1437 .resume = rk808_resume,
1441 static int __init rk808_module_init(void)
1444 ret = i2c_add_driver(&rk808_i2c_driver);
1446 pr_err("Failed to register I2C driver: %d\n", ret);
1449 //module_init(rk808_module_init);
1450 //subsys_initcall(rk808_module_init);
1451 //rootfs_initcall(rk808_module_init);
1452 subsys_initcall_sync(rk808_module_init);
1454 static void __exit rk808_module_exit(void)
1456 i2c_del_driver(&rk808_i2c_driver);
1458 module_exit(rk808_module_exit);
1460 MODULE_LICENSE("GPL");
1461 MODULE_AUTHOR("zhangqing <zhangqing@rock-chips.com>");
1462 MODULE_DESCRIPTION("rk808 PMIC driver");