diff options
| author | Axel Lin <axel.lin@ingics.com> | 2014-03-21 02:54:08 -0400 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2014-03-21 13:47:49 -0400 |
| commit | 9c4c60554acfd6e32fe933cef43b2c16e65f1e4f (patch) | |
| tree | 31d2067324acb598da4e583f036800c66575d136 | |
| parent | 4754b4211ddc9e6ebec97b0088a1c0ecb558f780 (diff) | |
regulator: s5m8767: Convert to use regulator_[enable|disable|is_enabled]_regmap
Since commit ca5d1b3524b4d
"regulator: helpers: Modify helpers enabling multi-bit control",
we can set enable_val setting for device that use multiple bits for control.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Tested-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
| -rw-r--r-- | drivers/regulator/s5m8767.c | 78 |
1 files changed, 19 insertions, 59 deletions
diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c index 6884eb880dc9..b6ddb03ee762 100644 --- a/drivers/regulator/s5m8767.c +++ b/drivers/regulator/s5m8767.c | |||
| @@ -167,12 +167,11 @@ static unsigned int s5m8767_opmode_reg[][4] = { | |||
| 167 | {0x0, 0x3, 0x1, 0x1}, /* BUCK9 */ | 167 | {0x0, 0x3, 0x1, 0x1}, /* BUCK9 */ |
| 168 | }; | 168 | }; |
| 169 | 169 | ||
| 170 | static int s5m8767_get_register(struct regulator_dev *rdev, int *reg, | 170 | static int s5m8767_get_register(struct s5m8767_info *s5m8767, int reg_id, |
| 171 | int *enable_ctrl) | 171 | int *reg, int *enable_ctrl) |
| 172 | { | 172 | { |
| 173 | int i, reg_id = rdev_get_id(rdev); | 173 | int i; |
| 174 | unsigned int mode; | 174 | unsigned int mode; |
| 175 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); | ||
| 176 | 175 | ||
| 177 | switch (reg_id) { | 176 | switch (reg_id) { |
| 178 | case S5M8767_LDO1 ... S5M8767_LDO2: | 177 | case S5M8767_LDO1 ... S5M8767_LDO2: |
| @@ -211,53 +210,6 @@ static int s5m8767_get_register(struct regulator_dev *rdev, int *reg, | |||
| 211 | return 0; | 210 | return 0; |
| 212 | } | 211 | } |
| 213 | 212 | ||
| 214 | static int s5m8767_reg_is_enabled(struct regulator_dev *rdev) | ||
| 215 | { | ||
| 216 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); | ||
| 217 | int ret, reg; | ||
| 218 | int enable_ctrl; | ||
| 219 | unsigned int val; | ||
| 220 | |||
| 221 | ret = s5m8767_get_register(rdev, ®, &enable_ctrl); | ||
| 222 | if (ret == -EINVAL) | ||
| 223 | return 1; | ||
| 224 | else if (ret) | ||
| 225 | return ret; | ||
| 226 | |||
| 227 | ret = regmap_read(s5m8767->iodev->regmap_pmic, reg, &val); | ||
| 228 | if (ret) | ||
| 229 | return ret; | ||
| 230 | |||
| 231 | return (val & S5M8767_ENCTRL_MASK) == enable_ctrl; | ||
| 232 | } | ||
| 233 | |||
| 234 | static int s5m8767_reg_enable(struct regulator_dev *rdev) | ||
| 235 | { | ||
| 236 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); | ||
| 237 | int ret, reg; | ||
| 238 | int enable_ctrl; | ||
| 239 | |||
| 240 | ret = s5m8767_get_register(rdev, ®, &enable_ctrl); | ||
| 241 | if (ret) | ||
| 242 | return ret; | ||
| 243 | |||
| 244 | return regmap_update_bits(s5m8767->iodev->regmap_pmic, reg, | ||
| 245 | S5M8767_ENCTRL_MASK, enable_ctrl); | ||
| 246 | } | ||
| 247 | |||
| 248 | static int s5m8767_reg_disable(struct regulator_dev *rdev) | ||
| 249 | { | ||
| 250 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); | ||
| 251 | int ret, reg, enable_ctrl; | ||
| 252 | |||
| 253 | ret = s5m8767_get_register(rdev, ®, &enable_ctrl); | ||
| 254 | if (ret) | ||
| 255 | return ret; | ||
| 256 | |||
| 257 | return regmap_update_bits(s5m8767->iodev->regmap_pmic, reg, | ||
| 258 | S5M8767_ENCTRL_MASK, ~S5M8767_ENCTRL_MASK); | ||
| 259 | } | ||
| 260 | |||
| 261 | static int s5m8767_get_vsel_reg(int reg_id, struct s5m8767_info *s5m8767) | 213 | static int s5m8767_get_vsel_reg(int reg_id, struct s5m8767_info *s5m8767) |
| 262 | { | 214 | { |
| 263 | int reg; | 215 | int reg; |
| @@ -407,9 +359,9 @@ static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, | |||
| 407 | 359 | ||
| 408 | static struct regulator_ops s5m8767_ops = { | 360 | static struct regulator_ops s5m8767_ops = { |
| 409 | .list_voltage = regulator_list_voltage_linear, | 361 | .list_voltage = regulator_list_voltage_linear, |
| 410 | .is_enabled = s5m8767_reg_is_enabled, | 362 | .is_enabled = regulator_is_enabled_regmap, |
| 411 | .enable = s5m8767_reg_enable, | 363 | .enable = regulator_enable_regmap, |
| 412 | .disable = s5m8767_reg_disable, | 364 | .disable = regulator_disable_regmap, |
| 413 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 365 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
| 414 | .set_voltage_sel = s5m8767_set_voltage_sel, | 366 | .set_voltage_sel = s5m8767_set_voltage_sel, |
| 415 | .set_voltage_time_sel = s5m8767_set_voltage_time_sel, | 367 | .set_voltage_time_sel = s5m8767_set_voltage_time_sel, |
| @@ -417,9 +369,9 @@ static struct regulator_ops s5m8767_ops = { | |||
| 417 | 369 | ||
| 418 | static struct regulator_ops s5m8767_buck78_ops = { | 370 | static struct regulator_ops s5m8767_buck78_ops = { |
| 419 | .list_voltage = regulator_list_voltage_linear, | 371 | .list_voltage = regulator_list_voltage_linear, |
| 420 | .is_enabled = s5m8767_reg_is_enabled, | 372 | .is_enabled = regulator_is_enabled_regmap, |
| 421 | .enable = s5m8767_reg_enable, | 373 | .enable = regulator_enable_regmap, |
| 422 | .disable = s5m8767_reg_disable, | 374 | .disable = regulator_disable_regmap, |
| 423 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 375 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
| 424 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | 376 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
| 425 | }; | 377 | }; |
| @@ -524,12 +476,13 @@ static void s5m8767_regulator_config_ext_control(struct s5m8767_info *s5m8767, | |||
| 524 | static int s5m8767_enable_ext_control(struct s5m8767_info *s5m8767, | 476 | static int s5m8767_enable_ext_control(struct s5m8767_info *s5m8767, |
| 525 | struct regulator_dev *rdev) | 477 | struct regulator_dev *rdev) |
| 526 | { | 478 | { |
| 479 | int id = rdev_get_id(rdev); | ||
| 527 | int ret, reg, enable_ctrl; | 480 | int ret, reg, enable_ctrl; |
| 528 | 481 | ||
| 529 | if (rdev_get_id(rdev) != S5M8767_BUCK9) | 482 | if (id != S5M8767_BUCK9) |
| 530 | return -EINVAL; | 483 | return -EINVAL; |
| 531 | 484 | ||
| 532 | ret = s5m8767_get_register(rdev, ®, &enable_ctrl); | 485 | ret = s5m8767_get_register(s5m8767, id, ®, &enable_ctrl); |
| 533 | if (ret) | 486 | if (ret) |
| 534 | return ret; | 487 | return ret; |
| 535 | 488 | ||
| @@ -982,6 +935,7 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) | |||
| 982 | for (i = 0; i < pdata->num_regulators; i++) { | 935 | for (i = 0; i < pdata->num_regulators; i++) { |
| 983 | const struct sec_voltage_desc *desc; | 936 | const struct sec_voltage_desc *desc; |
| 984 | int id = pdata->regulators[i].id; | 937 | int id = pdata->regulators[i].id; |
| 938 | int enable_reg, enable_val; | ||
| 985 | 939 | ||
| 986 | desc = reg_voltage_map[id]; | 940 | desc = reg_voltage_map[id]; |
| 987 | if (desc) { | 941 | if (desc) { |
| @@ -995,6 +949,12 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) | |||
| 995 | regulators[id].vsel_mask = 0x3f; | 949 | regulators[id].vsel_mask = 0x3f; |
| 996 | else | 950 | else |
| 997 | regulators[id].vsel_mask = 0xff; | 951 | regulators[id].vsel_mask = 0xff; |
| 952 | |||
| 953 | s5m8767_get_register(s5m8767, id, &enable_reg, | ||
| 954 | &enable_val); | ||
| 955 | regulators[id].enable_reg = enable_reg; | ||
| 956 | regulators[id].enable_mask = S5M8767_ENCTRL_MASK; | ||
| 957 | regulators[id].enable_val = enable_val; | ||
| 998 | } | 958 | } |
| 999 | 959 | ||
| 1000 | config.dev = s5m8767->dev; | 960 | config.dev = s5m8767->dev; |
