Loading drivers/regulator/s5m8767.c +14 −24 Original line number Diff line number Diff line Loading @@ -357,32 +357,34 @@ static int s5m8767_convert_voltage_to_sel( 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; 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[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; 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[0], (temp_index >> 2) & 0x1); return 0; } static int s5m8767_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, unsigned *selector) static int s5m8767_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) { struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); const struct s5m_voltage_desc *desc; int reg_id = rdev_get_id(rdev); int sel, reg, mask, ret = 0, old_index, index = 0; u8 val; int reg, mask, ret = 0, old_index, index = 0; u8 *buck234_vol = NULL; switch (reg_id) { Loading @@ -407,15 +409,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, 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 */ if (buck234_vol) { while (*buck234_vol != sel) { while (*buck234_vol != selector) { buck234_vol++; index++; } Loading @@ -423,22 +419,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, s5m8767->buck_gpioindex = index; if (index > old_index) s5m8767_set_high(s5m8767); return s5m8767_set_high(s5m8767); else s5m8767_set_low(s5m8767); return s5m8767_set_low(s5m8767); } else { ret = s5m8767_get_voltage_register(rdev, ®); if (ret) return ret; s5m_reg_read(s5m8767->iodev, reg, &val); val = (val & ~mask) | sel; ret = s5m_reg_write(s5m8767->iodev, reg, val); return s5m_reg_update(s5m8767->iodev, reg, selector, mask); } *selector = sel; return ret; } static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, Loading @@ -463,7 +453,7 @@ static struct regulator_ops s5m8767_ops = { .enable = s5m8767_reg_enable, .disable = s5m8767_reg_disable, .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, }; Loading Loading
drivers/regulator/s5m8767.c +14 −24 Original line number Diff line number Diff line Loading @@ -357,32 +357,34 @@ static int s5m8767_convert_voltage_to_sel( 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; 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[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; 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[0], (temp_index >> 2) & 0x1); return 0; } static int s5m8767_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, unsigned *selector) static int s5m8767_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) { struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); const struct s5m_voltage_desc *desc; int reg_id = rdev_get_id(rdev); int sel, reg, mask, ret = 0, old_index, index = 0; u8 val; int reg, mask, ret = 0, old_index, index = 0; u8 *buck234_vol = NULL; switch (reg_id) { Loading @@ -407,15 +409,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, 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 */ if (buck234_vol) { while (*buck234_vol != sel) { while (*buck234_vol != selector) { buck234_vol++; index++; } Loading @@ -423,22 +419,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, s5m8767->buck_gpioindex = index; if (index > old_index) s5m8767_set_high(s5m8767); return s5m8767_set_high(s5m8767); else s5m8767_set_low(s5m8767); return s5m8767_set_low(s5m8767); } else { ret = s5m8767_get_voltage_register(rdev, ®); if (ret) return ret; s5m_reg_read(s5m8767->iodev, reg, &val); val = (val & ~mask) | sel; ret = s5m_reg_write(s5m8767->iodev, reg, val); return s5m_reg_update(s5m8767->iodev, reg, selector, mask); } *selector = sel; return ret; } static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, Loading @@ -463,7 +453,7 @@ static struct regulator_ops s5m8767_ops = { .enable = s5m8767_reg_enable, .disable = s5m8767_reg_disable, .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, }; Loading