diff options
-rw-r--r-- | drivers/regulator/rc5t583-regulator.c | 23 |
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 | ||
127 | static int rc5t583_set_voltage_sel(struct regulator_dev *rdev, | 127 | static 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 | }; |