static int s5m8767_get_voltage_register(struct regulator_dev *rdev, int *_reg)
{
+ struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
int reg_id = rdev_get_id(rdev);
int reg;
break;
case S5M8767_BUCK2:
reg = S5M8767_REG_BUCK2DVS1;
+ if (s5m8767->buck2_gpiodvs)
+ reg += s5m8767->buck_gpioindex;
break;
case S5M8767_BUCK3:
reg = S5M8767_REG_BUCK3DVS1;
+ if (s5m8767->buck3_gpiodvs)
+ reg += s5m8767->buck_gpioindex;
break;
case S5M8767_BUCK4:
reg = S5M8767_REG_BUCK4DVS1;
+ if (s5m8767->buck4_gpiodvs)
+ reg += s5m8767->buck_gpioindex;
break;
case S5M8767_BUCK5:
reg = S5M8767_REG_BUCK5CTRL2;
static int s5m8767_get_voltage_sel(struct regulator_dev *rdev)
{
struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
- int reg, mask = 0xff, ret;
+ int reg, mask, ret;
int reg_id = rdev_get_id(rdev);
u8 val;
if (ret)
return ret;
- switch (reg_id) {
- case S5M8767_LDO1 ... S5M8767_LDO28:
- mask = 0x3f;
- break;
- case S5M8767_BUCK2:
- if (s5m8767->buck2_gpiodvs)
- reg += s5m8767->buck_gpioindex;
- break;
- case S5M8767_BUCK3:
- if (s5m8767->buck3_gpiodvs)
- reg += s5m8767->buck_gpioindex;
- break;
- case S5M8767_BUCK4:
- if (s5m8767->buck4_gpiodvs)
- reg += s5m8767->buck_gpioindex;
- break;
- }
+ mask = (reg_id < S5M8767_BUCK1) ? 0x3f : 0xff;
ret = s5m_reg_read(s5m8767->iodev, reg, &val);
if (ret)
return val;
}
-static inline int s5m8767_convert_voltage(
+static int s5m8767_convert_voltage_to_sel(
const struct s5m_voltage_desc *desc,
int min_vol, int max_vol)
{
- int out_vol = 0;
+ int selector = 0;
if (desc == NULL)
return -EINVAL;
if (max_vol < desc->min || min_vol > desc->max)
return -EINVAL;
- out_vol = (min_vol - desc->min) / desc->step;
+ selector = (min_vol - desc->min) / desc->step;
- if (desc->min + desc->step * out_vol > max_vol)
+ if (desc->min + desc->step * selector > max_vol)
return -EINVAL;
- return out_vol;
+ return selector;
}
static int s5m8767_set_voltage(struct regulator_dev *rdev,
int min_uV, int max_uV, unsigned *selector)
{
struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
- int min_vol = min_uV, max_vol = max_uV;
const struct s5m_voltage_desc *desc;
int reg_id = rdev_get_id(rdev);
int reg, mask, ret;
desc = reg_voltage_map[reg_id];
- i = s5m8767_convert_voltage(desc, min_vol, max_vol);
+ i = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
if (i < 0)
return i;
int reg_id = rdev_get_id(rdev);
const struct s5m_voltage_desc *desc;
int new_val, old_val, i = 0;
- int min_vol = min_uV, max_vol = max_uV;
if (reg_id < S5M8767_BUCK1 || reg_id > S5M8767_BUCK6)
return -EINVAL;
}
desc = reg_voltage_map[reg_id];
- new_val = s5m8767_convert_voltage(desc, min_vol, max_vol);
+ new_val = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
if (new_val < 0)
return new_val;
if (old_sel < new_sel)
return DIV_ROUND_UP(desc->step * (new_sel - old_sel),
- s5m8767->ramp_delay);
+ s5m8767->ramp_delay * 1000);
return 0;
}
return -ENODEV;
}
+ if (pdata->buck2_gpiodvs) {
+ if (pdata->buck3_gpiodvs || pdata->buck4_gpiodvs) {
+ dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
+ return -EINVAL;
+ }
+ }
+
+ if (pdata->buck3_gpiodvs) {
+ if (pdata->buck2_gpiodvs || pdata->buck4_gpiodvs) {
+ dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
+ return -EINVAL;
+ }
+ }
+
+ if (pdata->buck4_gpiodvs) {
+ if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs) {
+ dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
+ return -EINVAL;
+ }
+ }
+
s5m8767 = devm_kzalloc(&pdev->dev, sizeof(struct s5m8767_info),
GFP_KERNEL);
if (!s5m8767)
for (i = 0; i < 8; i++) {
if (s5m8767->buck2_gpiodvs) {
s5m8767->buck2_vol[i] =
- s5m8767_convert_voltage(
+ s5m8767_convert_voltage_to_sel(
&buck_voltage_val2,
pdata->buck2_voltage[i],
pdata->buck2_voltage[i] +
if (s5m8767->buck3_gpiodvs) {
s5m8767->buck3_vol[i] =
- s5m8767_convert_voltage(
+ s5m8767_convert_voltage_to_sel(
&buck_voltage_val2,
pdata->buck3_voltage[i],
pdata->buck3_voltage[i] +
if (s5m8767->buck4_gpiodvs) {
s5m8767->buck4_vol[i] =
- s5m8767_convert_voltage(
+ s5m8767_convert_voltage_to_sel(
&buck_voltage_val2,
pdata->buck4_voltage[i],
pdata->buck4_voltage[i] +
}
}
- if (pdata->buck2_gpiodvs) {
- if (pdata->buck3_gpiodvs || pdata->buck4_gpiodvs) {
- dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
- ret = -EINVAL;
- return ret;
- }
- }
-
- if (pdata->buck3_gpiodvs) {
- if (pdata->buck2_gpiodvs || pdata->buck4_gpiodvs) {
- dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
- ret = -EINVAL;
- return ret;
- }
- }
-
- if (pdata->buck4_gpiodvs) {
- if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs) {
- dev_err(&pdev->dev, "S5M8767 GPIO DVS NOT VALID\n");
- ret = -EINVAL;
- return ret;
- }
- }
-
s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
(pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1);
s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,