summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorXin Xie <xxie@nvidia.com>2011-04-25 17:36:15 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:47:47 -0800
commitf90bd02b51681d4343236f819d1716f8c3c5d9ed (patch)
tree6b436f44bd4d5a3ab59f2f45935c81bb613ac7d5 /drivers
parent9912c17107e458d514eae715605031b6881ecb51 (diff)
regulator: tps6586x: add SMx slew rate setting
bug 815933 Original-Change-Id: I3b8f8910b12ff4f8a5f9588615bd0bb6452bdc3b Reviewed-on: http://git-master/r/40263 Reviewed-by: Xin Xie <xxie@nvidia.com> Tested-by: Xin Xie <xxie@nvidia.com> Reviewed-by: Jonathan Mayo <jmayo@nvidia.com> Reviewed-by: Scott Williams <scwilliams@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Rebase-Id: R18292e6e68c95b9f67d24281a9f2b80439452ba8
Diffstat (limited to 'drivers')
-rw-r--r--drivers/regulator/tps6586x-regulator.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/regulator/tps6586x-regulator.c b/drivers/regulator/tps6586x-regulator.c
index 3fd75e6c0cc4..9ab8f3fb68ef 100644
--- a/drivers/regulator/tps6586x-regulator.c
+++ b/drivers/regulator/tps6586x-regulator.c
@@ -375,6 +375,30 @@ static inline int tps6586x_regulator_set_pwm_mode(struct platform_device *pdev)
return ret;
}
+static inline int tps6586x_regulator_set_slew_rate(struct platform_device *pdev)
+{
+ struct device *parent = pdev->dev.parent;
+ struct regulator_init_data *p = pdev->dev.platform_data;
+ struct tps6586x_settings *setting = p->driver_data;
+ uint8_t reg;
+
+ if (setting == NULL)
+ return 0;
+
+ /* only SM0 and SM1 can have the slew rate settings */
+ switch (pdev->id) {
+ case TPS6586X_ID_SM_0:
+ reg = TPS6586X_SM0SL;
+ break;
+ case TPS6586X_ID_SM_1:
+ reg = TPS6586X_SM1SL;
+ break;
+ default:
+ return 0;
+ }
+ return tps6586x_write(parent, reg, setting->slew_rate);
+}
+
static inline struct tps6586x_regulator *find_regulator_info(int id)
{
struct tps6586x_regulator *ri;
@@ -417,6 +441,10 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, rdev);
+ err = tps6586x_regulator_set_slew_rate(pdev);
+ if (err)
+ return err;
+
return tps6586x_regulator_set_pwm_mode(pdev);
}