linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 1/3] regulator: add always set/clear masks to regulator_enable_regmap
@ 2012-08-08 21:18 Stephen Warren
  2012-08-08 21:18 ` [PATCH V2 2/3] regulator: add regulator_get_voltage_fixed helper op Stephen Warren
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Stephen Warren @ 2012-08-08 21:18 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood; +Cc: Laxman Dewangan, linux-kernel, Stephen Warren

From: Stephen Warren <swarren@nvidia.com>

Some regulators need some register bits set or cleared in order to place
them under software control. Add .en_dis_set_mask and .en_dis_clr_mask
fields to struct regulator_desc. These can't be part of the existing
.enable_mask field, whose bits are set when enabled and cleared when
disabled, since the bits in this field need to be set/cleard irrespective
of regulator state.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
v2: New patch

 drivers/regulator/core.c         |   22 +++++++++++++++-------
 include/linux/regulator/driver.h |    4 ++++
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index b28221a..457be22 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1762,14 +1762,18 @@ EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap);
  * @rdev: regulator to operate on
  *
  * Regulators that use regmap for their register I/O can set the
- * enable_reg and enable_mask fields in their descriptor and then use
- * this as their enable() operation, saving some code.
+ * enable_reg, enable_mask, en_dis_set_mask, and en_dis_clr_mask fields in
+ * their descriptor and then use this as their enable() operation, saving
+ * some code.
  */
 int regulator_enable_regmap(struct regulator_dev *rdev)
 {
 	return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
-				  rdev->desc->enable_mask,
-				  rdev->desc->enable_mask);
+				  rdev->desc->enable_mask |
+				  rdev->desc->en_dis_set_mask |
+				  rdev->desc->en_dis_clr_mask,
+				  rdev->desc->enable_mask |
+				  rdev->desc->en_dis_set_mask);
 }
 EXPORT_SYMBOL_GPL(regulator_enable_regmap);
 
@@ -1779,13 +1783,17 @@ EXPORT_SYMBOL_GPL(regulator_enable_regmap);
  * @rdev: regulator to operate on
  *
  * Regulators that use regmap for their register I/O can set the
- * enable_reg and enable_mask fields in their descriptor and then use
- * this as their disable() operation, saving some code.
+ * enable_reg, enable_mask, en_dis_set_mask, and en_dis_clr_mask fields in
+ * their descriptor and then use this as their disable() operation, saving
+ * some code.
  */
 int regulator_disable_regmap(struct regulator_dev *rdev)
 {
 	return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
-				  rdev->desc->enable_mask, 0);
+				  rdev->desc->enable_mask |
+				  rdev->desc->en_dis_set_mask |
+				  rdev->desc->en_dis_clr_mask,
+				  rdev->desc->en_dis_set_mask);
 }
 EXPORT_SYMBOL_GPL(regulator_disable_regmap);
 
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index bac4c87..2c40c86 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -182,6 +182,8 @@ enum regulator_type {
  * @vsel_mask: Mask for register bitfield used for selector
  * @enable_reg: Register for control when using regmap enable/disable ops
  * @enable_mask: Mask for control when using regmap enable/disable ops
+ * @en_dis_set_mask: Mask to always set when using regmap enable/disable ops
+ * @en_dis_clr_mask: Mask to always clear when using regmap enable/disable ops
  *
  * @enable_time: Time taken for initial enable of regulator (in uS).
  */
@@ -205,6 +207,8 @@ struct regulator_desc {
 	unsigned int vsel_mask;
 	unsigned int enable_reg;
 	unsigned int enable_mask;
+	unsigned int en_dis_set_mask;
+	unsigned int en_dis_clr_mask;
 
 	unsigned int enable_time;
 };
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-08-09 15:45 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-08 21:18 [PATCH V2 1/3] regulator: add always set/clear masks to regulator_enable_regmap Stephen Warren
2012-08-08 21:18 ` [PATCH V2 2/3] regulator: add regulator_get_voltage_fixed helper op Stephen Warren
2012-08-09 10:59   ` Mark Brown
2012-08-09 15:22     ` Stephen Warren
2012-08-09 15:44       ` Mark Brown
2012-08-08 21:18 ` [PATCH V2 3/3] regulator: add MAX8907 driver Stephen Warren
2012-08-09 11:04   ` Mark Brown
2012-08-09 12:19   ` Laxman Dewangan
2012-08-09 12:38     ` Mark Brown
2012-08-09 12:27       ` Laxman Dewangan
2012-08-09 13:00         ` Mark Brown
2012-08-09 12:52           ` Laxman Dewangan
2012-08-09 10:09 ` [PATCH V2 1/3] regulator: add always set/clear masks to regulator_enable_regmap Mark Brown
2012-08-09 15:17   ` Stephen Warren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).