forked from Minki/linux
regulator: tps6586x: add SMx slew rate setting
Add output vlotage slew rate setting for SM0/SM1 Signed-off-by: Xin Xie <xxie@nvidia.com> Signed-off-by: Danny Huang <dahuang@nvidia.com> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
This commit is contained in:
parent
fc999b8379
commit
500c524aad
@ -332,6 +332,36 @@ static inline int tps6586x_regulator_preinit(struct device *parent,
|
||||
1 << ri->enable_bit[1]);
|
||||
}
|
||||
|
||||
static 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;
|
||||
|
||||
if (!(setting->slew_rate & TPS6586X_SLEW_RATE_SET))
|
||||
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:
|
||||
dev_warn(&pdev->dev, "Only SM0/SM1 can set slew rate\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return tps6586x_write(parent, reg,
|
||||
setting->slew_rate & TPS6586X_SLEW_RATE_MASK);
|
||||
}
|
||||
|
||||
static inline struct tps6586x_regulator *find_regulator_info(int id)
|
||||
{
|
||||
struct tps6586x_regulator *ri;
|
||||
@ -374,7 +404,7 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, rdev);
|
||||
|
||||
return 0;
|
||||
return tps6586x_regulator_set_slew_rate(pdev);
|
||||
}
|
||||
|
||||
static int __devexit tps6586x_regulator_remove(struct platform_device *pdev)
|
||||
|
@ -1,6 +1,18 @@
|
||||
#ifndef __LINUX_MFD_TPS6586X_H
|
||||
#define __LINUX_MFD_TPS6586X_H
|
||||
|
||||
#define TPS6586X_SLEW_RATE_INSTANTLY 0x00
|
||||
#define TPS6586X_SLEW_RATE_110UV 0x01
|
||||
#define TPS6586X_SLEW_RATE_220UV 0x02
|
||||
#define TPS6586X_SLEW_RATE_440UV 0x03
|
||||
#define TPS6586X_SLEW_RATE_880UV 0x04
|
||||
#define TPS6586X_SLEW_RATE_1760UV 0x05
|
||||
#define TPS6586X_SLEW_RATE_3520UV 0x06
|
||||
#define TPS6586X_SLEW_RATE_7040UV 0x07
|
||||
|
||||
#define TPS6586X_SLEW_RATE_SET 0x08
|
||||
#define TPS6586X_SLEW_RATE_MASK 0x07
|
||||
|
||||
enum {
|
||||
TPS6586X_ID_SM_0,
|
||||
TPS6586X_ID_SM_1,
|
||||
@ -48,6 +60,10 @@ enum {
|
||||
TPS6586X_INT_RTC_ALM2,
|
||||
};
|
||||
|
||||
struct tps6586x_settings {
|
||||
int slew_rate;
|
||||
};
|
||||
|
||||
struct tps6586x_subdev_info {
|
||||
int id;
|
||||
const char *name;
|
||||
|
Loading…
Reference in New Issue
Block a user