diff options
-rw-r--r-- | drivers/regulator/core.c | 41 | ||||
-rw-r--r-- | include/linux/regulator/driver.h | 4 |
2 files changed, 45 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 64e16053975e..419805cdd9d7 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -2699,6 +2699,47 @@ out: | |||
2699 | EXPORT_SYMBOL_GPL(regulator_set_optimum_mode); | 2699 | EXPORT_SYMBOL_GPL(regulator_set_optimum_mode); |
2700 | 2700 | ||
2701 | /** | 2701 | /** |
2702 | * regulator_set_bypass_regmap - Default set_bypass() using regmap | ||
2703 | * | ||
2704 | * @rdev: device to operate on. | ||
2705 | * @enable: state to set. | ||
2706 | */ | ||
2707 | int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable) | ||
2708 | { | ||
2709 | unsigned int val; | ||
2710 | |||
2711 | if (enable) | ||
2712 | val = rdev->desc->bypass_mask; | ||
2713 | else | ||
2714 | val = 0; | ||
2715 | |||
2716 | return regmap_update_bits(rdev->regmap, rdev->desc->bypass_reg, | ||
2717 | rdev->desc->bypass_mask, val); | ||
2718 | } | ||
2719 | EXPORT_SYMBOL_GPL(regulator_set_bypass_regmap); | ||
2720 | |||
2721 | /** | ||
2722 | * regulator_get_bypass_regmap - Default get_bypass() using regmap | ||
2723 | * | ||
2724 | * @rdev: device to operate on. | ||
2725 | * @enable: current state. | ||
2726 | */ | ||
2727 | int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable) | ||
2728 | { | ||
2729 | unsigned int val; | ||
2730 | int ret; | ||
2731 | |||
2732 | ret = regmap_read(rdev->regmap, rdev->desc->bypass_reg, &val); | ||
2733 | if (ret != 0) | ||
2734 | return ret; | ||
2735 | |||
2736 | *enable = val & rdev->desc->bypass_mask; | ||
2737 | |||
2738 | return 0; | ||
2739 | } | ||
2740 | EXPORT_SYMBOL_GPL(regulator_get_bypass_regmap); | ||
2741 | |||
2742 | /** | ||
2702 | * regulator_allow_bypass - allow the regulator to go into bypass mode | 2743 | * regulator_allow_bypass - allow the regulator to go into bypass mode |
2703 | * | 2744 | * |
2704 | * @regulator: Regulator to configure | 2745 | * @regulator: Regulator to configure |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index c9869cfbf261..7274a469e8d9 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
@@ -214,6 +214,8 @@ struct regulator_desc { | |||
214 | unsigned int vsel_mask; | 214 | unsigned int vsel_mask; |
215 | unsigned int enable_reg; | 215 | unsigned int enable_reg; |
216 | unsigned int enable_mask; | 216 | unsigned int enable_mask; |
217 | unsigned int bypass_reg; | ||
218 | unsigned int bypass_mask; | ||
217 | 219 | ||
218 | unsigned int enable_time; | 220 | unsigned int enable_time; |
219 | }; | 221 | }; |
@@ -320,6 +322,8 @@ int regulator_disable_regmap(struct regulator_dev *rdev); | |||
320 | int regulator_set_voltage_time_sel(struct regulator_dev *rdev, | 322 | int regulator_set_voltage_time_sel(struct regulator_dev *rdev, |
321 | unsigned int old_selector, | 323 | unsigned int old_selector, |
322 | unsigned int new_selector); | 324 | unsigned int new_selector); |
325 | int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable); | ||
326 | int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable); | ||
323 | 327 | ||
324 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); | 328 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); |
325 | 329 | ||