]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
regulator: tps6591x: delay for LDOs to stabilize
authorBharat Nihalani <bnihalani@nvidia.com>
Mon, 9 May 2011 14:34:23 +0000 (20:04 +0530)
committerDan Willemsen <dwillemsen@nvidia.com>
Sat, 14 Sep 2013 08:09:16 +0000 (01:09 -0700)
after enabling any LDO/SM, there is a specific amount of delay
required before the regulator becomes stable.

Original-Change-Id: I7cce3d8aad8859af0cbda7e114850fc95fe34eea
Reviewed-on: http://git-master/r/30862
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-by: Pritesh Raithatha <praithatha@nvidia.com>
Tested-by: Pritesh Raithatha <praithatha@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Reviewed-by: Mayuresh Kulkarni <mkulkarni@nvidia.com>
Rebase-Id: R5b213829fa0489c2d147df738d449863e4bf0d95

drivers/regulator/tps6591x-regulator.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index 40ac382..83047e6
@@ -82,6 +82,8 @@ struct tps6591x_regulator {
        struct tps6591x_register_info en1_reg;
 
        int *voltages;
+
+       int delay; /* delay in us for regulator to stabilize */
 };
 
 static inline struct device *to_tps6591x_dev(struct regulator_dev *rdev)
@@ -89,6 +91,13 @@ static inline struct device *to_tps6591x_dev(struct regulator_dev *rdev)
        return rdev_get_dev(rdev)->parent->parent;
 }
 
+static int tps6591x_regulator_enable_time(struct regulator_dev *rdev)
+{
+       struct tps6591x_regulator *ri = rdev_get_drvdata(rdev);
+
+       return ri->delay;
+}
+
 static int __tps6591x_ext_control_set(struct device *parent,
                                      struct tps6591x_regulator *ri,
                                      enum tps6591x_ext_control ectrl)
