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

rtc: ds1307: use regmap_update_bits where applicable

After the switch to regmap we can now make use of regmap_update_bits
to simplify read/modify/write ops.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

authored by

Heiner Kallweit and committed by
Alexandre Belloni
078f3f64 c4f07ece

+20 -62
+20 -62
drivers/rtc/rtc-ds1307.c
··· 297 297 { 298 298 struct ds1307 *ds1307 = dev_id; 299 299 struct mutex *lock = &ds1307->rtc->ops_lock; 300 - int stat, control, ret; 300 + int stat, ret; 301 301 302 302 mutex_lock(lock); 303 303 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &stat); ··· 308 308 stat &= ~DS1337_BIT_A1I; 309 309 regmap_write(ds1307->regmap, DS1337_REG_STATUS, stat); 310 310 311 - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); 311 + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, 312 + DS1337_BIT_A1IE, 0); 312 313 if (ret) 313 314 goto out; 314 - 315 - control &= ~DS1337_BIT_A1IE; 316 - regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); 317 315 318 316 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); 319 317 } ··· 565 567 static int ds1307_alarm_irq_enable(struct device *dev, unsigned int enabled) 566 568 { 567 569 struct ds1307 *ds1307 = dev_get_drvdata(dev); 568 - int control, ret; 569 570 570 571 if (!test_bit(HAS_ALARM, &ds1307->flags)) 571 572 return -ENOTTY; 572 573 573 - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); 574 - if (ret) 575 - return ret; 576 - 577 - if (enabled) 578 - control |= DS1337_BIT_A1IE; 579 - else 580 - control &= ~DS1337_BIT_A1IE; 581 - 582 - return regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); 574 + return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, 575 + DS1337_BIT_A1IE, 576 + enabled ? DS1337_BIT_A1IE : 0); 583 577 } 584 578 585 579 static const struct rtc_class_ops ds13xx_rtc_ops = { ··· 785 795 goto out; 786 796 787 797 /* Disable alarm 0. */ 788 - ret = regmap_read(ds1307->regmap, MCP794XX_REG_CONTROL, &reg); 789 - if (ret) 790 - goto out; 791 - reg &= ~MCP794XX_BIT_ALM0_EN; 792 - ret = regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, reg); 798 + ret = regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, 799 + MCP794XX_BIT_ALM0_EN, 0); 793 800 if (ret) 794 801 goto out; 795 802 ··· 884 897 static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled) 885 898 { 886 899 struct ds1307 *ds1307 = dev_get_drvdata(dev); 887 - int reg, ret; 888 900 889 901 if (!test_bit(HAS_ALARM, &ds1307->flags)) 890 902 return -EINVAL; 891 903 892 - ret = regmap_read(ds1307->regmap, MCP794XX_REG_CONTROL, &reg); 893 - if (ret) 894 - return ret; 895 - 896 - if (enabled) 897 - reg |= MCP794XX_BIT_ALM0_EN; 898 - else 899 - reg &= ~MCP794XX_BIT_ALM0_EN; 900 - 901 - return regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, reg); 904 + return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, 905 + MCP794XX_BIT_ALM0_EN, 906 + enabled ? MCP794XX_BIT_ALM0_EN : 0); 902 907 } 903 908 904 909 static const struct rtc_class_ops mcp794xx_rtc_ops = { ··· 1093 1114 static int ds1337_write_control(struct ds1307 *ds1307, u8 mask, u8 value) 1094 1115 { 1095 1116 struct mutex *lock = &ds1307->rtc->ops_lock; 1096 - int control; 1097 1117 int ret; 1098 1118 1099 1119 mutex_lock(lock); 1100 - 1101 - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); 1102 - if (ret) 1103 - goto out; 1104 - 1105 - control &= ~mask; 1106 - control |= value; 1107 - 1108 - ret = regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); 1109 - out: 1120 + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, 1121 + mask, value); 1110 1122 mutex_unlock(lock); 1111 1123 1112 1124 return ret; ··· 1203 1233 static int ds3231_clk_32khz_control(struct ds1307 *ds1307, bool enable) 1204 1234 { 1205 1235 struct mutex *lock = &ds1307->rtc->ops_lock; 1206 - int status; 1207 1236 int ret; 1208 1237 1209 1238 mutex_lock(lock); 1210 - 1211 - ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &status); 1212 - if (ret) 1213 - goto out; 1214 - 1215 - if (enable) 1216 - status |= DS3231_BIT_EN32KHZ; 1217 - else 1218 - status &= ~DS3231_BIT_EN32KHZ; 1219 - 1220 - ret = regmap_write(ds1307->regmap, DS1337_REG_STATUS, status); 1221 - out: 1239 + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_STATUS, 1240 + DS3231_BIT_EN32KHZ, 1241 + enable ? DS3231_BIT_EN32KHZ : 0); 1222 1242 mutex_unlock(lock); 1223 1243 1224 1244 return ret; ··· 1672 1712 * If different then set the wday which we computed using 1673 1713 * timestamp 1674 1714 */ 1675 - if (wday != tm.tm_wday) { 1676 - regmap_read(ds1307->regmap, MCP794XX_REG_WEEKDAY, &wday); 1677 - wday = wday & ~MCP794XX_REG_WEEKDAY_WDAY_MASK; 1678 - wday = wday | (tm.tm_wday + 1); 1679 - regmap_write(ds1307->regmap, MCP794XX_REG_WEEKDAY, wday); 1680 - } 1715 + if (wday != tm.tm_wday) 1716 + regmap_update_bits(ds1307->regmap, MCP794XX_REG_WEEKDAY, 1717 + MCP794XX_REG_WEEKDAY_WDAY_MASK, 1718 + tm.tm_wday + 1); 1681 1719 1682 1720 if (want_irq) { 1683 1721 device_set_wakeup_capable(ds1307->dev, true);