aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWenyou Yang <wenyou.yang@atmel.com>2015-09-30 03:25:49 -0400
committerMark Brown <broonie@kernel.org>2015-10-02 12:53:24 -0400
commitc86dc03e54ce15aac623125d92faac005f94267b (patch)
tree54ca87dbb503defe9527d70b6f96a4c3581c07f2
parent6ff33f3902c3b1c5d0db6b1e2c70b6d76fba357f (diff)
regulator: act8865: support output voltage by VSET2[] bits
For the step-down DC/DC regulators, the output voltage is selectable by setting VSEL pin that when VSEL is low, output voltage is programmed by VSET1[] bits, and when VSEL is high, output voltage is programmed by VSET2[] bits. The DT property "active-semi,vsel-high" is used to specify the VSEL pin at high on the board. Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com> Reviewed-by: Ludovic Desroches <ludovic.desroches@atmel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/regulator/act8865-regulator.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/regulator/act8865-regulator.c b/drivers/regulator/act8865-regulator.c
index 896db168e4bd..f8d4cd3d1397 100644
--- a/drivers/regulator/act8865-regulator.c
+++ b/drivers/regulator/act8865-regulator.c
@@ -261,6 +261,16 @@ static const struct regulator_desc act8865_regulators[] = {
261 ACT88xx_REG("LDO_REG4", ACT8865, LDO4, VSET, "inl67"), 261 ACT88xx_REG("LDO_REG4", ACT8865, LDO4, VSET, "inl67"),
262}; 262};
263 263
264static const struct regulator_desc act8865_alt_regulators[] = {
265 ACT88xx_REG("DCDC_REG1", ACT8865, DCDC1, VSET2, "vp1"),
266 ACT88xx_REG("DCDC_REG2", ACT8865, DCDC2, VSET2, "vp2"),
267 ACT88xx_REG("DCDC_REG3", ACT8865, DCDC3, VSET2, "vp3"),
268 ACT88xx_REG("LDO_REG1", ACT8865, LDO1, VSET, "inl45"),
269 ACT88xx_REG("LDO_REG2", ACT8865, LDO2, VSET, "inl45"),
270 ACT88xx_REG("LDO_REG3", ACT8865, LDO3, VSET, "inl67"),
271 ACT88xx_REG("LDO_REG4", ACT8865, LDO4, VSET, "inl67"),
272};
273
264#ifdef CONFIG_OF 274#ifdef CONFIG_OF
265static const struct of_device_id act8865_dt_ids[] = { 275static const struct of_device_id act8865_dt_ids[] = {
266 { .compatible = "active-semi,act8600", .data = (void *)ACT8600 }, 276 { .compatible = "active-semi,act8600", .data = (void *)ACT8600 },
@@ -413,6 +423,7 @@ static int act8865_pmic_probe(struct i2c_client *client,
413 struct act8865 *act8865; 423 struct act8865 *act8865;
414 unsigned long type; 424 unsigned long type;
415 int off_reg, off_mask; 425 int off_reg, off_mask;
426 int voltage_select = 0;
416 427
417 pdata = dev_get_platdata(dev); 428 pdata = dev_get_platdata(dev);
418 429
@@ -424,6 +435,10 @@ static int act8865_pmic_probe(struct i2c_client *client,
424 return -ENODEV; 435 return -ENODEV;
425 436
426 type = (unsigned long) id->data; 437 type = (unsigned long) id->data;
438
439 voltage_select = !!of_get_property(dev->of_node,
440 "active-semi,vsel-high",
441 NULL);
427 } else { 442 } else {
428 type = i2c_id->driver_data; 443 type = i2c_id->driver_data;
429 } 444 }
@@ -442,8 +457,13 @@ static int act8865_pmic_probe(struct i2c_client *client,
442 off_mask = ACT8846_OFF_SYSMASK; 457 off_mask = ACT8846_OFF_SYSMASK;
443 break; 458 break;
444 case ACT8865: 459 case ACT8865:
445 regulators = act8865_regulators; 460 if (voltage_select) {
446 num_regulators = ARRAY_SIZE(act8865_regulators); 461 regulators = act8865_alt_regulators;
462 num_regulators = ARRAY_SIZE(act8865_alt_regulators);
463 } else {
464 regulators = act8865_regulators;
465 num_regulators = ARRAY_SIZE(act8865_regulators);
466 }
447 off_reg = ACT8865_SYS_CTRL; 467 off_reg = ACT8865_SYS_CTRL;
448 off_mask = ACT8865_MSTROFF; 468 off_mask = ACT8865_MSTROFF;
449 break; 469 break;