Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Axel Lin and committed by
Mark Brown
51dcdafc 0ac682db

+23 -4
+20 -4
drivers/regulator/core.c
··· 1794 1794 if (ret != 0) 1795 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 1802 EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap); 1800 1803 ··· 1812 1809 */ 1813 1810 int regulator_enable_regmap(struct regulator_dev *rdev) 1814 1811 { 1812 + unsigned int val; 1813 + 1814 + if (rdev->desc->enable_is_inverted) 1815 + val = 0; 1816 + else 1817 + val = rdev->desc->enable_mask; 1818 + 1815 1819 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, 1816 - rdev->desc->enable_mask, 1817 - rdev->desc->enable_mask); 1820 + rdev->desc->enable_mask, val); 1818 1821 } 1819 1822 EXPORT_SYMBOL_GPL(regulator_enable_regmap); 1820 1823 ··· 1835 1826 */ 1836 1827 int regulator_disable_regmap(struct regulator_dev *rdev) 1837 1828 { 1829 + unsigned int val; 1830 + 1831 + if (rdev->desc->enable_is_inverted) 1832 + val = rdev->desc->enable_mask; 1833 + else 1834 + val = 0; 1835 + 1838 1836 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, 1839 - rdev->desc->enable_mask, 0); 1837 + rdev->desc->enable_mask, val); 1840 1838 } 1841 1839 EXPORT_SYMBOL_GPL(regulator_disable_regmap); 1842 1840
+3
include/linux/regulator/driver.h
··· 199 199 * output when using regulator_set_voltage_sel_regmap 200 200 * @enable_reg: Register for control when using regmap enable/disable ops 201 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 204 * @bypass_reg: Register for control when using regmap set_bypass 203 205 * @bypass_mask: Mask for control when using regmap set_bypass 204 206 * ··· 230 228 unsigned int apply_bit; 231 229 unsigned int enable_reg; 232 230 unsigned int enable_mask; 231 + bool enable_is_inverted; 233 232 unsigned int bypass_reg; 234 233 unsigned int bypass_mask; 235 234