mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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
2 changed files with 47 additions and 1 deletions
|
@ -332,6 +332,36 @@ static inline int tps6586x_regulator_preinit(struct device *parent,
|
||||||
1 << ri->enable_bit[1]);
|
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)
|
static inline struct tps6586x_regulator *find_regulator_info(int id)
|
||||||
{
|
{
|
||||||
struct tps6586x_regulator *ri;
|
struct tps6586x_regulator *ri;
|
||||||
|
@ -374,7 +404,7 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
platform_set_drvdata(pdev, rdev);
|
platform_set_drvdata(pdev, rdev);
|
||||||
|
|
||||||
return 0;
|
return tps6586x_regulator_set_slew_rate(pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devexit tps6586x_regulator_remove(struct platform_device *pdev)
|
static int __devexit tps6586x_regulator_remove(struct platform_device *pdev)
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
#ifndef __LINUX_MFD_TPS6586X_H
|
#ifndef __LINUX_MFD_TPS6586X_H
|
||||||
#define __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 {
|
enum {
|
||||||
TPS6586X_ID_SM_0,
|
TPS6586X_ID_SM_0,
|
||||||
TPS6586X_ID_SM_1,
|
TPS6586X_ID_SM_1,
|
||||||
|
@ -48,6 +60,10 @@ enum {
|
||||||
TPS6586X_INT_RTC_ALM2,
|
TPS6586X_INT_RTC_ALM2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct tps6586x_settings {
|
||||||
|
int slew_rate;
|
||||||
|
};
|
||||||
|
|
||||||
struct tps6586x_subdev_info {
|
struct tps6586x_subdev_info {
|
||||||
int id;
|
int id;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
Loading…
Add table
Reference in a new issue