|
@@ -88,49 +88,8 @@ struct tps51632_chip {
|
|
|
struct regulator_desc desc;
|
|
|
struct regulator_dev *rdev;
|
|
|
struct regmap *regmap;
|
|
|
- bool enable_pwm_dvfs;
|
|
|
};
|
|
|
|
|
|
-static int tps51632_dcdc_get_voltage_sel(struct regulator_dev *rdev)
|
|
|
-{
|
|
|
- struct tps51632_chip *tps = rdev_get_drvdata(rdev);
|
|
|
- unsigned int data;
|
|
|
- int ret;
|
|
|
- unsigned int reg = TPS51632_VOLTAGE_SELECT_REG;
|
|
|
- int vsel;
|
|
|
-
|
|
|
- if (tps->enable_pwm_dvfs)
|
|
|
- reg = TPS51632_VOLTAGE_BASE_REG;
|
|
|
-
|
|
|
- ret = regmap_read(tps->regmap, reg, &data);
|
|
|
- if (ret < 0) {
|
|
|
- dev_err(tps->dev, "reg read failed, err %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- vsel = data & TPS51632_VOUT_MASK;
|
|
|
- return vsel;
|
|
|
-}
|
|
|
-
|
|
|
-static int tps51632_dcdc_set_voltage_sel(struct regulator_dev *rdev,
|
|
|
- unsigned selector)
|
|
|
-{
|
|
|
- struct tps51632_chip *tps = rdev_get_drvdata(rdev);
|
|
|
- int ret;
|
|
|
- unsigned int reg = TPS51632_VOLTAGE_SELECT_REG;
|
|
|
-
|
|
|
- if (tps->enable_pwm_dvfs)
|
|
|
- reg = TPS51632_VOLTAGE_BASE_REG;
|
|
|
-
|
|
|
- if (selector > TPS51632_MAX_VSEL)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- ret = regmap_write(tps->regmap, reg, selector);
|
|
|
- if (ret < 0)
|
|
|
- dev_err(tps->dev, "reg write failed, err %d\n", ret);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
static int tps51632_dcdc_set_ramp_delay(struct regulator_dev *rdev,
|
|
|
int ramp_delay)
|
|
|
{
|
|
@@ -147,8 +106,8 @@ static int tps51632_dcdc_set_ramp_delay(struct regulator_dev *rdev,
|
|
|
}
|
|
|
|
|
|
static struct regulator_ops tps51632_dcdc_ops = {
|
|
|
- .get_voltage_sel = tps51632_dcdc_get_voltage_sel,
|
|
|
- .set_voltage_sel = tps51632_dcdc_set_voltage_sel,
|
|
|
+ .get_voltage_sel = regulator_get_voltage_sel_regmap,
|
|
|
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
|
.list_voltage = regulator_list_voltage_linear,
|
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
|
.set_ramp_delay = tps51632_dcdc_set_ramp_delay,
|
|
@@ -165,7 +124,6 @@ static int tps51632_init_dcdc(struct tps51632_chip *tps,
|
|
|
goto skip_pwm_config;
|
|
|
|
|
|
control |= TPS51632_DVFS_PWMEN;
|
|
|
- tps->enable_pwm_dvfs = pdata->enable_pwm_dvfs;
|
|
|
vsel = TPS51632_VOLT_VSEL(pdata->base_voltage_uV);
|
|
|
ret = regmap_write(tps->regmap, TPS51632_VOLTAGE_BASE_REG, vsel);
|
|
|
if (ret < 0) {
|
|
@@ -358,6 +316,12 @@ static int tps51632_probe(struct i2c_client *client,
|
|
|
tps->desc.type = REGULATOR_VOLTAGE;
|
|
|
tps->desc.owner = THIS_MODULE;
|
|
|
|
|
|
+ if (pdata->enable_pwm_dvfs)
|
|
|
+ tps->desc.vsel_reg = TPS51632_VOLTAGE_BASE_REG;
|
|
|
+ else
|
|
|
+ tps->desc.vsel_reg = TPS51632_VOLTAGE_SELECT_REG;
|
|
|
+ tps->desc.vsel_mask = TPS51632_VOUT_MASK;
|
|
|
+
|
|
|
tps->regmap = devm_regmap_init_i2c(client, &tps51632_regmap_config);
|
|
|
if (IS_ERR(tps->regmap)) {
|
|
|
ret = PTR_ERR(tps->regmap);
|