From: Rajendra Nayak <rna...@ti.com>

TWL6030 has a formula to be used to calculate the vsel values
to be programmed in the VREG_VOLTAGE registers.

Voltage(in mV) = 1000mv + 100mv * (vsel - 1)

Ex: if vsel = 0x9, mV = 1000 + 100 * (9 -1) = 1800mV.

Signed-off-by: Rajendra Nayak <rna...@ti.com>
Cc: Liam Girdwood <l...@slimlogic.co.uk>
Cc: Samuel Ortiz <sa...@linux.intel.com>
---
 drivers/regulator/twl-regulator.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/regulator/twl-regulator.c 
b/drivers/regulator/twl-regulator.c
index 7e67485..a5ca794 100644
--- a/drivers/regulator/twl-regulator.c
+++ b/drivers/regulator/twl-regulator.c
@@ -367,11 +367,17 @@ twlldo_set_voltage(struct regulator_dev *rdev, int 
min_uV, int max_uV)
                /* REVISIT for VAUX2, first match may not be best/lowest */
 
                /* use the first in-range value */
-               if (min_uV <= uV && uV <= max_uV)
+               if (min_uV <= uV && uV <= max_uV) {
+                       if (twl_class_is_6030())
+                               /*
+                                * Use the below formula to calculate vsel
+                                * mV = 1000mv + 100mv * (vsel - 1)
+                                */
+                               vsel = (mV - 1000)/100 + 1;
                        return twlreg_write(info, TWL_MODULE_PM_RECEIVER,
                                                        VREG_VOLTAGE, vsel);
+               }
        }
-
        return -EDOM;
 }
 
@@ -384,8 +390,17 @@ static int twlldo_get_voltage(struct regulator_dev *rdev)
        if (vsel < 0)
                return vsel;
 
-       vsel &= info->table_len - 1;
-       return LDO_MV(info->table[vsel]) * 1000;
+       if (twl_class_is_4030()) {
+               vsel &= info->table_len - 1;
+               return LDO_MV(info->table[vsel]) * 1000;
+       } else if (twl_class_is_6030()) {
+               /*
+                * Use the below formula to calculate vsel
+                * mV = 1000mv + 100mv * (vsel - 1)
+                */
+               return (1000 + (100 * (vsel - 1))) * 1000;
+       }
+       return -EDOM;
 }
 
 static struct regulator_ops twlldo_ops = {
-- 
1.6.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to