aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/palmas-regulator.c30
-rw-r--r--include/linux/mfd/palmas.h9
2 files changed, 29 insertions, 10 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c
index d0c87856dd25..40ed92ba03f4 100644
--- a/drivers/regulator/palmas-regulator.c
+++ b/drivers/regulator/palmas-regulator.c
@@ -97,11 +97,16 @@ static const struct regs_info palmas_regs_info[] = {
97 .ctrl_addr = PALMAS_SMPS9_CTRL, 97 .ctrl_addr = PALMAS_SMPS9_CTRL,
98 }, 98 },
99 { 99 {
100 .name = "SMPS10", 100 .name = "SMPS10_OUT2",
101 .sname = "smps10-in", 101 .sname = "smps10-in",
102 .ctrl_addr = PALMAS_SMPS10_CTRL, 102 .ctrl_addr = PALMAS_SMPS10_CTRL,
103 }, 103 },
104 { 104 {
105 .name = "SMPS10_OUT1",
106 .sname = "smps10-out2",
107 .ctrl_addr = PALMAS_SMPS10_CTRL,
108 },
109 {
105 .name = "LDO1", 110 .name = "LDO1",
106 .sname = "ldo1-in", 111 .sname = "ldo1-in",
107 .vsel_addr = PALMAS_LDO1_VOLTAGE, 112 .vsel_addr = PALMAS_LDO1_VOLTAGE,
@@ -487,6 +492,8 @@ static struct regulator_ops palmas_ops_smps10 = {
487 .set_voltage_sel = regulator_set_voltage_sel_regmap, 492 .set_voltage_sel = regulator_set_voltage_sel_regmap,
488 .list_voltage = regulator_list_voltage_linear, 493 .list_voltage = regulator_list_voltage_linear,
489 .map_voltage = regulator_map_voltage_linear, 494 .map_voltage = regulator_map_voltage_linear,
495 .set_bypass = regulator_set_bypass_regmap,
496 .get_bypass = regulator_get_bypass_regmap,
490}; 497};
491 498
492static int palmas_is_enabled_ldo(struct regulator_dev *dev) 499static int palmas_is_enabled_ldo(struct regulator_dev *dev)
@@ -538,7 +545,8 @@ static int palmas_smps_init(struct palmas *palmas, int id,
538 return ret; 545 return ret;
539 546
540 switch (id) { 547 switch (id) {
541 case PALMAS_REG_SMPS10: 548 case PALMAS_REG_SMPS10_OUT1:
549 case PALMAS_REG_SMPS10_OUT2:
542 reg &= ~PALMAS_SMPS10_CTRL_MODE_SLEEP_MASK; 550 reg &= ~PALMAS_SMPS10_CTRL_MODE_SLEEP_MASK;
543 if (reg_init->mode_sleep) 551 if (reg_init->mode_sleep)
544 reg |= reg_init->mode_sleep << 552 reg |= reg_init->mode_sleep <<
@@ -681,7 +689,8 @@ static struct of_regulator_match palmas_matches[] = {
681 { .name = "smps7", }, 689 { .name = "smps7", },
682 { .name = "smps8", }, 690 { .name = "smps8", },
683 { .name = "smps9", }, 691 { .name = "smps9", },
684 { .name = "smps10", }, 692 { .name = "smps10_out2", },
693 { .name = "smps10_out1", },
685 { .name = "ldo1", }, 694 { .name = "ldo1", },
686 { .name = "ldo2", }, 695 { .name = "ldo2", },
687 { .name = "ldo3", }, 696 { .name = "ldo3", },
@@ -838,7 +847,8 @@ static int palmas_regulators_probe(struct platform_device *pdev)
838 continue; 847 continue;
839 ramp_delay_support = true; 848 ramp_delay_support = true;
840 break; 849 break;
841 case PALMAS_REG_SMPS10: 850 case PALMAS_REG_SMPS10_OUT1:
851 case PALMAS_REG_SMPS10_OUT2:
842 if (!PALMAS_PMIC_HAS(palmas, SMPS10_BOOST)) 852 if (!PALMAS_PMIC_HAS(palmas, SMPS10_BOOST))
843 continue; 853 continue;
844 } 854 }
@@ -872,7 +882,8 @@ static int palmas_regulators_probe(struct platform_device *pdev)
872 pmic->desc[id].id = id; 882 pmic->desc[id].id = id;
873 883
874 switch (id) { 884 switch (id) {
875 case PALMAS_REG_SMPS10: 885 case PALMAS_REG_SMPS10_OUT1:
886 case PALMAS_REG_SMPS10_OUT2:
876 pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES; 887 pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES;
877 pmic->desc[id].ops = &palmas_ops_smps10; 888 pmic->desc[id].ops = &palmas_ops_smps10;
878 pmic->desc[id].vsel_reg = 889 pmic->desc[id].vsel_reg =
@@ -882,7 +893,14 @@ static int palmas_regulators_probe(struct platform_device *pdev)
882 pmic->desc[id].enable_reg = 893 pmic->desc[id].enable_reg =
883 PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, 894 PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
884 PALMAS_SMPS10_CTRL); 895 PALMAS_SMPS10_CTRL);
885 pmic->desc[id].enable_mask = SMPS10_BOOST_EN; 896 if (id == PALMAS_REG_SMPS10_OUT1)
897 pmic->desc[id].enable_mask = SMPS10_SWITCH_EN;
898 else
899 pmic->desc[id].enable_mask = SMPS10_BOOST_EN;
900 pmic->desc[id].bypass_reg =
901 PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
902 PALMAS_SMPS10_CTRL);
903 pmic->desc[id].bypass_mask = SMPS10_BYPASS_EN;
886 pmic->desc[id].min_uV = 3750000; 904 pmic->desc[id].min_uV = 3750000;
887 pmic->desc[id].uV_step = 1250000; 905 pmic->desc[id].uV_step = 1250000;
888 break; 906 break;
diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h
index 1a8dd7afe084..c06d78af3342 100644
--- a/include/linux/mfd/palmas.h
+++ b/include/linux/mfd/palmas.h
@@ -160,7 +160,8 @@ enum palmas_regulators {
160 PALMAS_REG_SMPS7, 160 PALMAS_REG_SMPS7,
161 PALMAS_REG_SMPS8, 161 PALMAS_REG_SMPS8,
162 PALMAS_REG_SMPS9, 162 PALMAS_REG_SMPS9,
163 PALMAS_REG_SMPS10, 163 PALMAS_REG_SMPS10_OUT2,
164 PALMAS_REG_SMPS10_OUT1,
164 /* LDO regulators */ 165 /* LDO regulators */
165 PALMAS_REG_LDO1, 166 PALMAS_REG_LDO1,
166 PALMAS_REG_LDO2, 167 PALMAS_REG_LDO2,
@@ -355,9 +356,9 @@ struct palmas_pmic {
355 int smps123; 356 int smps123;
356 int smps457; 357 int smps457;
357 358
358 int range[PALMAS_REG_SMPS10]; 359 int range[PALMAS_REG_SMPS10_OUT1];
359 unsigned int ramp_delay[PALMAS_REG_SMPS10]; 360 unsigned int ramp_delay[PALMAS_REG_SMPS10_OUT1];
360 unsigned int current_reg_mode[PALMAS_REG_SMPS10]; 361 unsigned int current_reg_mode[PALMAS_REG_SMPS10_OUT1];
361}; 362};
362 363
363struct palmas_resource { 364struct palmas_resource {