aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/rc5t583-regulator.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/regulator/rc5t583-regulator.c b/drivers/regulator/rc5t583-regulator.c
index 7e9c14affa5e..fe094a6140d9 100644
--- a/drivers/regulator/rc5t583-regulator.c
+++ b/drivers/regulator/rc5t583-regulator.c
@@ -124,19 +124,26 @@ static int rc5t583_list_voltage(struct regulator_dev *rdev, unsigned selector)
124 return ri->min_uV + (ri->step_uV * selector); 124 return ri->min_uV + (ri->step_uV * selector);
125} 125}
126 126
127static int rc5t583_set_voltage_sel(struct regulator_dev *rdev, 127static int rc5t583_set_voltage(struct regulator_dev *rdev,
128 unsigned int selector) 128 int min_uV, int max_uV, unsigned *selector)
129{ 129{
130 struct rc5t583_regulator *reg = rdev_get_drvdata(rdev); 130 struct rc5t583_regulator *reg = rdev_get_drvdata(rdev);
131 struct rc5t583_regulator_info *ri = reg->reg_info; 131 struct rc5t583_regulator_info *ri = reg->reg_info;
132 int ret; 132 int sel, ret;
133 if (selector >= rdev->desc->n_voltages) { 133
134 dev_err(&rdev->dev, "Invalid selector 0x%02x\n", selector); 134 if (min_uV < ri->min_uV)
135 min_uV = ri->min_uV;
136
137 sel = DIV_ROUND_UP(min_uV - ri->min_uV, ri->step_uV);
138
139 if (sel >= rdev->desc->n_voltages) {
140 dev_err(&rdev->dev, "Invalid selector 0x%02x\n", sel);
135 return -EINVAL; 141 return -EINVAL;
136 } 142 }
137 143
138 ret = rc5t583_update(reg->mfd->dev, ri->vout_reg, 144 *selector = sel;
139 selector, ri->vout_mask); 145
146 ret = rc5t583_update(reg->mfd->dev, ri->vout_reg, sel, ri->vout_mask);
140 if (ret < 0) 147 if (ret < 0)
141 dev_err(&rdev->dev, 148 dev_err(&rdev->dev,
142 "Error in update voltage register 0x%02x\n", ri->vout_reg); 149 "Error in update voltage register 0x%02x\n", ri->vout_reg);
@@ -191,7 +198,7 @@ static struct regulator_ops rc5t583_ops = {
191 .disable = rc5t583_reg_disable, 198 .disable = rc5t583_reg_disable,
192 .enable_time = rc5t583_regulator_enable_time, 199 .enable_time = rc5t583_regulator_enable_time,
193 .get_voltage_sel = rc5t583_get_voltage_sel, 200 .get_voltage_sel = rc5t583_get_voltage_sel,
194 .set_voltage_sel = rc5t583_set_voltage_sel, 201 .set_voltage = rc5t583_set_voltage,
195 .list_voltage = rc5t583_list_voltage, 202 .list_voltage = rc5t583_list_voltage,
196 .set_voltage_time_sel = rc5t583_set_voltage_time_sel, 203 .set_voltage_time_sel = rc5t583_set_voltage_time_sel,
197}; 204};