diff options
author | Mark Brown <broonie@sirena.org.uk> | 2013-04-28 02:13:47 +0100 |
---|---|---|
committer | Mark Brown <broonie@sirena.org.uk> | 2013-04-28 02:13:47 +0100 |
commit | 813dc1b086d230ad3fe8ccf7ef70a135d08c3b27 (patch) | |
tree | f2907c292f65d8c889cde9042d1e18d84eb157a5 /drivers/regulator/tps65023-regulator.c | |
parent | 22a712b90ca5411cb37df82dfb50144c87175fb4 (diff) | |
parent | 46bcb006ae92cdd10c39eeaecf2ca4994026943a (diff) | |
download | linux-813dc1b086d230ad3fe8ccf7ef70a135d08c3b27.tar.gz linux-813dc1b086d230ad3fe8ccf7ef70a135d08c3b27.tar.bz2 linux-813dc1b086d230ad3fe8ccf7ef70a135d08c3b27.zip |
Merge remote-tracking branch 'regulator/topic/tps65023' into v3.9-rc8
Diffstat (limited to 'drivers/regulator/tps65023-regulator.c')
-rw-r--r-- | drivers/regulator/tps65023-regulator.c | 31 |
1 files changed, 9 insertions, 22 deletions
diff --git a/drivers/regulator/tps65023-regulator.c b/drivers/regulator/tps65023-regulator.c index 8d21cf3385e4..9d053e23e9eb 100644 --- a/drivers/regulator/tps65023-regulator.c +++ b/drivers/regulator/tps65023-regulator.c @@ -149,20 +149,15 @@ struct tps_driver_data { static int tps65023_dcdc_get_voltage_sel(struct regulator_dev *dev) { struct tps_pmic *tps = rdev_get_drvdata(dev); - int ret; - int data, dcdc = rdev_get_id(dev); + int dcdc = rdev_get_id(dev); if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) return -EINVAL; - if (dcdc == tps->core_regulator) { - ret = regmap_read(tps->regmap, TPS65023_REG_DEF_CORE, &data); - if (ret != 0) - return ret; - data &= (tps->info[dcdc]->table_len - 1); - return data; - } else + if (dcdc != tps->core_regulator) return 0; + + return regulator_get_voltage_sel_regmap(dev); } static int tps65023_dcdc_set_voltage_sel(struct regulator_dev *dev, @@ -170,23 +165,11 @@ static int tps65023_dcdc_set_voltage_sel(struct regulator_dev *dev, { struct tps_pmic *tps = rdev_get_drvdata(dev); int dcdc = rdev_get_id(dev); - int ret; if (dcdc != tps->core_regulator) return -EINVAL; - ret = regmap_write(tps->regmap, TPS65023_REG_DEF_CORE, selector); - if (ret) - goto out; - - /* Tell the chip that we have changed the value in DEFCORE - * and its time to update the core voltage - */ - ret = regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, - TPS65023_REG_CTRL2_GO, TPS65023_REG_CTRL2_GO); - -out: - return ret; + return regulator_set_voltage_sel_regmap(dev, selector); } /* Operations permitted on VDCDCx */ @@ -282,6 +265,10 @@ static int tps_65023_probe(struct i2c_client *client, default: /* DCDCx */ tps->desc[i].enable_mask = 1 << (TPS65023_NUM_REGULATOR - i); + tps->desc[i].vsel_reg = TPS65023_REG_DEF_CORE; + tps->desc[i].vsel_mask = info->table_len - 1; + tps->desc[i].apply_reg = TPS65023_REG_CON_CTRL2; + tps->desc[i].apply_bit = TPS65023_REG_CTRL2_GO; } config.dev = &client->dev; |