Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d94d9aca authored by Axel Lin's avatar Axel Lin Committed by Mark Brown
Browse files

regulator: tps51632: Use regulator_[get|set]_voltage_sel_regmap

parent c51ce403
Loading
Loading
Loading
Loading
+8 −44
Original line number Diff line number Diff line
@@ -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);