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;
175 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << 5, 1 << 5);
177 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << 6, 1 << 6);
179 return rk808_set_bits(rk808, RK808_LDO_EN_REG, 1 << ldo, 1 << ldo);
182 static int rk808_ldo_disable(struct regulator_dev *dev)
184 struct rk808 *rk808 = rdev_get_drvdata(dev);
185 int ldo= rdev_get_id(dev) - RK808_LDO1;
188 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << 5, 0);
190 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << 6, 0);
192 return rk808_set_bits(rk808, RK808_LDO_EN_REG, 1 << ldo, 0);
195 static int rk808_ldo_suspend_enable(struct regulator_dev *dev)
197 struct rk808 *rk808 = rdev_get_drvdata(dev);
198 int ldo= rdev_get_id(dev) - RK808_LDO1;
201 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << 5, 0);
203 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << 6, 0);
205 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG2, 1 << ldo, 0);
208 static int rk808_ldo_suspend_disable(struct regulator_dev *dev)
210 struct rk808 *rk808 = rdev_get_drvdata(dev);
211 int ldo= rdev_get_id(dev) - RK808_LDO1;
214 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << 5, 1 << 5);
216 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << 6, 1 << 6);
218 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG2, 1 << ldo, 1 << ldo);
221 static int rk808_ldo_get_voltage(struct regulator_dev *dev)
223 struct rk808 *rk808 = rdev_get_drvdata(dev);
224 int ldo= rdev_get_id(dev) - RK808_LDO1;
228 if ((ldo ==8 ) || (ldo ==9)){
229 reg = rk808_reg_read(rk808,rk808_BUCK_SET_VOL_REG(3));
230 reg &= BUCK_VOL_MASK;
231 val = 1000 * buck4_voltage_map[reg];
234 reg = rk808_reg_read(rk808,rk808_LDO_SET_VOL_REG(ldo));
237 val = 1000 * ldo3_voltage_map[reg];
239 else if (ldo == 5 || ldo ==6){
240 val = 1000 * ldo6_voltage_map[reg];
243 val = 1000 * ldo_voltage_map[reg];
248 static int rk808_ldo_set_sleep_voltage(struct regulator_dev *dev,
251 struct rk808 *rk808 = rdev_get_drvdata(dev);
252 int ldo= rdev_get_id(dev) - RK808_LDO1;
253 const int *vol_map = ldo_voltage_map;
254 int min_vol = uV / 1000;
259 vol_map = ldo3_voltage_map;
262 else if (ldo == 5 || ldo ==6){
263 vol_map = ldo6_voltage_map;
270 if (min_vol < vol_map[0] ||
271 min_vol > vol_map[num])
274 for (val = 0; val <= num; val++){
275 if (vol_map[val] >= min_vol)
279 ret = rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo) +0x01,
284 static int rk808_ldo_set_voltage(struct regulator_dev *dev,
285 int min_uV, int max_uV,unsigned *selector)
287 struct rk808 *rk808 = rdev_get_drvdata(dev);
288 int ldo= rdev_get_id(dev) - RK808_LDO1;
290 int min_vol = min_uV / 1000;
295 vol_map = ldo3_voltage_map;
298 else if (ldo == 5 || ldo ==6){
299 vol_map = ldo6_voltage_map;
303 vol_map = ldo_voltage_map;
307 if (min_vol < vol_map[0] ||
308 min_vol > vol_map[num])
311 for (val = 0; val <= num; val++){
312 if (vol_map[val] >= min_vol)
316 ret = rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo),
321 static unsigned int rk808_ldo_get_mode(struct regulator_dev *dev)
323 struct rk808 *rk808 = rdev_get_drvdata(dev);
324 int ldo = rdev_get_id(dev) - RK808_LDO1;
327 val = rk808_reg_read(rk808, rk808_LDO_SET_VOL_REG(ldo));
333 return REGULATOR_MODE_NORMAL;
335 return REGULATOR_MODE_STANDBY;
338 static int rk808_ldo_set_mode(struct regulator_dev *dev, unsigned int mode)
340 struct rk808 *rk808 = rdev_get_drvdata(dev);
341 int ldo = rdev_get_id(dev) - RK808_LDO1;
345 case REGULATOR_MODE_FAST:
346 return rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo), mask, mask);
347 case REGULATOR_MODE_NORMAL:
348 return rk808_set_bits(rk808, rk808_LDO_SET_VOL_REG(ldo), mask, 0);
350 printk("error:pmu_rk808 only lowpower and nomal mode\n");
356 static struct regulator_ops rk808_ldo_ops = {
357 .set_voltage = rk808_ldo_set_voltage,
358 .get_voltage = rk808_ldo_get_voltage,
359 .list_voltage = rk808_ldo_list_voltage,
360 .is_enabled = rk808_ldo_is_enabled,
361 .enable = rk808_ldo_enable,
362 .disable = rk808_ldo_disable,
363 .set_suspend_enable =rk808_ldo_suspend_enable,
364 .set_suspend_disable =rk808_ldo_suspend_disable,
365 .get_mode = rk808_ldo_get_mode,
366 .set_mode = rk808_ldo_set_mode,
367 .set_suspend_voltage = rk808_ldo_set_sleep_voltage,
371 static int rk808_dcdc_list_voltage(struct regulator_dev *dev, unsigned selector)
374 int buck = rdev_get_id(dev) - RK808_DCDC1;
376 if (selector < 0x0 ||selector > BUCK_VOL_MASK )
382 volt = 700000 + selector * 12500;
385 volt = 1800000 + selector * 100000;
397 static int rk808_dcdc_is_enabled(struct regulator_dev *dev)
399 struct rk808 *rk808 = rdev_get_drvdata(dev);
400 int buck = rdev_get_id(dev) - RK808_DCDC1;
403 val = rk808_reg_read(rk808, RK808_DCDC_EN_REG);
406 if (val & (1 << buck))
411 static int rk808_dcdc_enable(struct regulator_dev *dev)
413 struct rk808 *rk808 = rdev_get_drvdata(dev);
414 int buck = rdev_get_id(dev) - RK808_DCDC1;
416 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << buck, 1 << buck);
419 static int rk808_dcdc_disable(struct regulator_dev *dev)
421 struct rk808 *rk808 = rdev_get_drvdata(dev);
422 int buck = rdev_get_id(dev) - RK808_DCDC1;
424 return rk808_set_bits(rk808, RK808_DCDC_EN_REG, 1 << buck , 0);
427 static int rk808_dcdc_suspend_enable(struct regulator_dev *dev)
429 struct rk808 *rk808 = rdev_get_drvdata(dev);
430 int buck = rdev_get_id(dev) - RK808_DCDC1;
432 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << buck, 0);
435 static int rk808_dcdc_suspend_disable(struct regulator_dev *dev)
437 struct rk808 *rk808 = rdev_get_drvdata(dev);
438 int buck = rdev_get_id(dev) - RK808_DCDC1;
440 return rk808_set_bits(rk808, RK808_SLEEP_SET_OFF_REG1, 1 << buck , 1 << buck);
442 static int rk808_dcdc_get_voltage(struct regulator_dev *dev)
444 struct rk808 *rk808 = rdev_get_drvdata(dev);
445 int buck = rdev_get_id(dev) - RK808_DCDC1;
449 reg = rk808_reg_read(rk808,rk808_BUCK_SET_VOL_REG(buck));
451 reg &= BUCK_VOL_MASK;
452 val = rk808_dcdc_list_voltage(dev,reg);
455 static int rk808_dcdc_select_min_voltage(struct regulator_dev *dev,
456 int min_uV, int max_uV ,int buck)
460 if (buck == 0 || buck == 1){
463 else if (min_uV <= 1500000)
464 vsel = ((min_uV - 700000) / 12500) ;
469 if (min_uV < 1800000)
471 else if (min_uV <= 3300000)
472 vsel = ((min_uV - 1800000) / 100000) ;
476 if (rk808_dcdc_list_voltage(dev, vsel) > max_uV)
481 static int rk808_dcdc_set_voltage(struct regulator_dev *dev,
482 int min_uV, int max_uV,unsigned *selector)
484 struct rk808 *rk808 = rdev_get_drvdata(dev);
485 int buck = rdev_get_id(dev) - RK808_DCDC1;
487 int ret = 0,old_voltage =0,vol_temp =0;
492 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
493 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
496 #if defined(DCDC_RAISE_VOL_BYSTEP)
497 old_voltage = rk808_dcdc_get_voltage(dev);
498 if (max_uV >old_voltage){
499 vol_temp = old_voltage;
501 vol_temp += DCDC_VOL_STEP;
502 val = rk808_dcdc_select_min_voltage(dev,vol_temp,vol_temp,buck);
503 // printk("rk808_dcdc_set_voltage buck = %d vol_temp= %d old_voltage= %d min_uV =%d \n",buck,vol_temp,old_voltage,min_uV);
504 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
505 }while(vol_temp != max_uV);
508 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
509 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
512 val = rk808_dcdc_select_min_voltage(dev,min_uV,max_uV,buck);
513 ret = rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), BUCK_VOL_MASK, val);
517 printk("################WARNING:set voltage is error!voltage set is %d mv %d\n",min_uV,ret);
521 static int rk808_dcdc_set_sleep_voltage(struct regulator_dev *dev,
524 struct rk808 *rk808 = rdev_get_drvdata(dev);
525 int buck = rdev_get_id(dev) - RK808_DCDC1;
532 val = rk808_dcdc_select_min_voltage(dev,uV,uV,buck);
533 ret = rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), BUCK_VOL_MASK, val);
537 static unsigned int rk808_dcdc_get_mode(struct regulator_dev *dev)
539 struct rk808 *rk808 = rdev_get_drvdata(dev);
540 int buck = rdev_get_id(dev) - RK808_DCDC1;
543 val = rk808_reg_read(rk808, rk808_BUCK_SET_VOL_REG(buck));
549 return REGULATOR_MODE_FAST;
551 return REGULATOR_MODE_NORMAL;
554 static int rk808_dcdc_set_mode(struct regulator_dev *dev, unsigned int mode)
556 struct rk808 *rk808 = rdev_get_drvdata(dev);
557 int buck = rdev_get_id(dev) - RK808_DCDC1;
562 case REGULATOR_MODE_FAST:
563 return rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), mask, mask);
564 case REGULATOR_MODE_NORMAL:
565 return rk808_set_bits(rk808, rk808_BUCK_SET_VOL_REG(buck), mask, 0);
567 printk("error:pmu_rk808 only powersave and pwm mode\n");
572 static int rk808_dcdc_set_suspend_mode(struct regulator_dev *dev, unsigned int mode)
574 struct rk808 *rk808 = rdev_get_drvdata(dev);
575 int buck = rdev_get_id(dev) - RK808_DCDC1;
580 case REGULATOR_MODE_FAST:
581 return rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), mask, mask);
582 case REGULATOR_MODE_NORMAL:
583 return rk808_set_bits(rk808, (rk808_BUCK_SET_VOL_REG(buck) + 0x01), mask, 0);
585 printk("error:pmu_rk808 only powersave and pwm mode\n");
590 static int rk808_dcdc_set_voltage_time_sel(struct regulator_dev *dev, unsigned int old_selector,
591 unsigned int new_selector)
593 int old_volt, new_volt;
595 old_volt = rk808_dcdc_list_voltage(dev, old_selector);
599 new_volt = rk808_dcdc_list_voltage(dev, new_selector);
603 return DIV_ROUND_UP(abs(old_volt - new_volt)*2, 2500);
606 static struct regulator_ops rk808_dcdc_ops = {
607 .set_voltage = rk808_dcdc_set_voltage,
608 .get_voltage = rk808_dcdc_get_voltage,
609 .list_voltage= rk808_dcdc_list_voltage,
610 .is_enabled = rk808_dcdc_is_enabled,
611 .enable = rk808_dcdc_enable,
612 .disable = rk808_dcdc_disable,
613 .set_suspend_enable =rk808_dcdc_suspend_enable,
614 .set_suspend_disable =rk808_dcdc_suspend_disable,
615 .get_mode = rk808_dcdc_get_mode,
616 .set_mode = rk808_dcdc_set_mode,
617 .set_suspend_mode = rk808_dcdc_set_suspend_mode,
618 .set_suspend_voltage = rk808_dcdc_set_sleep_voltage,
619 .set_voltage_time_sel = rk808_dcdc_set_voltage_time_sel,
621 static struct regulator_desc regulators[] = {
626 .ops = &rk808_dcdc_ops,
627 .n_voltages = ARRAY_SIZE(buck_voltage_map),
628 .type = REGULATOR_VOLTAGE,
629 .owner = THIS_MODULE,
634 .ops = &rk808_dcdc_ops,
635 .n_voltages = ARRAY_SIZE(buck_voltage_map),
636 .type = REGULATOR_VOLTAGE,
637 .owner = THIS_MODULE,
642 .ops = &rk808_dcdc_ops,
643 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
644 .type = REGULATOR_VOLTAGE,
645 .owner = THIS_MODULE,
650 .ops = &rk808_dcdc_ops,
651 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
652 .type = REGULATOR_VOLTAGE,
653 .owner = THIS_MODULE,
659 .ops = &rk808_ldo_ops,
660 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
661 .type = REGULATOR_VOLTAGE,
662 .owner = THIS_MODULE,
667 .ops = &rk808_ldo_ops,
668 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
669 .type = REGULATOR_VOLTAGE,
670 .owner = THIS_MODULE,
675 .ops = &rk808_ldo_ops,
676 .n_voltages = ARRAY_SIZE(ldo3_voltage_map),
677 .type = REGULATOR_VOLTAGE,
678 .owner = THIS_MODULE,
683 .ops = &rk808_ldo_ops,
684 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
685 .type = REGULATOR_VOLTAGE,
686 .owner = THIS_MODULE,
692 .ops = &rk808_ldo_ops,
693 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
694 .type = REGULATOR_VOLTAGE,
695 .owner = THIS_MODULE,
700 .ops = &rk808_ldo_ops,
701 .n_voltages = ARRAY_SIZE(ldo6_voltage_map),
702 .type = REGULATOR_VOLTAGE,
703 .owner = THIS_MODULE,
708 .ops = &rk808_ldo_ops,
709 .n_voltages = ARRAY_SIZE(ldo6_voltage_map),
710 .type = REGULATOR_VOLTAGE,
711 .owner = THIS_MODULE,
716 .ops = &rk808_ldo_ops,
717 .n_voltages = ARRAY_SIZE(ldo_voltage_map),
718 .type = REGULATOR_VOLTAGE,
719 .owner = THIS_MODULE,
724 .ops = &rk808_ldo_ops,
725 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
726 .type = REGULATOR_VOLTAGE,
727 .owner = THIS_MODULE,
732 .ops = &rk808_ldo_ops,
733 .n_voltages = ARRAY_SIZE(buck4_voltage_map),
734 .type = REGULATOR_VOLTAGE,
735 .owner = THIS_MODULE,
743 int rk808_i2c_read(struct rk808 *rk808, char reg, int count,u8 *dest)
745 struct i2c_client *i2c = rk808->i2c;
747 struct i2c_adapter *adap;
748 struct i2c_msg msgs[2];
758 msgs[0].addr = i2c->addr;
760 msgs[0].flags = i2c->flags;
762 msgs[0].scl_rate = 100*1000;
764 msgs[1].buf = (u8 *)dest;
765 msgs[1].addr = i2c->addr;
766 msgs[1].flags = i2c->flags |I2C_M_RD;
768 msgs[1].scl_rate = 100*1000;
770 ret = i2c_transfer(adap, msgs, 2);
772 DBG("***run in %s %x % x\n",__FUNCTION__,i2c->addr,*(msgs[1].buf));
776 int rk808_i2c_write(struct rk808 *rk808, char reg, int count, const u8 src)
779 struct i2c_client *i2c = rk808->i2c;
780 struct i2c_adapter *adap;
793 msg.addr = i2c->addr;
794 msg.buf = &tx_buf[0];
796 msg.flags = i2c->flags;
797 msg.scl_rate = 100*1000;
799 ret = i2c_transfer(adap, &msg, 1);
803 int rk808_reg_read(struct rk808 *rk808, u8 reg)
808 mutex_lock(&rk808->io_lock);
810 ret = rk808_i2c_read(rk808, reg, 1, &val);
811 DBG("reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
815 mutex_unlock(&rk808->io_lock);
819 EXPORT_SYMBOL_GPL(rk808_reg_read);
821 int rk808_reg_write(struct rk808 *rk808, u8 reg, u8 val)
825 mutex_lock(&rk808->io_lock);
827 err = rk808_i2c_write(rk808, reg, 1,val);
829 dev_err(rk808->dev, "Write for reg 0x%x failed\n", reg);
831 mutex_unlock(&rk808->io_lock);
834 EXPORT_SYMBOL_GPL(rk808_reg_write);
836 int rk808_set_bits(struct rk808 *rk808, u8 reg, u8 mask, u8 val)
841 mutex_lock(&rk808->io_lock);
843 ret = rk808_i2c_read(rk808, reg, 1, &tmp);
844 DBG("1 reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)tmp&0xff);
847 tmp = (tmp & ~mask) | val;
848 ret = rk808_i2c_write(rk808, reg, 1, tmp);
849 DBG("reg write 0x%02x -> 0x%02x\n", (int)reg, (unsigned)val&0xff);
853 ret = rk808_i2c_read(rk808, reg, 1, &tmp);
856 DBG("2 reg read 0x%02x -> 0x%02x\n", (int)reg, (unsigned)tmp&0xff);
857 mutex_unlock(&rk808->io_lock);
861 EXPORT_SYMBOL_GPL(rk808_set_bits);
863 int rk808_clear_bits(struct rk808 *rk808, u8 reg, u8 mask)
868 mutex_lock(&rk808->io_lock);
869 err = rk808_i2c_read(rk808, reg, 1, &data);
871 dev_err(rk808->dev, "read from reg %x failed\n", reg);
876 err = rk808_i2c_write(rk808, reg, 1, data);
878 dev_err(rk808->dev, "write to reg %x failed\n", reg);
881 mutex_unlock(&rk808->io_lock);
884 EXPORT_SYMBOL_GPL(rk808_clear_bits);
886 int rk808_bulk_read(struct rk808 *rk808, u8 reg,
891 #if defined(CONFIG_MFD_RK610)
892 int i; //Solve communication conflict when rk610 and rk808 on the same i2c
894 mutex_lock(&rk808->io_lock);
895 for(i=0; i<count; i++){
896 ret = rk808_reg_read(rk808, reg+i);
898 printk("%s: failed read reg 0x%0x, ret = %d\n", __FUNCTION__, reg+i, ret);
899 mutex_unlock(&rk808->io_lock);
902 buf[i] = ret & 0x000000FF;
905 mutex_unlock(&rk808->io_lock);
907 mutex_lock(&rk808->io_lock);
909 ret = rk808->read(rk808, reg, count, buf);
911 mutex_unlock(&rk808->io_lock);
916 EXPORT_SYMBOL_GPL(rk808_bulk_read);
918 int rk808_bulk_write(struct rk808 *rk808, u8 reg,
923 #if defined(CONFIG_MFD_RK610)
924 int i; // //Solve communication conflict when rk610 and 808 on the same i2c
926 mutex_lock(&rk808->io_lock);
927 for(i=0; i<count; i++){
928 ret = rk808_reg_write(rk808, reg+i, buf[i]);
930 printk("%s: failed write reg=0x%0x, val=0x%0x, ret = %d\n", __FUNCTION__, reg+i, buf[i], ret);
931 mutex_unlock(&rk808->io_lock);
935 mutex_unlock(&rk808->io_lock);
937 mutex_lock(&rk808->io_lock);
939 ret = rk808->write(rk808, reg, count, buf);
941 mutex_unlock(&rk808->io_lock);
946 EXPORT_SYMBOL_GPL(rk808_bulk_write);
950 static ssize_t rk808_test_store(struct kobject *kobj, struct kobj_attribute *attr,
951 const char *buf, size_t n)
957 const char *buftmp = buf;
958 struct rk808 *rk808 = g_rk808;
960 * W Addr(8Bit) regAddr(8Bit) data0(8Bit) data1(8Bit) data2(8Bit) data3(8Bit)
961 * :data can be less than 4 byte
963 * C gpio_name(poweron/powerhold/sleep/boot0/boot1) value(H/L)
965 regAddr = (u16)(getdata[0] & 0xff);
966 if (strncmp(buf, "start", 5) == 0) {
969 } else if (strncmp(buf, "stop", 4== 0) ){
972 sscanf(buftmp, "%c ", &cmd);
973 printk("------zhangqing: get cmd = %c\n", cmd);
977 sscanf(buftmp, "%c %x %x ", &cmd, &getdata[0],&getdata[1]);
978 regAddr = (u16)(getdata[0] & 0xff);
979 data = (u8)(getdata[1] & 0xff);
980 printk("get value = %x\n", data);
982 rk808_i2c_write(rk808, regAddr, 1, data);
983 rk808_i2c_read(rk808, regAddr, 1, &data);
984 printk("%x %x\n", getdata[1],data);
989 sscanf(buftmp, "%c %x ", &cmd, &getdata[0]);
990 printk("CMD : %c %x\n", cmd, getdata[0]);
992 regAddr = (u16)(getdata[0] & 0xff);
993 rk808_i2c_read(rk808, regAddr, 1, &data);
994 printk("%x %x\n", getdata[0],data);
999 printk("Unknown command\n");
1006 static ssize_t rk808_test_show(struct kobject *kobj, struct kobj_attribute *attr,
1011 return sprintf(s, "%s\n", buf);
1015 static struct kobject *rk808_kobj;
1016 struct rk808_attribute {
1017 struct attribute attr;
1018 ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
1020 ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
1021 const char *buf, size_t n);
1024 static struct rk808_attribute rk808_attrs[] = {
1025 /* node_name permision show_func store_func */
1026 __ATTR(rk808_test, S_IRUGO | S_IWUSR, rk808_test_show, rk808_test_store),
1030 extern void rk28_send_wakeup_key(void);
1031 static irqreturn_t rk808_vbat_lo_irq(int irq, void *data)
1033 printk("rk808 vbat low %s:irq=%d\n",__func__,irq);
1034 rk808_set_bits(g_rk808,0x4c,(0x1 << 1),(0x1 <<1));
1035 // rk28_send_wakeup_key();
1040 static struct of_device_id rk808_of_match[] = {
1041 { .compatible = "rockchip,rk808"},
1044 MODULE_DEVICE_TABLE(of, rk808_of_match);
1048 static struct of_regulator_match rk808_reg_matches[] = {
1049 { .name = "rk_dcdc1", .driver_data = (void *)0 },
1050 { .name = "rk_dcdc2", .driver_data = (void *)1 },
1051 { .name = "rk_dcdc3", .driver_data = (void *)2 },
1052 { .name = "rk_dcdc4", .driver_data = (void *)3 },
1053 { .name = "rk_ldo1", .driver_data = (void *)4 },
1054 { .name = "rk_ldo2", .driver_data = (void *)5 },
1055 { .name = "rk_ldo3", .driver_data = (void *)6 },
1056 { .name = "rk_ldo4", .driver_data = (void *)7 },
1057 { .name = "rk_ldo5", .driver_data = (void *)8 },
1058 { .name = "rk_ldo6", .driver_data = (void *)9 },
1059 { .name = "rk_ldo7", .driver_data = (void *)10 },
1060 { .name = "rk_ldo8", .driver_data = (void *)11 },
1061 { .name = "rk_ldo9", .driver_data = (void *)12 },
1062 { .name = "rk_ldo10", .driver_data = (void *)13 },
1065 static struct rk808_board *rk808_parse_dt(struct rk808 *rk808)
1067 struct rk808_board *pdata;
1068 struct device_node *regs,*rk808_pmic_np;
1071 rk808_pmic_np = of_node_get(rk808->dev->of_node);
1072 if (!rk808_pmic_np) {
1073 printk("could not find pmic sub-node\n");
1077 regs = of_find_node_by_name(rk808_pmic_np, "regulators");
1081 count = of_regulator_match(rk808->dev, regs, rk808_reg_matches,
1082 rk808_NUM_REGULATORS);
1084 if ((count < 0) || (count > rk808_NUM_REGULATORS))
1087 pdata = devm_kzalloc(rk808->dev, sizeof(*pdata), GFP_KERNEL);
1091 for (i = 0; i < count; i++) {
1092 if (!rk808_reg_matches[i].init_data || !rk808_reg_matches[i].of_node)
1095 pdata->rk808_init_data[i] = rk808_reg_matches[i].init_data;
1096 pdata->of_node[i] = rk808_reg_matches[i].of_node;
1098 pdata->irq = rk808->chip_irq;
1099 pdata->irq_base = -1;
1101 pdata->irq_gpio = of_get_named_gpio(rk808_pmic_np,"gpios",0);
1102 if (!gpio_is_valid(pdata->irq_gpio)) {
1103 printk("invalid gpio: %d\n", pdata->irq_gpio);
1107 pdata->pmic_sleep_gpio = of_get_named_gpio(rk808_pmic_np,"gpios",1);
1108 if (!gpio_is_valid(pdata->pmic_sleep_gpio)) {
1109 printk("invalid gpio: %d\n", pdata->pmic_sleep_gpio);
1111 pdata->pmic_sleep = true;
1113 pdata->pm_off = of_property_read_bool(rk808_pmic_np,"rk808,system-power-controller");
1119 static struct rk808_board *rk808_parse_dt(struct i2c_client *i2c)
1124 static int rk808_shutdown(struct i2c_client *i2c)
1128 struct rk808 *rk808 = g_rk808;
1130 printk("%s\n",__func__);
1131 /***************get dc1\dc2 voltage *********************/
1133 reg = rk808_reg_read(rk808,rk808_BUCK_SET_VOL_REG(i));
1134 reg &= BUCK_VOL_MASK;
1135 val = 700000 + reg * 12500;
1136 printk("%s,line=%d dc[%d]= %d\n", __func__,__LINE__,(i+1),val);
1138 /*****************************************************/
1139 ret = rk808_set_bits(rk808, RK808_INT_STS_MSK_REG1,(0x3<<5),(0x3<<5)); //close rtc int when power off
1140 ret = rk808_clear_bits(rk808, RK808_RTC_INT_REG,(0x3<<2)); //close rtc int when power off
1144 EXPORT_SYMBOL_GPL(rk808_shutdown);
1146 static int rk808_device_shutdown(void)
1151 struct rk808 *rk808 = g_rk808;
1153 printk("%s\n",__func__);
1155 ret = rk808_i2c_read(rk808,RK808_DEVCTRL_REG,1,®);
1156 ret = rk808_i2c_write(rk808, RK808_DEVCTRL_REG, 1,(reg |(0x1 <<3)));
1158 printk("rk808 power off error!\n");
1163 EXPORT_SYMBOL_GPL(rk808_device_shutdown);
1165 __weak void rk808_device_suspend(void) {}
1166 __weak void rk808_device_resume(void) {}
1168 static int rk808_suspend(struct i2c_client *i2c, pm_message_t mesg)
1170 rk808_device_suspend();
1174 static int rk808_resume(struct i2c_client *i2c)
1176 rk808_device_resume();
1180 static int rk808_suspend(struct i2c_client *i2c, pm_message_t mesg)
1185 static int rk808_resume(struct i2c_client *i2c)
1191 static bool is_volatile_reg(struct device *dev, unsigned int reg)
1193 if ((reg >= RK808_DCDC_EN_REG) && (reg <= RK808_LDO8_SLP_VSEL_REG)) {
1199 static const struct regmap_config rk808_regmap_config = {
1202 .volatile_reg = is_volatile_reg,
1203 .max_register = rk808_NUM_REGULATORS - 1,
1204 .cache_type = REGCACHE_RBTREE,
1207 #ifdef CONFIG_HAS_EARLYSUSPEND
1208 __weak void rk808_early_suspend(struct early_suspend *h) {}
1209 __weak void rk808_late_resume(struct early_suspend *h) {}
1212 static int rk808_pre_init(struct rk808 *rk808)
1215 printk("%s,line=%d\n", __func__,__LINE__);
1216 /**********disable dcdc uv func****************/
1217 ret = rk808_reg_write(rk808,RK808_DCDC_UV_ACT_REG,0x10);
1219 printk(KERN_ERR "Unable to write RK808_DCDC_UV_ACT_REG reg\n");
1222 /**********************************/
1223 /***********set ILIM ************/
1224 val = rk808_reg_read(rk808,RK808_BUCK3_CONFIG_REG);
1225 val &= (~(0x7 <<0));
1227 ret = rk808_reg_write(rk808,RK808_BUCK3_CONFIG_REG,val);
1229 printk(KERN_ERR "Unable to write RK808_BUCK3_CONFIG_REG reg\n");
1233 val = rk808_reg_read(rk808,RK808_BUCK4_CONFIG_REG);
1234 val &= (~(0x7 <<0));
1236 ret = rk808_reg_write(rk808,RK808_BUCK4_CONFIG_REG,val);
1238 printk(KERN_ERR "Unable to write RK808_BUCK4_CONFIG_REG reg\n");
1242 val = rk808_reg_read(rk808,RK808_BOOST_CONFIG_REG);
1243 val &= (~(0x7 <<0));
1245 ret = rk808_reg_write(rk808,RK808_BOOST_CONFIG_REG,val);
1247 printk(KERN_ERR "Unable to write RK808_BOOST_CONFIG_REG reg\n");
1250 /*****************************************/
1251 /***********set buck OTP function************/
1252 ret = rk808_reg_write(rk808,0x6f,0x5a);
1254 printk(KERN_ERR "Unable to write 0x6f reg\n");
1258 ret = rk808_reg_write(rk808,0x91,0x80);
1260 printk(KERN_ERR "Unable to write 0x91 reg\n");
1264 ret = rk808_reg_write(rk808,0x92,0x55);
1266 printk(KERN_ERR "Unable to write 0x92 reg\n");
1269 /*****************************************/
1270 /***********set buck 12.5mv/us ************/
1271 val = rk808_reg_read(rk808,RK808_BUCK1_CONFIG_REG);
1272 val &= (~(0x3 <<3));
1274 ret = rk808_reg_write(rk808,RK808_BUCK1_CONFIG_REG,val);
1276 printk(KERN_ERR "Unable to write RK808_BUCK1_CONFIG_REG reg\n");
1280 val = rk808_reg_read(rk808,RK808_BUCK2_CONFIG_REG);
1281 val &= (~(0x3 <<3));
1283 ret = rk808_reg_write(rk808,RK808_BUCK2_CONFIG_REG,val);
1285 printk(KERN_ERR "Unable to write RK808_BUCK2_CONFIG_REG reg\n");
1288 /*****************************************/
1290 /*******enable switch and boost***********/
1291 val = rk808_reg_read(rk808,RK808_DCDC_EN_REG);
1292 val |= (0x3 << 5); //enable switch1/2
1293 val |= (0x1 << 4); //enable boost
1294 ret = rk808_reg_write(rk808,RK808_DCDC_EN_REG,val);
1296 printk(KERN_ERR "Unable to write RK808_DCDC_EN_REG reg\n");
1299 /****************************************/
1301 /****************set vbat low **********/
1302 val = rk808_reg_read(rk808,RK808_VB_MON_REG);
1303 val &=(~(VBAT_LOW_VOL_MASK | VBAT_LOW_ACT_MASK));
1304 val |= (RK808_VBAT_LOW_3V5 | EN_VBAT_LOW_IRQ);
1305 ret = rk808_reg_write(rk808,RK808_VB_MON_REG,val);
1307 printk(KERN_ERR "Unable to write RK818_VB_MON_REG reg\n");
1310 /**************************************/
1312 /**********mask int****************/
1313 val = rk808_reg_read(rk808,RK808_INT_STS_MSK_REG1);
1314 val |= (0x1<<0); //mask vout_lo_int
1315 ret = rk808_reg_write(rk808,RK808_INT_STS_MSK_REG1,val);
1317 printk(KERN_ERR "Unable to write RK808_INT_STS_MSK_REG1 reg\n");
1320 /**********************************/
1321 /**********enable clkout2****************/
1322 ret = rk808_reg_write(rk808,RK808_CLK32OUT_REG,0x01);
1324 printk(KERN_ERR "Unable to write RK808_CLK32OUT_REG reg\n");
1327 /**********************************/
1328 ret = rk808_clear_bits(rk808, RK808_INT_STS_MSK_REG1,(0x3<<5)); //open rtc int when power on
1329 ret = rk808_set_bits(rk808, RK808_RTC_INT_REG,(0x1<<3),(0x1<<3)); //open rtc int when power on
1334 static int rk808_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
1336 struct rk808 *rk808;
1337 struct rk808_board *pdev;
1338 const struct of_device_id *match;
1339 struct regulator_config config = { };
1340 struct regulator_dev *rk808_rdev;
1341 struct regulator_init_data *reg_data;
1342 const char *rail_name = NULL;
1343 int ret,vlow_irq,i=0;
1345 printk("%s,line=%d\n", __func__,__LINE__);
1347 if (i2c->dev.of_node) {
1348 match = of_match_device(rk808_of_match, &i2c->dev);
1350 dev_err(&i2c->dev,"Failed to find matching dt id\n");
1355 rk808 = devm_kzalloc(&i2c->dev,sizeof(struct rk808), GFP_KERNEL);
1356 if (rk808 == NULL) {
1361 rk808->dev = &i2c->dev;
1362 i2c_set_clientdata(i2c, rk808);
1363 // rk808->read = rk808_i2c_read;
1364 // rk808->write = rk808_i2c_write;
1366 rk808->regmap = devm_regmap_init_i2c(i2c, &rk808_regmap_config);
1367 if (IS_ERR(rk808->regmap)) {
1368 printk("regmap initialization failed\n");
1372 mutex_init(&rk808->io_lock);
1374 ret = rk808_reg_read(rk808,0x2f);
1375 if ((ret < 0) || (ret == 0xff)){
1376 printk("The device is not rk808 %d\n",ret);
1380 ret = rk808_pre_init(rk808);
1382 printk("The rk808_pre_init failed %d\n",ret);
1386 if (rk808->dev->of_node)
1387 pdev = rk808_parse_dt(rk808);
1389 /******************************set sleep vol & dcdc mode******************/
1391 rk808->pmic_sleep_gpio = pdev->pmic_sleep_gpio;
1392 if (rk808->pmic_sleep_gpio) {
1393 ret = gpio_request(rk808->pmic_sleep_gpio, "rk808_pmic_sleep");
1395 dev_err(rk808->dev,"Failed to request gpio %d with ret:""%d\n", rk808->pmic_sleep_gpio, ret);
1398 gpio_direction_output(rk808->pmic_sleep_gpio,0);
1399 ret = gpio_get_value(rk808->pmic_sleep_gpio);
1400 gpio_free(rk808->pmic_sleep_gpio);
1401 pr_info("%s: rk808_pmic_sleep=%x\n", __func__, ret);
1404 /**********************************************************/
1407 rk808->num_regulators = rk808_NUM_REGULATORS;
1408 rk808->rdev = kcalloc(rk808_NUM_REGULATORS,sizeof(struct regulator_dev *), GFP_KERNEL);
1412 /* Instantiate the regulators */
1413 for (i = 0; i < rk808_NUM_REGULATORS; i++) {
1414 reg_data = pdev->rk808_init_data[i];
1417 config.dev = rk808->dev;
1418 config.driver_data = rk808;
1419 config.regmap = rk808->regmap;
1420 if (rk808->dev->of_node)
1421 config.of_node = pdev->of_node[i];
1422 if (reg_data && reg_data->constraints.name)
1423 rail_name = reg_data->constraints.name;
1425 rail_name = regulators[i].name;
1426 reg_data->supply_regulator = rail_name;
1428 config.init_data =reg_data;
1430 rk808_rdev = regulator_register(®ulators[i],&config);
1431 if (IS_ERR(rk808_rdev)) {
1432 printk("failed to register %d regulator\n",i);
1435 rk808->rdev[i] = rk808_rdev;
1439 // rk808->wakeup = pdev->wakeup;
1440 rk808->irq_gpio = pdev->irq_gpio;
1441 ret = rk808_irq_init(rk808, rk808->irq_gpio, pdev);
1445 ret = mfd_add_devices(rk808->dev, -1,
1446 rk808s, ARRAY_SIZE(rk808s),
1449 /********************vbat low int**************/
1450 vlow_irq = irq_create_mapping(rk808->irq_domain, RK808_IRQ_VB_LO);
1451 ret = request_threaded_irq(vlow_irq, NULL, rk808_vbat_lo_irq,
1452 IRQF_TRIGGER_RISING, "rk808_vbatlow",
1455 dev_err(rk808->dev, "Failed to request periodic IRQ %d: %d\n",
1456 vlow_irq+ RK808_IRQ_VB_LO, ret);
1460 /*********************************************/
1463 if (pdev->pm_off && !pm_power_off) {
1464 pm_power_off = rk808_device_shutdown;
1467 #ifdef CONFIG_HAS_EARLYSUSPEND
1468 rk808->rk808_suspend.suspend = rk808_early_suspend,
1469 rk808->rk808_suspend.resume = rk808_late_resume,
1470 rk808->rk808_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1,
1471 register_early_suspend(&rk808->rk808_suspend);
1475 rk808_kobj = kobject_create_and_add("rk808", NULL);
1478 for (i = 0; i < ARRAY_SIZE(rk808_attrs); i++) {
1479 ret = sysfs_create_file(rk808_kobj, &rk808_attrs[i].attr);
1481 printk("create index %d error\n", i);
1490 mfd_remove_devices(rk808->dev);
1495 static int rk808_i2c_remove(struct i2c_client *i2c)
1497 struct rk808 *rk808 = i2c_get_clientdata(i2c);
1500 for (i = 0; i < rk808->num_regulators; i++)
1502 regulator_unregister(rk808->rdev[i]);
1504 i2c_set_clientdata(i2c, NULL);
1510 static const struct i2c_device_id rk808_i2c_id[] = {
1515 MODULE_DEVICE_TABLE(i2c, rk808_i2c_id);
1517 static struct i2c_driver rk808_i2c_driver = {
1520 .owner = THIS_MODULE,
1521 .of_match_table =of_match_ptr(rk808_of_match),
1523 .probe = rk808_i2c_probe,
1524 .remove = rk808_i2c_remove,
1525 .id_table = rk808_i2c_id,
1526 .shutdown = rk808_shutdown,
1528 .suspend = rk808_suspend,
1529 .resume = rk808_resume,
1533 static int __init rk808_module_init(void)
1536 ret = i2c_add_driver(&rk808_i2c_driver);
1538 pr_err("Failed to register I2C driver: %d\n", ret);
1541 //module_init(rk808_module_init);
1542 //subsys_initcall(rk808_module_init);
1543 //rootfs_initcall(rk808_module_init);
1544 subsys_initcall_sync(rk808_module_init);
1546 static void __exit rk808_module_exit(void)
1548 i2c_del_driver(&rk808_i2c_driver);
1550 module_exit(rk808_module_exit);
1552 MODULE_LICENSE("GPL");
1553 MODULE_AUTHOR("zhangqing <zhangqing@rock-chips.com>");
1554 MODULE_DESCRIPTION("rk808 PMIC driver");