diff options
author | Axel Lin <axel.lin@ingics.com> | 2013-03-05 01:16:00 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-03-05 04:56:39 -0500 |
commit | 51dcdafcb720a9d1fd73b597d0ccf48837abc59f (patch) | |
tree | 26eac5d173fb62350aadeb35a63f908acedfbc85 | |
parent | 0ac682db5c18358d6b3606cab6147dc294c4286d (diff) |
regulator: core: Add enable_is_inverted flag to indicate set enable_mask bits to disable
Add enable_is_inverted flag to indicate set enable_mask bits to disable
when using regulator_enable_regmap and friends APIs.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Reviewed-by: Haojian Zhuang <haojian.zhuang@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | drivers/regulator/core.c | 24 | ||||
-rw-r--r-- | include/linux/regulator/driver.h | 3 |
2 files changed, 23 insertions, 4 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 154bc8f0c1a0..d887b9f5b213 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -1794,7 +1794,10 @@ int regulator_is_enabled_regmap(struct regulator_dev *rdev) | |||
1794 | if (ret != 0) | 1794 | if (ret != 0) |
1795 | return ret; | 1795 | return ret; |
1796 | 1796 | ||
1797 | return (val & rdev->desc->enable_mask) != 0; | 1797 | if (rdev->desc->enable_is_inverted) |
1798 | return (val & rdev->desc->enable_mask) == 0; | ||
1799 | else | ||
1800 | return (val & rdev->desc->enable_mask) != 0; | ||
1798 | } | 1801 | } |
1799 | EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap); | 1802 | EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap); |
1800 | 1803 | ||
@@ -1809,9 +1812,15 @@ EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap); | |||
1809 | */ | 1812 | */ |
1810 | int regulator_enable_regmap(struct regulator_dev *rdev) | 1813 | int regulator_enable_regmap(struct regulator_dev *rdev) |
1811 | { | 1814 | { |
1815 | unsigned int val; | ||
1816 | |||
1817 | if (rdev->desc->enable_is_inverted) | ||
1818 | val = 0; | ||
1819 | else | ||
1820 | val = rdev->desc->enable_mask; | ||
1821 | |||
1812 | return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, | 1822 | return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, |
1813 | rdev->desc->enable_mask, | 1823 | rdev->desc->enable_mask, val); |
1814 | rdev->desc->enable_mask); | ||
1815 | } | 1824 | } |
1816 | EXPORT_SYMBOL_GPL(regulator_enable_regmap); | 1825 | EXPORT_SYMBOL_GPL(regulator_enable_regmap); |
1817 | 1826 | ||
@@ -1826,8 +1835,15 @@ EXPORT_SYMBOL_GPL(regulator_enable_regmap); | |||
1826 | */ | 1835 | */ |
1827 | int regulator_disable_regmap(struct regulator_dev *rdev) | 1836 | int regulator_disable_regmap(struct regulator_dev *rdev) |
1828 | { | 1837 | { |
1838 | unsigned int val; | ||
1839 | |||
1840 | if (rdev->desc->enable_is_inverted) | ||
1841 | val = rdev->desc->enable_mask; | ||
1842 | else | ||
1843 | val = 0; | ||
1844 | |||
1829 | return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, | 1845 | return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, |
1830 | rdev->desc->enable_mask, 0); | 1846 | rdev->desc->enable_mask, val); |
1831 | } | 1847 | } |
1832 | EXPORT_SYMBOL_GPL(regulator_disable_regmap); | 1848 | EXPORT_SYMBOL_GPL(regulator_disable_regmap); |
1833 | 1849 | ||
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 7df93f52db08..07ea8f1a127e 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
@@ -199,6 +199,8 @@ enum regulator_type { | |||
199 | * output when using regulator_set_voltage_sel_regmap | 199 | * output when using regulator_set_voltage_sel_regmap |
200 | * @enable_reg: Register for control when using regmap enable/disable ops | 200 | * @enable_reg: Register for control when using regmap enable/disable ops |
201 | * @enable_mask: Mask for control when using regmap enable/disable ops | 201 | * @enable_mask: Mask for control when using regmap enable/disable ops |
202 | * @enable_is_inverted: A flag to indicate set enable_mask bits to disable | ||
203 | * when using regulator_enable_regmap and friends APIs. | ||
202 | * @bypass_reg: Register for control when using regmap set_bypass | 204 | * @bypass_reg: Register for control when using regmap set_bypass |
203 | * @bypass_mask: Mask for control when using regmap set_bypass | 205 | * @bypass_mask: Mask for control when using regmap set_bypass |
204 | * | 206 | * |
@@ -228,6 +230,7 @@ struct regulator_desc { | |||
228 | unsigned int apply_bit; | 230 | unsigned int apply_bit; |
229 | unsigned int enable_reg; | 231 | unsigned int enable_reg; |
230 | unsigned int enable_mask; | 232 | unsigned int enable_mask; |
233 | bool enable_is_inverted; | ||
231 | unsigned int bypass_reg; | 234 | unsigned int bypass_reg; |
232 | unsigned int bypass_mask; | 235 | unsigned int bypass_mask; |
233 | 236 | ||