@@ -431,6 +440,7 @@ static struct regulator_ops tps6591x_regulator_vio_ops = {
        .get_voltage = tps6591x_vio_get_voltage,
        .set_voltage = tps6591x_vio_set_voltage,
 
+       .enable_time = tps6591x_regulator_enable_time,
        .is_enabled = tps6591x_regulator_is_enabled,
        .enable = tps6591x_regulator_enable,
        .disable = tps6591x_regulator_disable,
@@ -441,6 +451,7 @@ static struct regulator_ops tps6591x_regulator_ldo1_ops = {
        .get_voltage = tps6591x_ldo1_get_voltage,
        .set_voltage = tps6591x_ldo1_set_voltage,
 
+       .enable_time = tps6591x_regulator_enable_time,
        .is_enabled = tps6591x_regulator_is_enabled,
        .enable = tps6591x_regulator_enable,
        .disable = tps6591x_regulator_disable,
@@ -451,6 +462,7 @@ static struct regulator_ops tps6591x_regulator_ldo3_ops = {
        .get_voltage = tps6591x_ldo3_get_voltage,
        .set_voltage = tps6591x_ldo3_set_voltage,
 
+       .enable_time = tps6591x_regulator_enable_time,
        .is_enabled = tps6591x_regulator_is_enabled,
        .enable = tps6591x_regulator_enable,
        .disable = tps6591x_regulator_disable,
@@ -461,6 +473,7 @@ static struct regulator_ops tps6591x_regulator_vdd_ops = {
        .get_voltage = tps6591x_vdd_get_voltage,
        .set_voltage = tps6591x_vdd_set_voltage,
 
+       .enable_time = tps6591x_regulator_enable_time,
        .is_enabled = tps6591x_regulator_is_enabled,
        .enable = tps6591x_regulator_enable,
        .disable = tps6591x_regulator_disable,
@@ -505,90 +518,91 @@ static int tps6591x_vddctrl_voltages[] = {
        1287, 1300, 1312, 1325, 1337, 1350, 1362, 1375, 1387, 1400,
 };
 
-#define TPS6591X_REGULATOR(_id, vdata, _ops, s_addr, s_nbits, s_shift, \
-                       s_type, op_addr, op_nbits, op_shift, sr_addr,   \
-                       sr_nbits, sr_shift, en1_addr, en1_shift)        \
-       .desc   = {                                                     \
-               .name   = tps6591x_rails(_id),                          \
-               .ops    = &tps6591x_regulator_##_ops,                   \
-               .type   = REGULATOR_VOLTAGE,                            \
-               .id     = TPS6591X_ID_##_id,                            \
-               .n_voltages = ARRAY_SIZE(tps6591x_##vdata##_voltages),  \
-               .owner  = THIS_MODULE,                                  \
-       },                                                              \
-       .supply_type    = supply_type_##s_type,                         \
-       .supply_reg     = {                                             \
-               .addr   = TPS6591X_##s_addr##_ADD,                      \
-               .nbits  = s_nbits,                                      \
-               .shift_bits = s_shift,                                  \
-       },                                                              \
-       .op_reg         = {                                             \
-               .addr   = TPS6591X_##op_addr##_ADD,                     \
-               .nbits  = op_nbits,                                     \
-               .shift_bits = op_shift,                                 \
-       },                                                              \
-       .sr_reg         = {                                             \
-               .addr   = TPS6591X_##sr_addr##_ADD,                     \
-               .nbits  = sr_nbits,                                     \
-               .shift_bits = sr_shift,                                 \
-       },                                                              \
-       .en1_reg        = {                                             \
-               .addr   = TPS6591X_##en1_addr##_ADD,                    \
-               .nbits  = 1,                                            \
-               .shift_bits = en1_shift,                                \
-       },                                                              \
-       .voltages       = tps6591x_##vdata##_voltages,
+#define TPS6591X_REGULATOR(_id, vdata, _ops, s_addr, s_nbits, s_shift,         \
+                       s_type, op_addr, op_nbits, op_shift, sr_addr,           \
+                       sr_nbits, sr_shift, en1_addr, en1_shift, en_time)       \
+       .desc   = {                                                             \
+               .name   = tps6591x_rails(_id),                                  \
+               .ops    = &tps6591x_regulator_##_ops,                           \
+               .type   = REGULATOR_VOLTAGE,                                    \
+               .id     = TPS6591X_ID_##_id,                                    \
+               .n_voltages = ARRAY_SIZE(tps6591x_##vdata##_voltages),          \
+               .owner  = THIS_MODULE,                                          \
+       },                                                                      \
+       .supply_type    = supply_type_##s_type,                                 \
+       .supply_reg     = {                                                     \
+               .addr   = TPS6591X_##s_addr##_ADD,                              \
+               .nbits  = s_nbits,                                              \
+               .shift_bits = s_shift,                                          \
+       },                                                                      \
+       .op_reg         = {                                                     \
+               .addr   = TPS6591X_##op_addr##_ADD,                             \
+               .nbits  = op_nbits,                                             \
+               .shift_bits = op_shift,                                         \
+       },                                                                      \
+       .sr_reg         = {                                                     \
+               .addr   = TPS6591X_##sr_addr##_ADD,                             \
+               .nbits  = sr_nbits,                                             \
+               .shift_bits = sr_shift,                                         \
+       },                                                                      \
+       .en1_reg        = {                                                     \
+               .addr   = TPS6591X_##en1_addr##_ADD,                            \
+               .nbits  = 1,                                                    \
+               .shift_bits = en1_shift,                                        \
+       },                                                                      \
+       .voltages       = tps6591x_##vdata##_voltages,                          \
+       .delay          = en_time,
 
 #define TPS6591X_VIO(_id, vdata, s_addr, s_nbits, s_shift, s_type,     \
-                       en1_shift)                                      \
+                       en1_shift, en_time)                             \
 {                                                                      \
        TPS6591X_REGULATOR(_id, vdata, vio_ops, s_addr, s_nbits,        \
                        s_shift, s_type, INVALID, 0, 0, INVALID, 0, 0,  \
-                       EN1_SMPS, en1_shift)                            \
+                       EN1_SMPS, en1_shift, en_time)                   \
 }
 
 #define TPS6591X_LDO1(_id, vdata, s_addr, s_nbits, s_shift, s_type,    \
-                       en1_shift)                                      \
+                       en1_shift, en_time)                             \
 {                                                                      \
        TPS6591X_REGULATOR(_id, vdata, ldo1_ops, s_addr, s_nbits,       \
                        s_shift, s_type, INVALID, 0, 0, INVALID, 0, 0,  \
-                       EN1_LDO, en1_shift)                             \
+                       EN1_LDO, en1_shift, en_time)                    \
 }
 
 #define TPS6591X_LDO3(_id, vdata, s_addr, s_nbits, s_shift, s_type,    \
