From b950953ee22c0ac1b0b90c41f83636953288d293 Mon Sep 17 00:00:00 2001 From: Mark Brown Date: Mon, 27 Aug 2012 16:04:23 -0700 Subject: [PATCH] --- yaml --- r: 323315 b: refs/heads/master c: df36793115b4f68181877a1c89bac54feadd965d h: refs/heads/master i: 323313: 66c5949eae068afd07cb27aefe7ca1eeaec56d8b 323311: 4a521fa48a9a27441ddde8c44991aa0462e2799c v: v3 --- [refs] | 2 +- trunk/drivers/regulator/core.c | 41 ++++++++++++++++++++++++++ trunk/include/linux/regulator/driver.h | 4 +++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 745814325e8a..0a8203fe6749 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f59c8f9fe689790248ae7aa7426579982050638c +refs/heads/master: df36793115b4f68181877a1c89bac54feadd965d diff --git a/trunk/drivers/regulator/core.c b/trunk/drivers/regulator/core.c index 64e16053975e..419805cdd9d7 100644 --- a/trunk/drivers/regulator/core.c +++ b/trunk/drivers/regulator/core.c @@ -2698,6 +2698,47 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load) } EXPORT_SYMBOL_GPL(regulator_set_optimum_mode); +/** + * regulator_set_bypass_regmap - Default set_bypass() using regmap + * + * @rdev: device to operate on. + * @enable: state to set. + */ +int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable) +{ + unsigned int val; + + if (enable) + val = rdev->desc->bypass_mask; + else + val = 0; + + return regmap_update_bits(rdev->regmap, rdev->desc->bypass_reg, + rdev->desc->bypass_mask, val); +} +EXPORT_SYMBOL_GPL(regulator_set_bypass_regmap); + +/** + * regulator_get_bypass_regmap - Default get_bypass() using regmap + * + * @rdev: device to operate on. + * @enable: current state. + */ +int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable) +{ + unsigned int val; + int ret; + + ret = regmap_read(rdev->regmap, rdev->desc->bypass_reg, &val); + if (ret != 0) + return ret; + + *enable = val & rdev->desc->bypass_mask; + + return 0; +} +EXPORT_SYMBOL_GPL(regulator_get_bypass_regmap); + /** * regulator_allow_bypass - allow the regulator to go into bypass mode * diff --git a/trunk/include/linux/regulator/driver.h b/trunk/include/linux/regulator/driver.h index c9869cfbf261..7274a469e8d9 100644 --- a/trunk/include/linux/regulator/driver.h +++ b/trunk/include/linux/regulator/driver.h @@ -214,6 +214,8 @@ struct regulator_desc { unsigned int vsel_mask; unsigned int enable_reg; unsigned int enable_mask; + unsigned int bypass_reg; + unsigned int bypass_mask; unsigned int enable_time; }; @@ -320,6 +322,8 @@ int regulator_disable_regmap(struct regulator_dev *rdev); int regulator_set_voltage_time_sel(struct regulator_dev *rdev, unsigned int old_selector, unsigned int new_selector); +int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable); +int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable); void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);