diff options
author | Sangbeom Kim <sbkim73@samsung.com> | 2012-06-13 04:28:18 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-13 13:45:09 -0400 |
commit | df2643cfa4ad4f3775838ad0c0815c465f351f92 (patch) | |
tree | b13d355dc487cf12483e5ba99be42693aaefc4ee /drivers/regulator/s5m8767.c | |
parent | 38c20eb23fb7b5505ac80595f18f4209abc19cd3 (diff) |
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: Sangbeom Kim <sbkim73@samsung.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator/s5m8767.c')
-rw-r--r-- | drivers/regulator/s5m8767.c | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c index 4edf344fb7c4..a4a3c7eefd1f 100644 --- a/drivers/regulator/s5m8767.c +++ b/drivers/regulator/s5m8767.c | |||
@@ -357,32 +357,34 @@ static int s5m8767_convert_voltage_to_sel( | |||
357 | return selector; | 357 | return selector; |
358 | } | 358 | } |
359 | 359 | ||
360 | static inline void s5m8767_set_high(struct s5m8767_info *s5m8767) | 360 | static inline int s5m8767_set_high(struct s5m8767_info *s5m8767) |
361 | { | 361 | { |
362 | int temp_index = s5m8767->buck_gpioindex; | 362 | int temp_index = s5m8767->buck_gpioindex; |
363 | 363 | ||
364 | gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); | 364 | gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); |
365 | gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); | 365 | gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); |
366 | gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); | 366 | gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); |
367 | |||
368 | return 0; | ||
367 | } | 369 | } |
368 | 370 | ||
369 | static inline void s5m8767_set_low(struct s5m8767_info *s5m8767) | 371 | static inline int s5m8767_set_low(struct s5m8767_info *s5m8767) |
370 | { | 372 | { |
371 | int temp_index = s5m8767->buck_gpioindex; | 373 | int temp_index = s5m8767->buck_gpioindex; |
372 | 374 | ||
373 | gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); | 375 | gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); |
374 | gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); | 376 | gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); |
375 | gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); | 377 | gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); |
378 | |||
379 | return 0; | ||
376 | } | 380 | } |
377 | 381 | ||
378 | static int s5m8767_set_voltage(struct regulator_dev *rdev, | 382 | static int s5m8767_set_voltage_sel(struct regulator_dev *rdev, |
379 | int min_uV, int max_uV, unsigned *selector) | 383 | unsigned selector) |
380 | { | 384 | { |
381 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); | 385 | struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); |
382 | const struct s5m_voltage_desc *desc; | ||
383 | int reg_id = rdev_get_id(rdev); | 386 | int reg_id = rdev_get_id(rdev); |
384 | int sel, reg, mask, ret = 0, old_index, index = 0; | 387 | int reg, mask, ret = 0, old_index, index = 0; |
385 | u8 val; | ||
386 | u8 *buck234_vol = NULL; | 388 | u8 *buck234_vol = NULL; |
387 | 389 | ||
388 | switch (reg_id) { | 390 | switch (reg_id) { |
@@ -407,15 +409,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, | |||
407 | return -EINVAL; | 409 | return -EINVAL; |
408 | } | 410 | } |
409 | 411 | ||
410 | desc = reg_voltage_map[reg_id]; | ||
411 | |||
412 | sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV); | ||
413 | if (sel < 0) | ||
414 | return sel; | ||
415 | |||
416 | /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */ | 412 | /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */ |
417 | if (buck234_vol) { | 413 | if (buck234_vol) { |
418 | while (*buck234_vol != sel) { | 414 | while (*buck234_vol != selector) { |
419 | buck234_vol++; | 415 | buck234_vol++; |
420 | index++; | 416 | index++; |
421 | } | 417 | } |
@@ -423,22 +419,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev, | |||
423 | s5m8767->buck_gpioindex = index; | 419 | s5m8767->buck_gpioindex = index; |
424 | 420 | ||
425 | if (index > old_index) | 421 | if (index > old_index) |
426 | s5m8767_set_high(s5m8767); | 422 | return s5m8767_set_high(s5m8767); |
427 | else | 423 | else |
428 | s5m8767_set_low(s5m8767); | 424 | return s5m8767_set_low(s5m8767); |
429 | } else { | 425 | } else { |
430 | ret = s5m8767_get_voltage_register(rdev, ®); | 426 | ret = s5m8767_get_voltage_register(rdev, ®); |
431 | if (ret) | 427 | if (ret) |
432 | return ret; | 428 | return ret; |
433 | 429 | ||
434 | s5m_reg_read(s5m8767->iodev, reg, &val); | 430 | return s5m_reg_update(s5m8767->iodev, reg, selector, mask); |
435 | val = (val & ~mask) | sel; | ||
436 | |||
437 | ret = s5m_reg_write(s5m8767->iodev, reg, val); | ||
438 | } | 431 | } |
439 | |||
440 | *selector = sel; | ||
441 | return ret; | ||
442 | } | 432 | } |
443 | 433 | ||
444 | static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, | 434 | static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, |
@@ -463,7 +453,7 @@ static struct regulator_ops s5m8767_ops = { | |||
463 | .enable = s5m8767_reg_enable, | 453 | .enable = s5m8767_reg_enable, |
464 | .disable = s5m8767_reg_disable, | 454 | .disable = s5m8767_reg_disable, |
465 | .get_voltage_sel = s5m8767_get_voltage_sel, | 455 | .get_voltage_sel = s5m8767_get_voltage_sel, |
466 | .set_voltage = s5m8767_set_voltage, | 456 | .set_voltage_sel = s5m8767_set_voltage_sel, |
467 | .set_voltage_time_sel = s5m8767_set_voltage_time_sel, | 457 | .set_voltage_time_sel = s5m8767_set_voltage_time_sel, |
468 | }; | 458 | }; |
469 | 459 | ||