diff options
-rw-r--r-- | drivers/regulator/Kconfig | 4 | ||||
-rw-r--r-- | drivers/regulator/rk808-regulator.c | 646 | ||||
-rw-r--r-- | include/linux/mfd/rk808.h | 3 |
3 files changed, 625 insertions, 28 deletions
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 6c37f0df9323..214a958ff3e5 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig | |||
@@ -762,11 +762,11 @@ config REGULATOR_RC5T583 | |||
762 | outputs which can be controlled by i2c communication. | 762 | outputs which can be controlled by i2c communication. |
763 | 763 | ||
764 | config REGULATOR_RK808 | 764 | config REGULATOR_RK808 |
765 | tristate "Rockchip RK805/RK808/RK818 Power regulators" | 765 | tristate "Rockchip RK805/RK808/RK809/RK817/RK818 Power regulators" |
766 | depends on MFD_RK808 | 766 | depends on MFD_RK808 |
767 | help | 767 | help |
768 | Select this option to enable the power regulator of ROCKCHIP | 768 | Select this option to enable the power regulator of ROCKCHIP |
769 | PMIC RK805,RK808 and RK818. | 769 | PMIC RK805,RK809&RK817,RK808 and RK818. |
770 | This driver supports the control of different power rails of device | 770 | This driver supports the control of different power rails of device |
771 | through regulator interface. The device supports multiple DCDC/LDO | 771 | through regulator interface. The device supports multiple DCDC/LDO |
772 | outputs which can be controlled by i2c communication. | 772 | outputs which can be controlled by i2c communication. |
diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c index 23713e16c286..e9b0bb996fc4 100644 --- a/drivers/regulator/rk808-regulator.c +++ b/drivers/regulator/rk808-regulator.c | |||
@@ -36,6 +36,12 @@ | |||
36 | #define RK808_BUCK4_VSEL_MASK 0xf | 36 | #define RK808_BUCK4_VSEL_MASK 0xf |
37 | #define RK808_LDO_VSEL_MASK 0x1f | 37 | #define RK808_LDO_VSEL_MASK 0x1f |
38 | 38 | ||
39 | #define RK809_BUCK5_VSEL_MASK 0x7 | ||
40 | |||
41 | #define RK817_LDO_VSEL_MASK 0x7f | ||
42 | #define RK817_BOOST_VSEL_MASK 0x7 | ||
43 | #define RK817_BUCK_VSEL_MASK 0x7f | ||
44 | |||
39 | #define RK818_BUCK_VSEL_MASK 0x3f | 45 | #define RK818_BUCK_VSEL_MASK 0x3f |
40 | #define RK818_BUCK4_VSEL_MASK 0x1f | 46 | #define RK818_BUCK4_VSEL_MASK 0x1f |
41 | #define RK818_LDO_VSEL_MASK 0x1f | 47 | #define RK818_LDO_VSEL_MASK 0x1f |
@@ -65,30 +71,36 @@ | |||
65 | /* max steps for increase voltage of Buck1/2, equal 100mv*/ | 71 | /* max steps for increase voltage of Buck1/2, equal 100mv*/ |
66 | #define MAX_STEPS_ONE_TIME 8 | 72 | #define MAX_STEPS_ONE_TIME 8 |
67 | 73 | ||
68 | #define RK805_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \ | 74 | #define ENABLE_MASK(id) (BIT(id) | BIT(4 + (id))) |
69 | _vmask, _ereg, _emask, _etime) \ | 75 | #define DISABLE_VAL(id) (BIT(4 + (id))) |
70 | [_id] = { \ | 76 | |
71 | .name = (_match), \ | 77 | #define RK817_BOOST_DESC(_id, _match, _supply, _min, _max, _step, _vreg,\ |
72 | .supply_name = (_supply), \ | 78 | _vmask, _ereg, _emask, _enval, _disval, _etime, m_drop) \ |
73 | .of_match = of_match_ptr(_match), \ | 79 | { \ |
74 | .regulators_node = of_match_ptr("regulators"), \ | 80 | .name = (_match), \ |
75 | .type = REGULATOR_VOLTAGE, \ | 81 | .supply_name = (_supply), \ |
76 | .id = (_id), \ | 82 | .of_match = of_match_ptr(_match), \ |
77 | .n_voltages = (((_max) - (_min)) / (_step) + 1), \ | 83 | .regulators_node = of_match_ptr("regulators"), \ |
78 | .owner = THIS_MODULE, \ | 84 | .type = REGULATOR_VOLTAGE, \ |
79 | .min_uV = (_min) * 1000, \ | 85 | .id = (_id), \ |
80 | .uV_step = (_step) * 1000, \ | 86 | .n_voltages = (((_max) - (_min)) / (_step) + 1), \ |
81 | .vsel_reg = (_vreg), \ | 87 | .owner = THIS_MODULE, \ |
82 | .vsel_mask = (_vmask), \ | 88 | .min_uV = (_min) * 1000, \ |
83 | .enable_reg = (_ereg), \ | 89 | .uV_step = (_step) * 1000, \ |
84 | .enable_mask = (_emask), \ | 90 | .vsel_reg = (_vreg), \ |
85 | .enable_time = (_etime), \ | 91 | .vsel_mask = (_vmask), \ |
86 | .ops = &rk805_reg_ops, \ | 92 | .enable_reg = (_ereg), \ |
93 | .enable_mask = (_emask), \ | ||
94 | .enable_val = (_enval), \ | ||
95 | .disable_val = (_disval), \ | ||
96 | .enable_time = (_etime), \ | ||
97 | .min_dropout_uV = (m_drop) * 1000, \ | ||
98 | .ops = &rk817_boost_ops, \ | ||
87 | } | 99 | } |
88 | 100 | ||
89 | #define RK8XX_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \ | 101 | #define RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg, \ |
90 | _vmask, _ereg, _emask, _etime) \ | 102 | _vmask, _ereg, _emask, _enval, _disval, _etime, _ops) \ |
91 | [_id] = { \ | 103 | { \ |
92 | .name = (_match), \ | 104 | .name = (_match), \ |
93 | .supply_name = (_supply), \ | 105 | .supply_name = (_supply), \ |
94 | .of_match = of_match_ptr(_match), \ | 106 | .of_match = of_match_ptr(_match), \ |
@@ -103,12 +115,30 @@ | |||
103 | .vsel_mask = (_vmask), \ | 115 | .vsel_mask = (_vmask), \ |
104 | .enable_reg = (_ereg), \ | 116 | .enable_reg = (_ereg), \ |
105 | .enable_mask = (_emask), \ | 117 | .enable_mask = (_emask), \ |
118 | .enable_val = (_enval), \ | ||
119 | .disable_val = (_disval), \ | ||
106 | .enable_time = (_etime), \ | 120 | .enable_time = (_etime), \ |
107 | .ops = &rk808_reg_ops, \ | 121 | .ops = _ops, \ |
108 | } | 122 | } |
109 | 123 | ||
110 | #define RK8XX_DESC_SWITCH(_id, _match, _supply, _ereg, _emask) \ | 124 | #define RK805_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \ |
111 | [_id] = { \ | 125 | _vmask, _ereg, _emask, _etime) \ |
126 | RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg, \ | ||
127 | _vmask, _ereg, _emask, 0, 0, _etime, &rk805_reg_ops) | ||
128 | |||
129 | #define RK8XX_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \ | ||
130 | _vmask, _ereg, _emask, _etime) \ | ||
131 | RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg, \ | ||
132 | _vmask, _ereg, _emask, 0, 0, _etime, &rk808_reg_ops) | ||
133 | |||
134 | #define RK817_DESC(_id, _match, _supply, _min, _max, _step, _vreg, \ | ||
135 | _vmask, _ereg, _emask, _disval, _etime) \ | ||
136 | RK8XX_DESC_COM(_id, _match, _supply, _min, _max, _step, _vreg, \ | ||
137 | _vmask, _ereg, _emask, _emask, _disval, _etime, &rk817_reg_ops) | ||
138 | |||
139 | #define RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask, \ | ||
140 | _enval, _disval, _ops) \ | ||
141 | { \ | ||
112 | .name = (_match), \ | 142 | .name = (_match), \ |
113 | .supply_name = (_supply), \ | 143 | .supply_name = (_supply), \ |
114 | .of_match = of_match_ptr(_match), \ | 144 | .of_match = of_match_ptr(_match), \ |
@@ -117,10 +147,20 @@ | |||
117 | .id = (_id), \ | 147 | .id = (_id), \ |
118 | .enable_reg = (_ereg), \ | 148 | .enable_reg = (_ereg), \ |
119 | .enable_mask = (_emask), \ | 149 | .enable_mask = (_emask), \ |
150 | .enable_val = (_enval), \ | ||
151 | .disable_val = (_disval), \ | ||
120 | .owner = THIS_MODULE, \ | 152 | .owner = THIS_MODULE, \ |
121 | .ops = &rk808_switch_ops \ | 153 | .ops = _ops \ |
122 | } | 154 | } |
123 | 155 | ||
156 | #define RK817_DESC_SWITCH(_id, _match, _supply, _ereg, _emask, \ | ||
157 | _disval) \ | ||
158 | RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask, \ | ||
159 | _emask, _disval, &rk817_switch_ops) | ||
160 | |||
161 | #define RK8XX_DESC_SWITCH(_id, _match, _supply, _ereg, _emask) \ | ||
162 | RKXX_DESC_SWITCH_COM(_id, _match, _supply, _ereg, _emask, \ | ||
163 | 0, 0, &rk808_switch_ops) | ||
124 | 164 | ||
125 | struct rk808_regulator_data { | 165 | struct rk808_regulator_data { |
126 | struct gpio_desc *dvs_gpio[2]; | 166 | struct gpio_desc *dvs_gpio[2]; |
@@ -138,6 +178,51 @@ static const struct regulator_linear_range rk808_ldo3_voltage_ranges[] = { | |||
138 | REGULATOR_LINEAR_RANGE(2500000, 15, 15, 0), | 178 | REGULATOR_LINEAR_RANGE(2500000, 15, 15, 0), |
139 | }; | 179 | }; |
140 | 180 | ||
181 | #define RK809_BUCK5_SEL_CNT (8) | ||
182 | |||
183 | static const struct regulator_linear_range rk809_buck5_voltage_ranges[] = { | ||
184 | REGULATOR_LINEAR_RANGE(1500000, 0, 0, 0), | ||
185 | REGULATOR_LINEAR_RANGE(1800000, 1, 3, 200000), | ||
186 | REGULATOR_LINEAR_RANGE(2800000, 4, 5, 200000), | ||
187 | REGULATOR_LINEAR_RANGE(3300000, 6, 7, 300000), | ||
188 | }; | ||
189 | |||
190 | #define RK817_BUCK1_MIN0 500000 | ||
191 | #define RK817_BUCK1_MAX0 1500000 | ||
192 | |||
193 | #define RK817_BUCK1_MIN1 1600000 | ||
194 | #define RK817_BUCK1_MAX1 2400000 | ||
195 | |||
196 | #define RK817_BUCK3_MAX1 3400000 | ||
197 | |||
198 | #define RK817_BUCK1_STP0 12500 | ||
199 | #define RK817_BUCK1_STP1 100000 | ||
200 | |||
201 | #define RK817_BUCK1_SEL0 ((RK817_BUCK1_MAX0 - RK817_BUCK1_MIN0) /\ | ||
202 | RK817_BUCK1_STP0) | ||
203 | #define RK817_BUCK1_SEL1 ((RK817_BUCK1_MAX1 - RK817_BUCK1_MIN1) /\ | ||
204 | RK817_BUCK1_STP1) | ||
205 | |||
206 | #define RK817_BUCK3_SEL1 ((RK817_BUCK3_MAX1 - RK817_BUCK1_MIN1) /\ | ||
207 | RK817_BUCK1_STP1) | ||
208 | |||
209 | #define RK817_BUCK1_SEL_CNT (RK817_BUCK1_SEL0 + RK817_BUCK1_SEL1 + 1) | ||
210 | #define RK817_BUCK3_SEL_CNT (RK817_BUCK1_SEL0 + RK817_BUCK3_SEL1 + 1) | ||
211 | |||
212 | static const struct regulator_linear_range rk817_buck1_voltage_ranges[] = { | ||
213 | REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN0, 0, | ||
214 | RK817_BUCK1_SEL0, RK817_BUCK1_STP0), | ||
215 | REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN1, RK817_BUCK1_SEL0 + 1, | ||
216 | RK817_BUCK1_SEL_CNT, RK817_BUCK1_STP1), | ||
217 | }; | ||
218 | |||
219 | static const struct regulator_linear_range rk817_buck3_voltage_ranges[] = { | ||
220 | REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN0, 0, | ||
221 | RK817_BUCK1_SEL0, RK817_BUCK1_STP0), | ||
222 | REGULATOR_LINEAR_RANGE(RK817_BUCK1_MIN1, RK817_BUCK1_SEL0 + 1, | ||
223 | RK817_BUCK3_SEL_CNT, RK817_BUCK1_STP1), | ||
224 | }; | ||
225 | |||
141 | static int rk808_buck1_2_get_voltage_sel_regmap(struct regulator_dev *rdev) | 226 | static int rk808_buck1_2_get_voltage_sel_regmap(struct regulator_dev *rdev) |
142 | { | 227 | { |
143 | struct rk808_regulator_data *pdata = rdev_get_drvdata(rdev); | 228 | struct rk808_regulator_data *pdata = rdev_get_drvdata(rdev); |
@@ -289,6 +374,36 @@ static int rk808_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) | |||
289 | RK808_RAMP_RATE_MASK, ramp_value); | 374 | RK808_RAMP_RATE_MASK, ramp_value); |
290 | } | 375 | } |
291 | 376 | ||
377 | /* | ||
378 | * RK817 RK809 | ||
379 | */ | ||
380 | static int rk817_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) | ||
381 | { | ||
382 | unsigned int ramp_value = RK817_RAMP_RATE_25MV_PER_US; | ||
383 | unsigned int reg = RK817_BUCK_CONFIG_REG(rdev_get_id(rdev)); | ||
384 | |||
385 | switch (ramp_delay) { | ||
386 | case 0 ... 3000: | ||
387 | ramp_value = RK817_RAMP_RATE_3MV_PER_US; | ||
388 | break; | ||
389 | case 3001 ... 6300: | ||
390 | ramp_value = RK817_RAMP_RATE_6_3MV_PER_US; | ||
391 | break; | ||
392 | case 6301 ... 12500: | ||
393 | ramp_value = RK817_RAMP_RATE_12_5MV_PER_US; | ||
394 | break; | ||
395 | case 12501 ... 25000: | ||
396 | break; | ||
397 | default: | ||
398 | dev_warn(&rdev->dev, | ||
399 | "%s ramp_delay: %d not supported, setting 10000\n", | ||
400 | rdev->desc->name, ramp_delay); | ||
401 | } | ||
402 | |||
403 | return regmap_update_bits(rdev->regmap, reg, | ||
404 | RK817_RAMP_RATE_MASK, ramp_value); | ||
405 | } | ||
406 | |||
292 | static int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv) | 407 | static int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv) |
293 | { | 408 | { |
294 | unsigned int reg; | 409 | unsigned int reg; |
@@ -304,6 +419,21 @@ static int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv) | |||
304 | sel); | 419 | sel); |
305 | } | 420 | } |
306 | 421 | ||
422 | static int rk817_set_suspend_voltage(struct regulator_dev *rdev, int uv) | ||
423 | { | ||
424 | unsigned int reg; | ||
425 | int sel = regulator_map_voltage_linear(rdev, uv, uv); | ||
426 | /* only ldo1~ldo9 */ | ||
427 | if (sel < 0) | ||
428 | return -EINVAL; | ||
429 | |||
430 | reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET; | ||
431 | |||
432 | return regmap_update_bits(rdev->regmap, reg, | ||
433 | rdev->desc->vsel_mask, | ||
434 | sel); | ||
435 | } | ||
436 | |||
307 | static int rk808_set_suspend_voltage_range(struct regulator_dev *rdev, int uv) | 437 | static int rk808_set_suspend_voltage_range(struct regulator_dev *rdev, int uv) |
308 | { | 438 | { |
309 | unsigned int reg; | 439 | unsigned int reg; |
@@ -363,6 +493,131 @@ static int rk808_set_suspend_disable(struct regulator_dev *rdev) | |||
363 | rdev->desc->enable_mask); | 493 | rdev->desc->enable_mask); |
364 | } | 494 | } |
365 | 495 | ||
496 | static int rk817_set_suspend_enable_ctrl(struct regulator_dev *rdev, | ||
497 | unsigned int en) | ||
498 | { | ||
499 | unsigned int reg; | ||
500 | int id = rdev_get_id(rdev); | ||
501 | unsigned int id_slp, msk, val; | ||
502 | |||
503 | if (id >= RK817_ID_DCDC1 && id <= RK817_ID_DCDC4) | ||
504 | id_slp = id; | ||
505 | else if (id >= RK817_ID_LDO1 && id <= RK817_ID_LDO8) | ||
506 | id_slp = 8 + (id - RK817_ID_LDO1); | ||
507 | else if (id >= RK817_ID_LDO9 && id <= RK809_ID_SW2) | ||
508 | id_slp = 4 + (id - RK817_ID_LDO9); | ||
509 | else | ||
510 | return -EINVAL; | ||
511 | |||
512 | reg = RK817_POWER_SLP_EN_REG(id_slp / 8); | ||
513 | |||
514 | msk = BIT(id_slp % 8); | ||
515 | if (en) | ||
516 | val = msk; | ||
517 | else | ||
518 | val = 0; | ||
519 | |||
520 | return regmap_update_bits(rdev->regmap, reg, msk, val); | ||
521 | } | ||
522 | |||
523 | static int rk817_set_suspend_enable(struct regulator_dev *rdev) | ||
524 | { | ||
525 | return rk817_set_suspend_enable_ctrl(rdev, 1); | ||
526 | } | ||
527 | |||
528 | static int rk817_set_suspend_disable(struct regulator_dev *rdev) | ||
529 | { | ||
530 | return rk817_set_suspend_enable_ctrl(rdev, 0); | ||
531 | } | ||
532 | |||
533 | static int rk8xx_set_suspend_mode(struct regulator_dev *rdev, unsigned int mode) | ||
534 | { | ||
535 | unsigned int reg; | ||
536 | |||
537 | reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET; | ||
538 | |||
539 | switch (mode) { | ||
540 | case REGULATOR_MODE_FAST: | ||
541 | return regmap_update_bits(rdev->regmap, reg, | ||
542 | PWM_MODE_MSK, FPWM_MODE); | ||
543 | case REGULATOR_MODE_NORMAL: | ||
544 | return regmap_update_bits(rdev->regmap, reg, | ||
545 | PWM_MODE_MSK, AUTO_PWM_MODE); | ||
546 | default: | ||
547 | dev_err(&rdev->dev, "do not support this mode\n"); | ||
548 | return -EINVAL; | ||
549 | } | ||
550 | |||
551 | return 0; | ||
552 | } | ||
553 | |||
554 | static int rk8xx_set_mode(struct regulator_dev *rdev, unsigned int mode) | ||
555 | { | ||
556 | switch (mode) { | ||
557 | case REGULATOR_MODE_FAST: | ||
558 | return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg, | ||
559 | PWM_MODE_MSK, FPWM_MODE); | ||
560 | case REGULATOR_MODE_NORMAL: | ||
561 | return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg, | ||
562 | PWM_MODE_MSK, AUTO_PWM_MODE); | ||
563 | default: | ||
564 | dev_err(&rdev->dev, "do not support this mode\n"); | ||
565 | return -EINVAL; | ||
566 | } | ||
567 | |||
568 | return 0; | ||
569 | } | ||
570 | |||
571 | static unsigned int rk8xx_get_mode(struct regulator_dev *rdev) | ||
572 | { | ||
573 | unsigned int val; | ||
574 | int err; | ||
575 | |||
576 | err = regmap_read(rdev->regmap, rdev->desc->vsel_reg, &val); | ||
577 | if (err) | ||
578 | return err; | ||
579 | |||
580 | if (val & FPWM_MODE) | ||
581 | return REGULATOR_MODE_FAST; | ||
582 | else | ||
583 | return REGULATOR_MODE_NORMAL; | ||
584 | } | ||
585 | |||
586 | static int rk8xx_is_enabled_wmsk_regmap(struct regulator_dev *rdev) | ||
587 | { | ||
588 | unsigned int val; | ||
589 | int ret; | ||
590 | |||
591 | ret = regmap_read(rdev->regmap, rdev->desc->enable_reg, &val); | ||
592 | if (ret != 0) | ||
593 | return ret; | ||
594 | |||
595 | /* add write mask bit */ | ||
596 | val |= (rdev->desc->enable_mask & 0xf0); | ||
597 | val &= rdev->desc->enable_mask; | ||
598 | |||
599 | if (rdev->desc->enable_is_inverted) { | ||
600 | if (rdev->desc->enable_val) | ||
601 | return val != rdev->desc->enable_val; | ||
602 | return (val == 0); | ||
603 | } | ||
604 | if (rdev->desc->enable_val) | ||
605 | return val == rdev->desc->enable_val; | ||
606 | return val != 0; | ||
607 | } | ||
608 | |||
609 | static unsigned int rk8xx_regulator_of_map_mode(unsigned int mode) | ||
610 | { | ||
611 | switch (mode) { | ||
612 | case 1: | ||
613 | return REGULATOR_MODE_FAST; | ||
614 | case 2: | ||
615 | return REGULATOR_MODE_NORMAL; | ||
616 | default: | ||
617 | return -EINVAL; | ||
618 | } | ||
619 | } | ||
620 | |||
366 | static const struct regulator_ops rk805_reg_ops = { | 621 | static const struct regulator_ops rk805_reg_ops = { |
367 | .list_voltage = regulator_list_voltage_linear, | 622 | .list_voltage = regulator_list_voltage_linear, |
368 | .map_voltage = regulator_map_voltage_linear, | 623 | .map_voltage = regulator_map_voltage_linear, |
@@ -439,6 +694,71 @@ static const struct regulator_linear_range rk805_buck_1_2_voltage_ranges[] = { | |||
439 | REGULATOR_LINEAR_RANGE(2300000, 63, 63, 0), | 694 | REGULATOR_LINEAR_RANGE(2300000, 63, 63, 0), |
440 | }; | 695 | }; |
441 | 696 | ||
697 | static struct regulator_ops rk809_buck5_ops_range = { | ||
698 | .list_voltage = regulator_list_voltage_linear_range, | ||
699 | .map_voltage = regulator_map_voltage_linear_range, | ||
700 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | ||
701 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | ||
702 | .set_voltage_time_sel = regulator_set_voltage_time_sel, | ||
703 | .enable = regulator_enable_regmap, | ||
704 | .disable = regulator_disable_regmap, | ||
705 | .is_enabled = rk8xx_is_enabled_wmsk_regmap, | ||
706 | .set_suspend_voltage = rk808_set_suspend_voltage_range, | ||
707 | .set_suspend_enable = rk817_set_suspend_enable, | ||
708 | .set_suspend_disable = rk817_set_suspend_disable, | ||
709 | }; | ||
710 | |||
711 | static struct regulator_ops rk817_reg_ops = { | ||
712 | .list_voltage = regulator_list_voltage_linear, | ||
713 | .map_voltage = regulator_map_voltage_linear, | ||
714 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | ||
715 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | ||
716 | .enable = regulator_enable_regmap, | ||
717 | .disable = regulator_disable_regmap, | ||
718 | .is_enabled = rk8xx_is_enabled_wmsk_regmap, | ||
719 | .set_suspend_voltage = rk817_set_suspend_voltage, | ||
720 | .set_suspend_enable = rk817_set_suspend_enable, | ||
721 | .set_suspend_disable = rk817_set_suspend_disable, | ||
722 | }; | ||
723 | |||
724 | static struct regulator_ops rk817_boost_ops = { | ||
725 | .list_voltage = regulator_list_voltage_linear, | ||
726 | .map_voltage = regulator_map_voltage_linear, | ||
727 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | ||
728 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | ||
729 | .enable = regulator_enable_regmap, | ||
730 | .disable = regulator_disable_regmap, | ||
731 | .is_enabled = rk8xx_is_enabled_wmsk_regmap, | ||
732 | .set_suspend_enable = rk817_set_suspend_enable, | ||
733 | .set_suspend_disable = rk817_set_suspend_disable, | ||
734 | }; | ||
735 | |||
736 | static struct regulator_ops rk817_buck_ops_range = { | ||
737 | .list_voltage = regulator_list_voltage_linear_range, | ||
738 | .map_voltage = regulator_map_voltage_linear_range, | ||
739 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | ||
740 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | ||
741 | .set_voltage_time_sel = regulator_set_voltage_time_sel, | ||
742 | .enable = regulator_enable_regmap, | ||
743 | .disable = regulator_disable_regmap, | ||
744 | .is_enabled = rk8xx_is_enabled_wmsk_regmap, | ||
745 | .set_mode = rk8xx_set_mode, | ||
746 | .get_mode = rk8xx_get_mode, | ||
747 | .set_suspend_mode = rk8xx_set_suspend_mode, | ||
748 | .set_ramp_delay = rk817_set_ramp_delay, | ||
749 | .set_suspend_voltage = rk808_set_suspend_voltage_range, | ||
750 | .set_suspend_enable = rk817_set_suspend_enable, | ||
751 | .set_suspend_disable = rk817_set_suspend_disable, | ||
752 | }; | ||
753 | |||
754 | static struct regulator_ops rk817_switch_ops = { | ||
755 | .enable = regulator_enable_regmap, | ||
756 | .disable = regulator_disable_regmap, | ||
757 | .is_enabled = rk8xx_is_enabled_wmsk_regmap, | ||
758 | .set_suspend_enable = rk817_set_suspend_enable, | ||
759 | .set_suspend_disable = rk817_set_suspend_disable, | ||
760 | }; | ||
761 | |||
442 | static const struct regulator_desc rk805_reg[] = { | 762 | static const struct regulator_desc rk805_reg[] = { |
443 | { | 763 | { |
444 | .name = "DCDC_REG1", | 764 | .name = "DCDC_REG1", |
@@ -595,6 +915,271 @@ static const struct regulator_desc rk808_reg[] = { | |||
595 | RK808_DCDC_EN_REG, BIT(6)), | 915 | RK808_DCDC_EN_REG, BIT(6)), |
596 | }; | 916 | }; |
597 | 917 | ||
918 | static const struct regulator_desc rk809_reg[] = { | ||
919 | { | ||
920 | .name = "DCDC_REG1", | ||
921 | .supply_name = "vcc1", | ||
922 | .of_match = of_match_ptr("DCDC_REG1"), | ||
923 | .regulators_node = of_match_ptr("regulators"), | ||
924 | .id = RK817_ID_DCDC1, | ||
925 | .ops = &rk817_buck_ops_range, | ||
926 | .type = REGULATOR_VOLTAGE, | ||
927 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
928 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
929 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
930 | .vsel_reg = RK817_BUCK1_ON_VSEL_REG, | ||
931 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
932 | .enable_reg = RK817_POWER_EN_REG(0), | ||
933 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC1), | ||
934 | .enable_val = ENABLE_MASK(RK817_ID_DCDC1), | ||
935 | .disable_val = DISABLE_VAL(RK817_ID_DCDC1), | ||
936 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
937 | .owner = THIS_MODULE, | ||
938 | }, { | ||
939 | .name = "DCDC_REG2", | ||
940 | .supply_name = "vcc2", | ||
941 | .of_match = of_match_ptr("DCDC_REG2"), | ||
942 | .regulators_node = of_match_ptr("regulators"), | ||
943 | .id = RK817_ID_DCDC2, | ||
944 | .ops = &rk817_buck_ops_range, | ||
945 | .type = REGULATOR_VOLTAGE, | ||
946 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
947 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
948 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
949 | .vsel_reg = RK817_BUCK2_ON_VSEL_REG, | ||
950 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
951 | .enable_reg = RK817_POWER_EN_REG(0), | ||
952 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC2), | ||
953 | .enable_val = ENABLE_MASK(RK817_ID_DCDC2), | ||
954 | .disable_val = DISABLE_VAL(RK817_ID_DCDC2), | ||
955 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
956 | .owner = THIS_MODULE, | ||
957 | }, { | ||
958 | .name = "DCDC_REG3", | ||
959 | .supply_name = "vcc3", | ||
960 | .of_match = of_match_ptr("DCDC_REG3"), | ||
961 | .regulators_node = of_match_ptr("regulators"), | ||
962 | .id = RK817_ID_DCDC3, | ||
963 | .ops = &rk817_buck_ops_range, | ||
964 | .type = REGULATOR_VOLTAGE, | ||
965 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
966 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
967 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
968 | .vsel_reg = RK817_BUCK3_ON_VSEL_REG, | ||
969 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
970 | .enable_reg = RK817_POWER_EN_REG(0), | ||
971 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC3), | ||
972 | .enable_val = ENABLE_MASK(RK817_ID_DCDC3), | ||
973 | .disable_val = DISABLE_VAL(RK817_ID_DCDC3), | ||
974 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
975 | .owner = THIS_MODULE, | ||
976 | }, { | ||
977 | .name = "DCDC_REG4", | ||
978 | .supply_name = "vcc4", | ||
979 | .of_match = of_match_ptr("DCDC_REG4"), | ||
980 | .regulators_node = of_match_ptr("regulators"), | ||
981 | .id = RK817_ID_DCDC4, | ||
982 | .ops = &rk817_buck_ops_range, | ||
983 | .type = REGULATOR_VOLTAGE, | ||
984 | .n_voltages = RK817_BUCK3_SEL_CNT + 1, | ||
985 | .linear_ranges = rk817_buck3_voltage_ranges, | ||
986 | .n_linear_ranges = ARRAY_SIZE(rk817_buck3_voltage_ranges), | ||
987 | .vsel_reg = RK817_BUCK4_ON_VSEL_REG, | ||
988 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
989 | .enable_reg = RK817_POWER_EN_REG(0), | ||
990 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC4), | ||
991 | .enable_val = ENABLE_MASK(RK817_ID_DCDC4), | ||
992 | .disable_val = DISABLE_VAL(RK817_ID_DCDC4), | ||
993 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
994 | .owner = THIS_MODULE, | ||
995 | }, | ||
996 | { | ||
997 | .name = "DCDC_REG5", | ||
998 | .supply_name = "vcc9", | ||
999 | .of_match = of_match_ptr("DCDC_REG5"), | ||
1000 | .regulators_node = of_match_ptr("regulators"), | ||
1001 | .id = RK809_ID_DCDC5, | ||
1002 | .ops = &rk809_buck5_ops_range, | ||
1003 | .type = REGULATOR_VOLTAGE, | ||
1004 | .n_voltages = RK809_BUCK5_SEL_CNT, | ||
1005 | .linear_ranges = rk809_buck5_voltage_ranges, | ||
1006 | .n_linear_ranges = ARRAY_SIZE(rk809_buck5_voltage_ranges), | ||
1007 | .vsel_reg = RK809_BUCK5_CONFIG(0), | ||
1008 | .vsel_mask = RK809_BUCK5_VSEL_MASK, | ||
1009 | .enable_reg = RK817_POWER_EN_REG(3), | ||
1010 | .enable_mask = ENABLE_MASK(1), | ||
1011 | .enable_val = ENABLE_MASK(1), | ||
1012 | .disable_val = DISABLE_VAL(1), | ||
1013 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
1014 | .owner = THIS_MODULE, | ||
1015 | }, | ||
1016 | RK817_DESC(RK817_ID_LDO1, "LDO_REG1", "vcc5", 600, 3400, 25, | ||
1017 | RK817_LDO_ON_VSEL_REG(0), RK817_LDO_VSEL_MASK, | ||
1018 | RK817_POWER_EN_REG(1), ENABLE_MASK(0), | ||
1019 | DISABLE_VAL(0), 400), | ||
1020 | RK817_DESC(RK817_ID_LDO2, "LDO_REG2", "vcc5", 600, 3400, 25, | ||
1021 | RK817_LDO_ON_VSEL_REG(1), RK817_LDO_VSEL_MASK, | ||
1022 | RK817_POWER_EN_REG(1), ENABLE_MASK(1), | ||
1023 | DISABLE_VAL(1), 400), | ||
1024 | RK817_DESC(RK817_ID_LDO3, "LDO_REG3", "vcc5", 600, 3400, 25, | ||
1025 | RK817_LDO_ON_VSEL_REG(2), RK817_LDO_VSEL_MASK, | ||
1026 | RK817_POWER_EN_REG(1), ENABLE_MASK(2), | ||
1027 | DISABLE_VAL(2), 400), | ||
1028 | RK817_DESC(RK817_ID_LDO4, "LDO_REG4", "vcc6", 600, 3400, 25, | ||
1029 | RK817_LDO_ON_VSEL_REG(3), RK817_LDO_VSEL_MASK, | ||
1030 | RK817_POWER_EN_REG(1), ENABLE_MASK(3), | ||
1031 | DISABLE_VAL(3), 400), | ||
1032 | RK817_DESC(RK817_ID_LDO5, "LDO_REG5", "vcc6", 600, 3400, 25, | ||
1033 | RK817_LDO_ON_VSEL_REG(4), RK817_LDO_VSEL_MASK, | ||
1034 | RK817_POWER_EN_REG(2), ENABLE_MASK(0), | ||
1035 | DISABLE_VAL(0), 400), | ||
1036 | RK817_DESC(RK817_ID_LDO6, "LDO_REG6", "vcc6", 600, 3400, 25, | ||
1037 | RK817_LDO_ON_VSEL_REG(5), RK817_LDO_VSEL_MASK, | ||
1038 | RK817_POWER_EN_REG(2), ENABLE_MASK(1), | ||
1039 | DISABLE_VAL(1), 400), | ||
1040 | RK817_DESC(RK817_ID_LDO7, "LDO_REG7", "vcc7", 600, 3400, 25, | ||
1041 | RK817_LDO_ON_VSEL_REG(6), RK817_LDO_VSEL_MASK, | ||
1042 | RK817_POWER_EN_REG(2), ENABLE_MASK(2), | ||
1043 | DISABLE_VAL(2), 400), | ||
1044 | RK817_DESC(RK817_ID_LDO8, "LDO_REG8", "vcc7", 600, 3400, 25, | ||
1045 | RK817_LDO_ON_VSEL_REG(7), RK817_LDO_VSEL_MASK, | ||
1046 | RK817_POWER_EN_REG(2), ENABLE_MASK(3), | ||
1047 | DISABLE_VAL(3), 400), | ||
1048 | RK817_DESC(RK817_ID_LDO9, "LDO_REG9", "vcc7", 600, 3400, 25, | ||
1049 | RK817_LDO_ON_VSEL_REG(8), RK817_LDO_VSEL_MASK, | ||
1050 | RK817_POWER_EN_REG(3), ENABLE_MASK(0), | ||
1051 | DISABLE_VAL(0), 400), | ||
1052 | RK817_DESC_SWITCH(RK809_ID_SW1, "SWITCH_REG1", "vcc9", | ||
1053 | RK817_POWER_EN_REG(3), ENABLE_MASK(2), | ||
1054 | DISABLE_VAL(2)), | ||
1055 | RK817_DESC_SWITCH(RK809_ID_SW2, "SWITCH_REG2", "vcc8", | ||
1056 | RK817_POWER_EN_REG(3), ENABLE_MASK(3), | ||
1057 | DISABLE_VAL(3)), | ||
1058 | }; | ||
1059 | |||
1060 | static const struct regulator_desc rk817_reg[] = { | ||
1061 | { | ||
1062 | .name = "DCDC_REG1", | ||
1063 | .supply_name = "vcc1", | ||
1064 | .of_match = of_match_ptr("DCDC_REG1"), | ||
1065 | .regulators_node = of_match_ptr("regulators"), | ||
1066 | .id = RK817_ID_DCDC1, | ||
1067 | .ops = &rk817_buck_ops_range, | ||
1068 | .type = REGULATOR_VOLTAGE, | ||
1069 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
1070 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
1071 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
1072 | .vsel_reg = RK817_BUCK1_ON_VSEL_REG, | ||
1073 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
1074 | .enable_reg = RK817_POWER_EN_REG(0), | ||
1075 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC1), | ||
1076 | .enable_val = ENABLE_MASK(RK817_ID_DCDC1), | ||
1077 | .disable_val = DISABLE_VAL(RK817_ID_DCDC1), | ||
1078 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
1079 | .owner = THIS_MODULE, | ||
1080 | }, { | ||
1081 | .name = "DCDC_REG2", | ||
1082 | .supply_name = "vcc2", | ||
1083 | .of_match = of_match_ptr("DCDC_REG2"), | ||
1084 | .regulators_node = of_match_ptr("regulators"), | ||
1085 | .id = RK817_ID_DCDC2, | ||
1086 | .ops = &rk817_buck_ops_range, | ||
1087 | .type = REGULATOR_VOLTAGE, | ||
1088 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
1089 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
1090 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
1091 | .vsel_reg = RK817_BUCK2_ON_VSEL_REG, | ||
1092 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
1093 | .enable_reg = RK817_POWER_EN_REG(0), | ||
1094 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC2), | ||
1095 | .enable_val = ENABLE_MASK(RK817_ID_DCDC2), | ||
1096 | .disable_val = DISABLE_VAL(RK817_ID_DCDC2), | ||
1097 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
1098 | .owner = THIS_MODULE, | ||
1099 | }, { | ||
1100 | .name = "DCDC_REG3", | ||
1101 | .supply_name = "vcc3", | ||
1102 | .of_match = of_match_ptr("DCDC_REG3"), | ||
1103 | .regulators_node = of_match_ptr("regulators"), | ||
1104 | .id = RK817_ID_DCDC3, | ||
1105 | .ops = &rk817_buck_ops_range, | ||
1106 | .type = REGULATOR_VOLTAGE, | ||
1107 | .n_voltages = RK817_BUCK1_SEL_CNT + 1, | ||
1108 | .linear_ranges = rk817_buck1_voltage_ranges, | ||
1109 | .n_linear_ranges = ARRAY_SIZE(rk817_buck1_voltage_ranges), | ||
1110 | .vsel_reg = RK817_BUCK3_ON_VSEL_REG, | ||
1111 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
1112 | .enable_reg = RK817_POWER_EN_REG(0), | ||
1113 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC3), | ||
1114 | .enable_val = ENABLE_MASK(RK817_ID_DCDC3), | ||
1115 | .disable_val = DISABLE_VAL(RK817_ID_DCDC3), | ||
1116 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
1117 | .owner = THIS_MODULE, | ||
1118 | }, { | ||
1119 | .name = "DCDC_REG4", | ||
1120 | .supply_name = "vcc4", | ||
1121 | .of_match = of_match_ptr("DCDC_REG4"), | ||
1122 | .regulators_node = of_match_ptr("regulators"), | ||
1123 | .id = RK817_ID_DCDC4, | ||
1124 | .ops = &rk817_buck_ops_range, | ||
1125 | .type = REGULATOR_VOLTAGE, | ||
1126 | .n_voltages = RK817_BUCK3_SEL_CNT + 1, | ||
1127 | .linear_ranges = rk817_buck3_voltage_ranges, | ||
1128 | .n_linear_ranges = ARRAY_SIZE(rk817_buck3_voltage_ranges), | ||
1129 | .vsel_reg = RK817_BUCK4_ON_VSEL_REG, | ||
1130 | .vsel_mask = RK817_BUCK_VSEL_MASK, | ||
1131 | .enable_reg = RK817_POWER_EN_REG(0), | ||
1132 | .enable_mask = ENABLE_MASK(RK817_ID_DCDC4), | ||
1133 | .enable_val = ENABLE_MASK(RK817_ID_DCDC4), | ||
1134 | .disable_val = DISABLE_VAL(RK817_ID_DCDC4), | ||
1135 | .of_map_mode = rk8xx_regulator_of_map_mode, | ||
1136 | .owner = THIS_MODULE, | ||
1137 | }, | ||
1138 | RK817_DESC(RK817_ID_LDO1, "LDO_REG1", "vcc5", 600, 3400, 25, | ||
1139 | RK817_LDO_ON_VSEL_REG(0), RK817_LDO_VSEL_MASK, | ||
1140 | RK817_POWER_EN_REG(1), ENABLE_MASK(0), | ||
1141 | DISABLE_VAL(0), 400), | ||
1142 | RK817_DESC(RK817_ID_LDO2, "LDO_REG2", "vcc5", 600, 3400, 25, | ||
1143 | RK817_LDO_ON_VSEL_REG(1), RK817_LDO_VSEL_MASK, | ||
1144 | RK817_POWER_EN_REG(1), ENABLE_MASK(1), | ||
1145 | DISABLE_VAL(1), 400), | ||
1146 | RK817_DESC(RK817_ID_LDO3, "LDO_REG3", "vcc5", 600, 3400, 25, | ||
1147 | RK817_LDO_ON_VSEL_REG(2), RK817_LDO_VSEL_MASK, | ||
1148 | RK817_POWER_EN_REG(1), ENABLE_MASK(2), | ||
1149 | DISABLE_VAL(2), 400), | ||
1150 | RK817_DESC(RK817_ID_LDO4, "LDO_REG4", "vcc6", 600, 3400, 25, | ||
1151 | RK817_LDO_ON_VSEL_REG(3), RK817_LDO_VSEL_MASK, | ||
1152 | RK817_POWER_EN_REG(1), ENABLE_MASK(3), | ||
1153 | DISABLE_VAL(3), 400), | ||
1154 | RK817_DESC(RK817_ID_LDO5, "LDO_REG5", "vcc6", 600, 3400, 25, | ||
1155 | RK817_LDO_ON_VSEL_REG(4), RK817_LDO_VSEL_MASK, | ||
1156 | RK817_POWER_EN_REG(2), ENABLE_MASK(0), | ||
1157 | DISABLE_VAL(0), 400), | ||
1158 | RK817_DESC(RK817_ID_LDO6, "LDO_REG6", "vcc6", 600, 3400, 25, | ||
1159 | RK817_LDO_ON_VSEL_REG(5), RK817_LDO_VSEL_MASK, | ||
1160 | RK817_POWER_EN_REG(2), ENABLE_MASK(1), | ||
1161 | DISABLE_VAL(1), 400), | ||
1162 | RK817_DESC(RK817_ID_LDO7, "LDO_REG7", "vcc7", 600, 3400, 25, | ||
1163 | RK817_LDO_ON_VSEL_REG(6), RK817_LDO_VSEL_MASK, | ||
1164 | RK817_POWER_EN_REG(2), ENABLE_MASK(2), | ||
1165 | DISABLE_VAL(2), 400), | ||
1166 | RK817_DESC(RK817_ID_LDO8, "LDO_REG8", "vcc7", 600, 3400, 25, | ||
1167 | RK817_LDO_ON_VSEL_REG(7), RK817_LDO_VSEL_MASK, | ||
1168 | RK817_POWER_EN_REG(2), ENABLE_MASK(3), | ||
1169 | DISABLE_VAL(3), 400), | ||
1170 | RK817_DESC(RK817_ID_LDO9, "LDO_REG9", "vcc7", 600, 3400, 25, | ||
1171 | RK817_LDO_ON_VSEL_REG(8), RK817_LDO_VSEL_MASK, | ||
1172 | RK817_POWER_EN_REG(3), ENABLE_MASK(0), | ||
1173 | DISABLE_VAL(0), 400), | ||
1174 | RK817_BOOST_DESC(RK817_ID_BOOST, "BOOST", "vcc8", 4700, 5400, 100, | ||
1175 | RK817_BOOST_OTG_CFG, RK817_BOOST_VSEL_MASK, | ||
1176 | RK817_POWER_EN_REG(3), ENABLE_MASK(1), ENABLE_MASK(1), | ||
1177 | DISABLE_VAL(1), 400, 3500 - 5400), | ||
1178 | RK817_DESC_SWITCH(RK817_ID_BOOST_OTG_SW, "OTG_SWITCH", "vcc9", | ||
1179 | RK817_POWER_EN_REG(3), ENABLE_MASK(2), | ||
1180 | DISABLE_VAL(2)), | ||
1181 | }; | ||
1182 | |||
598 | static const struct regulator_desc rk818_reg[] = { | 1183 | static const struct regulator_desc rk818_reg[] = { |
599 | { | 1184 | { |
600 | .name = "DCDC_REG1", | 1185 | .name = "DCDC_REG1", |
@@ -765,6 +1350,14 @@ static int rk808_regulator_probe(struct platform_device *pdev) | |||
765 | regulators = rk808_reg; | 1350 | regulators = rk808_reg; |
766 | nregulators = RK808_NUM_REGULATORS; | 1351 | nregulators = RK808_NUM_REGULATORS; |
767 | break; | 1352 | break; |
1353 | case RK809_ID: | ||
1354 | regulators = rk809_reg; | ||
1355 | nregulators = RK809_NUM_REGULATORS; | ||
1356 | break; | ||
1357 | case RK817_ID: | ||
1358 | regulators = rk817_reg; | ||
1359 | nregulators = RK817_NUM_REGULATORS; | ||
1360 | break; | ||
768 | case RK818_ID: | 1361 | case RK818_ID: |
769 | regulators = rk818_reg; | 1362 | regulators = rk818_reg; |
770 | nregulators = RK818_NUM_REGULATORS; | 1363 | nregulators = RK818_NUM_REGULATORS; |
@@ -803,6 +1396,7 @@ static struct platform_driver rk808_regulator_driver = { | |||
803 | module_platform_driver(rk808_regulator_driver); | 1396 | module_platform_driver(rk808_regulator_driver); |
804 | 1397 | ||
805 | MODULE_DESCRIPTION("regulator driver for the RK805/RK808/RK818 series PMICs"); | 1398 | MODULE_DESCRIPTION("regulator driver for the RK805/RK808/RK818 series PMICs"); |
1399 | MODULE_AUTHOR("Tony xie <tony.xie@rock-chips.com>"); | ||
806 | MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>"); | 1400 | MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>"); |
807 | MODULE_AUTHOR("Zhang Qing <zhangqing@rock-chips.com>"); | 1401 | MODULE_AUTHOR("Zhang Qing <zhangqing@rock-chips.com>"); |
808 | MODULE_AUTHOR("Wadim Egorov <w.egorov@phytec.de>"); | 1402 | MODULE_AUTHOR("Wadim Egorov <w.egorov@phytec.de>"); |
diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h index 0fd9eedf3c20..2a9cd01691b2 100644 --- a/include/linux/mfd/rk808.h +++ b/include/linux/mfd/rk808.h | |||
@@ -396,7 +396,10 @@ enum rk805_reg { | |||
396 | #define SHUTDOWN_FUN (0x2 << 2) | 396 | #define SHUTDOWN_FUN (0x2 << 2) |
397 | #define SLEEP_FUN (0x1 << 2) | 397 | #define SLEEP_FUN (0x1 << 2) |
398 | #define RK8XX_ID_MSK 0xfff0 | 398 | #define RK8XX_ID_MSK 0xfff0 |
399 | #define PWM_MODE_MSK BIT(7) | ||
399 | #define FPWM_MODE BIT(7) | 400 | #define FPWM_MODE BIT(7) |
401 | #define AUTO_PWM_MODE 0 | ||
402 | |||
400 | enum rk817_reg_id { | 403 | enum rk817_reg_id { |
401 | RK817_ID_DCDC1 = 0, | 404 | RK817_ID_DCDC1 = 0, |
402 | RK817_ID_DCDC2, | 405 | RK817_ID_DCDC2, |