static int pm8607_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV) { struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); uint8_t val, mask; int ret; if (check_range(info, min_uV, max_uV)) { pr_err("invalid voltage range (%d, %d) uV\n", min_uV, max_uV); return -EINVAL; } ret = choose_voltage(rdev, min_uV, max_uV); if (ret < 0) return -EINVAL; val = (uint8_t)(ret << info->vol_shift); mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; ret = pm860x_set_bits(info->i2c, info->vol_reg, mask, val); if (ret) return ret; switch (info->desc.id) { case PM8607_ID_BUCK1: case PM8607_ID_BUCK3: ret = pm860x_set_bits(info->i2c, info->update_reg, 1 << info->update_bit, 1 << info->update_bit); break; } return ret; }
static int pm822_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, unsigned *selector) { struct pm822_regulator_info *info = rdev_get_drvdata(rdev); uint8_t mask; int ret, reg; unsigned int value; if (min_uV > max_uV) { dev_err(info->chip->dev, "invalid voltage range (%d, %d) uV\n", min_uV, max_uV); return -EINVAL; } if (info->dvc) reg = info->vol_reg + info->dvc_val; else reg = info->vol_reg; ret = choose_voltage(rdev, min_uV, max_uV); if (ret < 0) return -EINVAL; *selector = ret; value = ret << info->vol_shift; mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; return regmap_update_bits(info->map, reg, mask, value); }