-                       en1_shift)                                      \
+                       en1_shift, en_time)                             \
 {                                                                      \
        TPS6591X_REGULATOR(_id, vdata, ldo3_ops, s_addr, s_nbits,       \
                        s_shift, s_type, INVALID, 0, 0, INVALID, 0, 0,  \
-                       EN1_LDO, en1_shift)                             \
+                       EN1_LDO, en1_shift, en_time)                    \
 }
 
 #define TPS6591X_VDD(_id, vdata, s_addr, s_nbits, s_shift, s_type,     \
                        op_addr, op_nbits, op_shift, sr_addr, sr_nbits, \
-                       sr_shift, en1_shift)                            \
+                       sr_shift, en1_shift, en_time)                   \
 {                                                                      \
        TPS6591X_REGULATOR(_id, vdata, vdd_ops, s_addr, s_nbits,        \
                        s_shift, s_type, op_addr, op_nbits, op_shift,   \
                        sr_addr, sr_nbits, sr_shift, EN1_SMPS,          \
-                       en1_shift)                                      \
+                       en1_shift, en_time)                             \
 }
 
 static struct tps6591x_regulator tps6591x_regulator[] = {
-       TPS6591X_VIO(VIO, vio, VIO, 2, 2, single_reg, 0),
-       TPS6591X_LDO1(LDO_1, ldo124, LDO1, 6, 2, single_reg, 1),
-       TPS6591X_LDO1(LDO_2, ldo124, LDO2, 6, 2, single_reg, 2),
-       TPS6591X_LDO3(LDO_3, ldo35678, LDO3, 5, 2, single_reg, 7),
-       TPS6591X_LDO1(LDO_4, ldo124, LDO4, 6, 2, single_reg, 6),
-       TPS6591X_LDO3(LDO_5, ldo35678, LDO5, 5, 2, single_reg, 3),
-       TPS6591X_LDO3(LDO_6, ldo35678, LDO6, 5, 2, single_reg, 0),
-       TPS6591X_LDO3(LDO_7, ldo35678, LDO7, 5, 2, single_reg, 5),
-       TPS6591X_LDO3(LDO_8, ldo35678, LDO8, 5, 2, single_reg, 4),
+       TPS6591X_VIO(VIO, vio, VIO, 2, 2, single_reg, 0, 350),
+       TPS6591X_LDO1(LDO_1, ldo124, LDO1, 6, 2, single_reg, 1, 420),
+       TPS6591X_LDO1(LDO_2, ldo124, LDO2, 6, 2, single_reg, 2, 420),
+       TPS6591X_LDO3(LDO_3, ldo35678, LDO3, 5, 2, single_reg, 7, 230),
+       TPS6591X_LDO1(LDO_4, ldo124, LDO4, 6, 2, single_reg, 6, 230),
+       TPS6591X_LDO3(LDO_5, ldo35678, LDO5, 5, 2, single_reg, 3, 230),
+       TPS6591X_LDO3(LDO_6, ldo35678, LDO6, 5, 2, single_reg, 0, 230),
+       TPS6591X_LDO3(LDO_7, ldo35678, LDO7, 5, 2, single_reg, 5, 230),
+       TPS6591X_LDO3(LDO_8, ldo35678, LDO8, 5, 2, single_reg, 4, 230),
        TPS6591X_VDD(VDD_1, vdd, VDD1, 2, 0, sr_op_reg, VDD1_OP,
-               7, 0, VDD1_SR, 7, 0, 1),
+               7, 0, VDD1_SR, 7, 0, 1, 350),
        TPS6591X_VDD(VDD_2, vdd, VDD2, 2, 0, sr_op_reg, VDD2_OP,
-               7, 0, VDD2_SR, 7, 0, 2),
+               7, 0, VDD2_SR, 7, 0, 2, 350),
        TPS6591X_VDD(VDDCTRL, vddctrl, VDDCTRL, 2, 0, sr_op_reg,
-               VDDCTRL_OP, 7, 0, VDDCTRL_SR, 7, 0, 3),
+               VDDCTRL_OP, 7, 0, VDDCTRL_SR, 7, 0, 3, 900),
 };
 
 static inline int tps6591x_regulator_preinit(struct device *parent,