regulator: twl6030: add support for vdd1, vdd2 and vdd3 regulators
PATCH v2 1/1 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.
--- drivers/mfd/twl-core.c | 15 ++++++++++++++ drivers/regulator/twl-regulator.c | 39 +++++++++++++++++++++++++++++++++++++ include/linux/i2c/twl.h | 5 ++- 3 files changed, 57 insertions(+), 2 deletions(-)
drivers/mfd/twl-core.c +15 -0
@@ -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))
drivers/regulator/twl-regulator.c +39 -0
@@ -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),
include/linux/i2c/twl.h +3 -2
@@ -700,6 +700,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;
@@ -708,8 +711,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;
Signature · 1 line
1.7.4.1
PATCH v2 1/1 regulator: twl6030: add support for vdd1, vdd2 and vdd3 regulators
Quoted 5 lines · Tero Kristo
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_getand set is minimal and requires external controller.
Please coordinate with Rajendra and Peter to produce a unified set of
updates for this driver. There's too many people sending overlapping
patches here.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120227/faf30ef5/attachment.sig>