regulator: twl6030: add support for vdd1, vdd2 and vdd3 regulators
vdd1 and vdd2 are now common regulators for twl4030 and twl6030. Also added vdd3 as a new regulator for twl6030. twl6030 vdd1...vdd3 smps regulator voltages can only be controlled through the smartreflex voltage channel, thus the support for the voltage_get and set is minimal and requires external controller. Signed-off-by: Tero Kristo <t-kristo@ti.com> Signed-off-by: Rajendra Nayak <rnayak@ti.com> Acked-by: Samuel Ortiz <sameo@linux.intel.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
63bfff4e20
Коммит
34a3844068
|
@ -949,6 +949,21 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
|
|||
/* twl6030 regulators */
|
||||
if (twl_has_regulator() && twl_class_is_6030() &&
|
||||
!(features & TWL6025_SUBCLASS)) {
|
||||
child = add_regulator(TWL6030_REG_VDD1, pdata->vdd1,
|
||||
features);
|
||||
if (IS_ERR(child))
|
||||
return PTR_ERR(child);
|
||||
|
||||
child = add_regulator(TWL6030_REG_VDD2, pdata->vdd2,
|
||||
features);
|
||||
if (IS_ERR(child))
|
||||
return PTR_ERR(child);
|
||||
|
||||
child = add_regulator(TWL6030_REG_VDD3, pdata->vdd3,
|
||||
features);
|
||||
if (IS_ERR(child))
|
||||
return PTR_ERR(child);
|
||||
|
||||
child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc,
|
||||
features);
|
||||
if (IS_ERR(child))
|
||||
|
|
|
@ -561,6 +561,32 @@ static struct regulator_ops twl4030smps_ops = {
|
|||
.get_voltage = twl4030smps_get_voltage,
|
||||
};
|
||||
|
||||
static int twl6030coresmps_set_voltage(struct regulator_dev *rdev, int min_uV,
|
||||
int max_uV, unsigned *selector)
|
||||
{
|
||||
struct twlreg_info *info = rdev_get_drvdata(rdev);
|
||||
|
||||
if (info->set_voltage)
|
||||
return info->set_voltage(info->data, min_uV);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int twl6030coresmps_get_voltage(struct regulator_dev *rdev)
|
||||
{
|
||||
struct twlreg_info *info = rdev_get_drvdata(rdev);
|
||||
|
||||
if (info->get_voltage)
|
||||
return info->get_voltage(info->data);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct regulator_ops twl6030coresmps_ops = {
|
||||
.set_voltage = twl6030coresmps_set_voltage,
|
||||
.get_voltage = twl6030coresmps_get_voltage,
|
||||
};
|
||||
|
||||
static int twl6030ldo_list_voltage(struct regulator_dev *rdev, unsigned index)
|
||||
{
|
||||
struct twlreg_info *info = rdev_get_drvdata(rdev);
|
||||
|
@ -926,6 +952,16 @@ static struct regulator_ops twlsmps_ops = {
|
|||
}, \
|
||||
}
|
||||
|
||||
#define TWL6030_ADJUSTABLE_SMPS(label) { \
|
||||
.desc = { \
|
||||
.name = #label, \
|
||||
.id = TWL6030_REG_##label, \
|
||||
.ops = &twl6030coresmps_ops, \
|
||||
.type = REGULATOR_VOLTAGE, \
|
||||
.owner = THIS_MODULE, \
|
||||
}, \
|
||||
}
|
||||
|
||||
#define TWL6030_ADJUSTABLE_LDO(label, offset, min_mVolts, max_mVolts) { \
|
||||
.base = offset, \
|
||||
.min_mV = min_mVolts, \
|
||||
|
@ -1027,6 +1063,9 @@ static struct twlreg_info twl_regs[] = {
|
|||
/* 6030 REG with base as PMC Slave Misc : 0x0030 */
|
||||
/* Turnon-delay and remap configuration values for 6030 are not
|
||||
verified since the specification is not public */
|
||||
TWL6030_ADJUSTABLE_SMPS(VDD1),
|
||||
TWL6030_ADJUSTABLE_SMPS(VDD2),
|
||||
TWL6030_ADJUSTABLE_SMPS(VDD3),
|
||||
TWL6030_ADJUSTABLE_LDO(VAUX1_6030, 0x54, 1000, 3300),
|
||||
TWL6030_ADJUSTABLE_LDO(VAUX2_6030, 0x58, 1000, 3300),
|
||||
TWL6030_ADJUSTABLE_LDO(VAUX3_6030, 0x5c, 1000, 3300),
|
||||
|
|
|
@ -712,6 +712,9 @@ struct twl4030_platform_data {
|
|||
struct regulator_init_data *vaux1;
|
||||
struct regulator_init_data *vaux2;
|
||||
struct regulator_init_data *vaux3;
|
||||
struct regulator_init_data *vdd1;
|
||||
struct regulator_init_data *vdd2;
|
||||
struct regulator_init_data *vdd3;
|
||||
/* TWL4030 LDO regulators */
|
||||
struct regulator_init_data *vpll1;
|
||||
struct regulator_init_data *vpll2;
|
||||
|
@ -720,8 +723,6 @@ struct twl4030_platform_data {
|
|||
struct regulator_init_data *vsim;
|
||||
struct regulator_init_data *vaux4;
|
||||
struct regulator_init_data *vio;
|
||||
struct regulator_init_data *vdd1;
|
||||
struct regulator_init_data *vdd2;
|
||||
struct regulator_init_data *vintana1;
|
||||
struct regulator_init_data *vintana2;
|
||||
struct regulator_init_data *vintdig;
|
||||
|
|
Загрузка…
Ссылка в новой задаче