]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
regulator: tps65086: Fix 25mV ranges for BUCK regulators
authorAndrew F. Davis <afd@ti.com>
Thu, 1 Dec 2016 16:44:16 +0000 (10:44 -0600)
committerMark Brown <broonie@kernel.org>
Thu, 1 Dec 2016 17:42:27 +0000 (17:42 +0000)
The BUCK regulators 3, 4, and 5 also have a 10mV step mode,
adjust the tables and logic to reflect the data-sheet for
these regulators.

fixes: d2a2e729a666 ("regulator: tps65086: Add regulator driver for the TPS65086 PMIC")
Signed-off-by: Andrew F. Davis <afd@ti.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Documentation/devicetree/bindings/mfd/tps65086.txt
drivers/regulator/tps65086-regulator.c

index d3705612a84655b59bfa235eb73a679e40de0c66..9cfa886fe99fc113a2c87ba2a7d953e86e3a7dfe 100644 (file)
@@ -23,7 +23,7 @@ Required properties:
                             defined below.
 
 Optional regulator properties:
- - ti,regulator-step-size-25mv : This is applicable for buck[1,2,6], set this
+ - ti,regulator-step-size-25mv : This is applicable for buck[1-6], set this
                                    if the regulator is factory set with a 25mv
                                    step voltage mapping.
  - ti,regulator-decay          : This is applicable for buck[1-6], set this if
index 33f389d583ef115a988a2f2e32c89b7b3add893e..caf174ffa316fa9965f51b2cf0642805da8b4747 100644 (file)
@@ -71,18 +71,17 @@ struct tps65086_regulator {
        unsigned int decay_mask;
 };
 
-static const struct regulator_linear_range tps65086_buck126_10mv_ranges[] = {
+static const struct regulator_linear_range tps65086_10mv_ranges[] = {
        REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
        REGULATOR_LINEAR_RANGE(410000, 0x1, 0x7F, 10000),
 };
 
 static const struct regulator_linear_range tps65086_buck126_25mv_ranges[] = {
-       REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
-       REGULATOR_LINEAR_RANGE(1000000, 0x1, 0x18, 0),
+       REGULATOR_LINEAR_RANGE(1000000, 0x0, 0x18, 0),
        REGULATOR_LINEAR_RANGE(1025000, 0x19, 0x7F, 25000),
 };
 
-static const struct regulator_linear_range tps65086_buck345_ranges[] = {
+static const struct regulator_linear_range tps65086_buck345_25mv_ranges[] = {
        REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
        REGULATOR_LINEAR_RANGE(425000, 0x1, 0x7F, 25000),
 };
@@ -125,27 +124,27 @@ static int tps65086_of_parse_cb(struct device_node *dev,
 static struct tps65086_regulator regulators[] = {
        TPS65086_REGULATOR("BUCK1", "buck1", BUCK1, 0x80, TPS65086_BUCK1CTRL,
                           BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(0),
-                          tps65086_buck126_10mv_ranges, TPS65086_BUCK1CTRL,
+                          tps65086_10mv_ranges, TPS65086_BUCK1CTRL,
                           BIT(0)),
        TPS65086_REGULATOR("BUCK2", "buck2", BUCK2, 0x80, TPS65086_BUCK2CTRL,
                           BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(1),
-                          tps65086_buck126_10mv_ranges, TPS65086_BUCK2CTRL,
+                          tps65086_10mv_ranges, TPS65086_BUCK2CTRL,
                           BIT(0)),
        TPS65086_REGULATOR("BUCK3", "buck3", BUCK3, 0x80, TPS65086_BUCK3VID,
                           BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(2),
-                          tps65086_buck345_ranges, TPS65086_BUCK3DECAY,
+                          tps65086_10mv_ranges, TPS65086_BUCK3DECAY,
                           BIT(0)),
        TPS65086_REGULATOR("BUCK4", "buck4", BUCK4, 0x80, TPS65086_BUCK4VID,
                           BUCK_VID_MASK, TPS65086_BUCK4CTRL, BIT(0),
-                          tps65086_buck345_ranges, TPS65086_BUCK4VID,
+                          tps65086_10mv_ranges, TPS65086_BUCK4VID,
                           BIT(0)),
        TPS65086_REGULATOR("BUCK5", "buck5", BUCK5, 0x80, TPS65086_BUCK5VID,
                           BUCK_VID_MASK, TPS65086_BUCK5CTRL, BIT(0),
-                          tps65086_buck345_ranges, TPS65086_BUCK5CTRL,
+                          tps65086_10mv_ranges, TPS65086_BUCK5CTRL,
                           BIT(0)),
        TPS65086_REGULATOR("BUCK6", "buck6", BUCK6, 0x80, TPS65086_BUCK6VID,
                           BUCK_VID_MASK, TPS65086_BUCK6CTRL, BIT(0),
-                          tps65086_buck126_10mv_ranges, TPS65086_BUCK6CTRL,
+                          tps65086_10mv_ranges, TPS65086_BUCK6CTRL,
                           BIT(0)),
        TPS65086_REGULATOR("LDOA1", "ldoa1", LDOA1, 0xF, TPS65086_LDOA1CTRL,
                           VDOA1_VID_MASK, TPS65086_LDOA1CTRL, BIT(0),
@@ -162,18 +161,6 @@ static struct tps65086_regulator regulators[] = {
        TPS65086_SWITCH("VTT", "vtt", VTT, TPS65086_SWVTT_EN, BIT(4)),
 };
 
-static inline bool has_25mv_mode(int id)
-{
-       switch (id) {
-       case BUCK1:
-       case BUCK2:
-       case BUCK6:
-               return true;
-       default:
-               return false;
-       }
-}
-
 static int tps65086_of_parse_cb(struct device_node *dev,
                                const struct regulator_desc *desc,
                                struct regulator_config *config)
@@ -181,12 +168,27 @@ static int tps65086_of_parse_cb(struct device_node *dev,
        int ret;
 
        /* Check for 25mV step mode */
-       if (has_25mv_mode(desc->id) &&
-                       of_property_read_bool(config->of_node, "ti,regulator-step-size-25mv")) {
-               regulators[desc->id].desc.linear_ranges =
+       if (of_property_read_bool(config->of_node, "ti,regulator-step-size-25mv")) {
+               switch (desc->id) {
+               case BUCK1:
+               case BUCK2:
+               case BUCK6:
+                       regulators[desc->id].desc.linear_ranges =
                                tps65086_buck126_25mv_ranges;
-               regulators[desc->id].desc.n_linear_ranges =
+                       regulators[desc->id].desc.n_linear_ranges =
                                ARRAY_SIZE(tps65086_buck126_25mv_ranges);
+                       break;
+               case BUCK3:
+               case BUCK4:
+               case BUCK5:
+                       regulators[desc->id].desc.linear_ranges =
+                               tps65086_buck345_25mv_ranges;
+                       regulators[desc->id].desc.n_linear_ranges =
+                               ARRAY_SIZE(tps65086_buck345_25mv_ranges);
+                       break;
+               default:
+                       dev_warn(config->dev, "25mV step mode only valid for BUCK regulators\n");
+               }
        }
 
        /* Check for decay mode */