提交 df2643cf 编写于 作者: S Sangbeom Kim 提交者: Mark Brown

regulator: Replace set_voltage with set_voltage_sel

To apply delay time for voltage change,
replace s5m8767_set_voltage with s5m8767_set_voltage_sel.
Signed-off-by: NSangbeom Kim <sbkim73@samsung.com>
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
上级 38c20eb2
...@@ -357,32 +357,34 @@ static int s5m8767_convert_voltage_to_sel( ...@@ -357,32 +357,34 @@ static int s5m8767_convert_voltage_to_sel(
return selector; return selector;
} }
static inline void s5m8767_set_high(struct s5m8767_info *s5m8767) static inline int s5m8767_set_high(struct s5m8767_info *s5m8767)
{ {
int temp_index = s5m8767->buck_gpioindex; int temp_index = s5m8767->buck_gpioindex;
gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1);
gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1);
gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1);
return 0;
} }
static inline void s5m8767_set_low(struct s5m8767_info *s5m8767) static inline int s5m8767_set_low(struct s5m8767_info *s5m8767)
{ {
int temp_index = s5m8767->buck_gpioindex; int temp_index = s5m8767->buck_gpioindex;
gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1);
gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1);
gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1);
return 0;
} }
static int s5m8767_set_voltage(struct regulator_dev *rdev, static int s5m8767_set_voltage_sel(struct regulator_dev *rdev,
int min_uV, int max_uV, unsigned *selector) unsigned selector)
{ {
struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
const struct s5m_voltage_desc *desc;
int reg_id = rdev_get_id(rdev); int reg_id = rdev_get_id(rdev);
int sel, reg, mask, ret = 0, old_index, index = 0; int reg, mask, ret = 0, old_index, index = 0;
u8 val;
u8 *buck234_vol = NULL; u8 *buck234_vol = NULL;
switch (reg_id) { switch (reg_id) {
...@@ -407,15 +409,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, ...@@ -407,15 +409,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
return -EINVAL; return -EINVAL;
} }
desc = reg_voltage_map[reg_id];
sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
if (sel < 0)
return sel;
/* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */ /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */
if (buck234_vol) { if (buck234_vol) {
while (*buck234_vol != sel) { while (*buck234_vol != selector) {
buck234_vol++; buck234_vol++;
index++; index++;
} }
...@@ -423,22 +419,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, ...@@ -423,22 +419,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
s5m8767->buck_gpioindex = index; s5m8767->buck_gpioindex = index;
if (index > old_index) if (index > old_index)
s5m8767_set_high(s5m8767); return s5m8767_set_high(s5m8767);
else else
s5m8767_set_low(s5m8767); return s5m8767_set_low(s5m8767);
} else { } else {
ret = s5m8767_get_voltage_register(rdev, &reg); ret = s5m8767_get_voltage_register(rdev, &reg);
if (ret) if (ret)
return ret; return ret;
s5m_reg_read(s5m8767->iodev, reg, &val); return s5m_reg_update(s5m8767->iodev, reg, selector, mask);
val = (val & ~mask) | sel;
ret = s5m_reg_write(s5m8767->iodev, reg, val);
} }
*selector = sel;
return ret;
} }
static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev,
...@@ -463,7 +453,7 @@ static struct regulator_ops s5m8767_ops = { ...@@ -463,7 +453,7 @@ static struct regulator_ops s5m8767_ops = {
.enable = s5m8767_reg_enable, .enable = s5m8767_reg_enable,
.disable = s5m8767_reg_disable, .disable = s5m8767_reg_disable,
.get_voltage_sel = s5m8767_get_voltage_sel, .get_voltage_sel = s5m8767_get_voltage_sel,
.set_voltage = s5m8767_set_voltage, .set_voltage_sel = s5m8767_set_voltage_sel,
.set_voltage_time_sel = s5m8767_set_voltage_time_sel, .set_voltage_time_sel = s5m8767_set_voltage_time_sel,
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册