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

Merge tag 'rtc-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux

Pull RTC updates from Alexandre Belloni:
"Mostly small fixes and two drivers gaining alarm support. Summary:

Subsystem:

- UIE emulation has been reworked to avoid calling driver callbacks
when it is known it will not work

Drivers:

- ab-eoz9: add alarm support

- pcf8523: add alarm support"

* tag 'rtc-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (27 commits)
rtc: sysfs: check features instead of ops
rtc: omap: use rtc_write to access OMAP_RTC_OSC_REG
rtc: s5m: Remove reference to parent's device pdata
rtc: ds1307: Fix wday settings for rx8130
rtc: pcf8523: report oscillator failures
rtc: pcf8523: add alarm support
rtc: pcf8523: remove useless define
rtc: rtc_update_irq_enable: rework UIE emulation
rtc: ds1307: remove flags
rtc: ds1307: replace HAS_ALARM by RTC_FEATURE_ALARM
rtc: imx-sc: remove .read_alarm
rtc: ds1511: remove unused function
rtc: fsl-ftm-alarm: add MODULE_TABLE()
rtc: rtc-spear: replace spin_lock_irqsave by spin_lock in hard IRQ
dt-bindings: rtc: qcom-pm8xxx-rtc: Add qcom pm8xxx rtc bindings
rtc: pm8xxx: Add RTC support for PMIC PMK8350
rtc: ab-eoz9: make use of RTC_FEATURE_ALARM
rtc: ab-eoz9: add alarm support
rtc: ab-eoz9: set regmap max_register
rtc: pcf85063: fallback to parent of_node
...

+450 -111
+62
Documentation/devicetree/bindings/rtc/qcom-pm8xxx-rtc.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/rtc/qcom-pm8xxx-rtc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm PM8xxx PMIC RTC device 8 + 9 + maintainers: 10 + - Satya Priya <skakit@codeaurora.org> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - qcom,pm8058-rtc 16 + - qcom,pm8921-rtc 17 + - qcom,pm8941-rtc 18 + - qcom,pm8018-rtc 19 + - qcom,pmk8350-rtc 20 + 21 + reg: 22 + maxItems: 1 23 + 24 + interrupts: 25 + maxItems: 1 26 + 27 + allow-set-time: 28 + $ref: /schemas/types.yaml#/definitions/flag 29 + description: 30 + Indicates that the setting of RTC time is allowed by the host CPU. 31 + 32 + required: 33 + - compatible 34 + - reg 35 + - interrupts 36 + 37 + additionalProperties: false 38 + 39 + examples: 40 + - | 41 + #include <dt-bindings/spmi/spmi.h> 42 + spmi_bus: spmi@c440000 { 43 + reg = <0x0c440000 0x1100>; 44 + #address-cells = <2>; 45 + #size-cells = <0>; 46 + pmicintc: pmic@0 { 47 + reg = <0x0 SPMI_USID>; 48 + compatible = "qcom,pm8921"; 49 + interrupts = <104 8>; 50 + #interrupt-cells = <2>; 51 + interrupt-controller; 52 + #address-cells = <1>; 53 + #size-cells = <0>; 54 + 55 + pm8921_rtc: rtc@11d { 56 + compatible = "qcom,pm8921-rtc"; 57 + reg = <0x11d>; 58 + interrupts = <0x27 0>; 59 + }; 60 + }; 61 + }; 62 + ...
+2 -1
drivers/rtc/Kconfig
··· 1339 1339 config RTC_DRV_IMXDI 1340 1340 tristate "Freescale IMX DryIce Real Time Clock" 1341 1341 depends on ARCH_MXC 1342 + depends on OF 1342 1343 help 1343 1344 Support for Freescale IMX DryIce RTC 1344 1345 ··· 1907 1906 1908 1907 config RTC_DRV_GOLDFISH 1909 1908 tristate "Goldfish Real Time Clock" 1910 - depends on OF && HAS_IOMEM 1909 + depends on HAS_IOMEM 1911 1910 help 1912 1911 Say yes to enable RTC driver for the Goldfish based virtual platform. 1913 1912
+10 -24
drivers/rtc/interface.c
··· 545 545 546 546 int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled) 547 547 { 548 - int rc = 0, err; 548 + int err; 549 549 550 550 err = mutex_lock_interruptible(&rtc->ops_lock); 551 551 if (err) ··· 561 561 if (rtc->uie_rtctimer.enabled == enabled) 562 562 goto out; 563 563 564 - if (rtc->uie_unsupported) { 565 - err = -EINVAL; 566 - goto out; 564 + if (rtc->uie_unsupported || !test_bit(RTC_FEATURE_ALARM, rtc->features)) { 565 + mutex_unlock(&rtc->ops_lock); 566 + #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 567 + return rtc_dev_update_irq_enable_emul(rtc, enabled); 568 + #else 569 + return -EINVAL; 570 + #endif 567 571 } 568 572 569 573 if (enabled) { 570 574 struct rtc_time tm; 571 575 ktime_t now, onesec; 572 576 573 - rc = __rtc_read_time(rtc, &tm); 574 - if (rc) 577 + err = __rtc_read_time(rtc, &tm); 578 + if (err) 575 579 goto out; 576 580 onesec = ktime_set(1, 0); 577 581 now = rtc_tm_to_ktime(tm); ··· 589 585 out: 590 586 mutex_unlock(&rtc->ops_lock); 591 587 592 - /* 593 - * __rtc_read_time() failed, this probably means that the RTC time has 594 - * never been set or less probably there is a transient error on the 595 - * bus. In any case, avoid enabling emulation has this will fail when 596 - * reading the time too. 597 - */ 598 - if (rc) 599 - return rc; 600 - 601 - #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 602 - /* 603 - * Enable emulation if the driver returned -EINVAL to signal that it has 604 - * been configured without interrupts or they are not available at the 605 - * moment. 606 - */ 607 - if (err == -EINVAL) 608 - err = rtc_dev_update_irq_enable_emul(rtc, enabled); 609 - #endif 610 588 return err; 611 589 } 612 590 EXPORT_SYMBOL_GPL(rtc_update_irq_enable);
+134 -1
drivers/rtc/rtc-ab-eoz9.c
··· 11 11 #include <linux/bcd.h> 12 12 #include <linux/of.h> 13 13 #include <linux/regmap.h> 14 + #include <linux/bitfield.h> 14 15 #include <linux/hwmon.h> 15 16 #include <linux/hwmon-sysfs.h> 16 17 ··· 57 56 #define ABEOZ9_REG_YEARS 0x0E 58 57 59 58 #define ABEOZ9_SEC_LEN 7 59 + 60 + #define ABEOZ9_REG_ALARM_SEC 0x10 61 + #define ABEOZ9_BIT_ALARM_SEC GENMASK(6, 0) 62 + #define ABEOZ9_REG_ALARM_MIN 0x11 63 + #define ABEOZ9_BIT_ALARM_MIN GENMASK(6, 0) 64 + #define ABEOZ9_REG_ALARM_HOURS 0x12 65 + #define ABEOZ9_BIT_ALARM_HOURS_PM BIT(5) 66 + #define ABEOZ9_BIT_ALARM_HOURS GENMASK(4, 0) 67 + #define ABEOZ9_REG_ALARM_DAYS 0x13 68 + #define ABEOZ9_BIT_ALARM_DAYS GENMASK(5, 0) 69 + #define ABEOZ9_REG_ALARM_WEEKDAYS 0x14 70 + #define ABEOZ9_BIT_ALARM_WEEKDAYS GENMASK(2, 0) 71 + #define ABEOZ9_REG_ALARM_MONTHS 0x15 72 + #define ABEOZ9_BIT_ALARM_MONTHS GENMASK(4, 0) 73 + #define ABEOZ9_REG_ALARM_YEARS 0x16 74 + 75 + #define ABEOZ9_ALARM_LEN 7 76 + #define ABEOZ9_BIT_ALARM_AE BIT(7) 60 77 61 78 #define ABEOZ9_REG_REG_TEMP 0x20 62 79 #define ABEOZ953_TEMP_MAX 120 ··· 205 186 return abeoz9_reset_validity(regmap); 206 187 } 207 188 189 + static int abeoz9_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) 190 + { 191 + struct abeoz9_rtc_data *data = dev_get_drvdata(dev); 192 + struct regmap *regmap = data->regmap; 193 + u8 regs[ABEOZ9_ALARM_LEN]; 194 + u8 val[2]; 195 + int ret; 196 + 197 + ret = abeoz9_check_validity(dev); 198 + if (ret) 199 + return ret; 200 + 201 + ret = regmap_bulk_read(regmap, ABEOZ9_REG_CTRL_INT, val, sizeof(val)); 202 + if (ret) 203 + return ret; 204 + 205 + alarm->enabled = val[0] & ABEOZ9_REG_CTRL_INT_AIE; 206 + alarm->pending = val[1] & ABEOZ9_REG_CTRL_INT_FLAG_AF; 207 + 208 + ret = regmap_bulk_read(regmap, ABEOZ9_REG_ALARM_SEC, regs, sizeof(regs)); 209 + if (ret) 210 + return ret; 211 + 212 + alarm->time.tm_sec = bcd2bin(FIELD_GET(ABEOZ9_BIT_ALARM_SEC, regs[0])); 213 + alarm->time.tm_min = bcd2bin(FIELD_GET(ABEOZ9_BIT_ALARM_MIN, regs[1])); 214 + alarm->time.tm_hour = bcd2bin(FIELD_GET(ABEOZ9_BIT_ALARM_HOURS, regs[2])); 215 + if (FIELD_GET(ABEOZ9_BIT_ALARM_HOURS_PM, regs[2])) 216 + alarm->time.tm_hour += 12; 217 + 218 + alarm->time.tm_mday = bcd2bin(FIELD_GET(ABEOZ9_BIT_ALARM_DAYS, regs[3])); 219 + 220 + return 0; 221 + } 222 + 223 + static int abeoz9_rtc_alarm_irq_enable(struct device *dev, u32 enable) 224 + { 225 + struct abeoz9_rtc_data *data = dev_get_drvdata(dev); 226 + 227 + return regmap_update_bits(data->regmap, ABEOZ9_REG_CTRL_INT, 228 + ABEOZ9_REG_CTRL_INT_AIE, 229 + FIELD_PREP(ABEOZ9_REG_CTRL_INT_AIE, enable)); 230 + } 231 + 232 + static int abeoz9_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) 233 + { 234 + struct abeoz9_rtc_data *data = dev_get_drvdata(dev); 235 + u8 regs[ABEOZ9_ALARM_LEN] = {0}; 236 + int ret; 237 + 238 + ret = regmap_update_bits(data->regmap, ABEOZ9_REG_CTRL_INT_FLAG, 239 + ABEOZ9_REG_CTRL_INT_FLAG_AF, 0); 240 + if (ret) 241 + return ret; 242 + 243 + regs[0] = ABEOZ9_BIT_ALARM_AE | FIELD_PREP(ABEOZ9_BIT_ALARM_SEC, 244 + bin2bcd(alarm->time.tm_sec)); 245 + regs[1] = ABEOZ9_BIT_ALARM_AE | FIELD_PREP(ABEOZ9_BIT_ALARM_MIN, 246 + bin2bcd(alarm->time.tm_min)); 247 + regs[2] = ABEOZ9_BIT_ALARM_AE | FIELD_PREP(ABEOZ9_BIT_ALARM_HOURS, 248 + bin2bcd(alarm->time.tm_hour)); 249 + regs[3] = ABEOZ9_BIT_ALARM_AE | FIELD_PREP(ABEOZ9_BIT_ALARM_DAYS, 250 + bin2bcd(alarm->time.tm_mday)); 251 + 252 + ret = regmap_bulk_write(data->regmap, ABEOZ9_REG_ALARM_SEC, regs, 253 + sizeof(regs)); 254 + if (ret) 255 + return ret; 256 + 257 + return abeoz9_rtc_alarm_irq_enable(dev, alarm->enabled); 258 + } 259 + 260 + static irqreturn_t abeoz9_rtc_irq(int irq, void *dev) 261 + { 262 + struct abeoz9_rtc_data *data = dev_get_drvdata(dev); 263 + unsigned int val; 264 + int ret; 265 + 266 + ret = regmap_read(data->regmap, ABEOZ9_REG_CTRL_INT_FLAG, &val); 267 + if (ret) 268 + return IRQ_NONE; 269 + 270 + if (!FIELD_GET(ABEOZ9_REG_CTRL_INT_FLAG_AF, val)) 271 + return IRQ_NONE; 272 + 273 + regmap_update_bits(data->regmap, ABEOZ9_REG_CTRL_INT_FLAG, 274 + ABEOZ9_REG_CTRL_INT_FLAG_AF, 0); 275 + 276 + rtc_update_irq(data->rtc, 1, RTC_IRQF | RTC_AF); 277 + 278 + return IRQ_HANDLED; 279 + } 280 + 208 281 static int abeoz9_trickle_parse_dt(struct device_node *node) 209 282 { 210 283 u32 ohms = 0; ··· 369 258 370 259 static const struct rtc_class_ops rtc_ops = { 371 260 .read_time = abeoz9_rtc_get_time, 372 - .set_time = abeoz9_rtc_set_time, 261 + .set_time = abeoz9_rtc_set_time, 262 + .read_alarm = abeoz9_rtc_read_alarm, 263 + .set_alarm = abeoz9_rtc_set_alarm, 264 + .alarm_irq_enable = abeoz9_rtc_alarm_irq_enable, 373 265 }; 374 266 375 267 static const struct regmap_config abeoz9_rtc_regmap_config = { 376 268 .reg_bits = 8, 377 269 .val_bits = 8, 270 + .max_register = 0x3f, 378 271 }; 379 272 380 273 #if IS_REACHABLE(CONFIG_HWMON) ··· 534 419 data->rtc->ops = &rtc_ops; 535 420 data->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 536 421 data->rtc->range_max = RTC_TIMESTAMP_END_2099; 422 + data->rtc->uie_unsupported = 1; 423 + clear_bit(RTC_FEATURE_ALARM, data->rtc->features); 424 + 425 + if (client->irq > 0) { 426 + ret = devm_request_threaded_irq(dev, client->irq, NULL, 427 + abeoz9_rtc_irq, 428 + IRQF_TRIGGER_LOW | IRQF_ONESHOT, 429 + dev_name(dev), dev); 430 + if (ret) { 431 + dev_err(dev, "failed to request alarm irq\n"); 432 + return ret; 433 + } 434 + } 435 + 436 + if (client->irq > 0 || device_property_read_bool(dev, "wakeup-source")) { 437 + ret = device_init_wakeup(dev, true); 438 + set_bit(RTC_FEATURE_ALARM, data->rtc->features); 439 + } 537 440 538 441 ret = devm_rtc_register_device(data->rtc); 539 442 if (ret)
+17 -39
drivers/rtc/rtc-ds1307.c
··· 169 169 170 170 struct ds1307 { 171 171 enum ds_type type; 172 - unsigned long flags; 173 - #define HAS_NVRAM 0 /* bit 0 == sysfs file active */ 174 - #define HAS_ALARM 1 /* bit 1 == irq claimed */ 175 172 struct device *dev; 176 173 struct regmap *regmap; 177 174 const char *name; ··· 293 296 t->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f); 294 297 tmp = regs[DS1307_REG_HOUR] & 0x3f; 295 298 t->tm_hour = bcd2bin(tmp); 296 - t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; 299 + /* rx8130 is bit position, not BCD */ 300 + if (ds1307->type == rx_8130) 301 + t->tm_wday = fls(regs[DS1307_REG_WDAY] & 0x7f); 302 + else 303 + t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; 297 304 t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f); 298 305 tmp = regs[DS1307_REG_MONTH] & 0x1f; 299 306 t->tm_mon = bcd2bin(tmp) - 1; ··· 344 343 regs[DS1307_REG_SECS] = bin2bcd(t->tm_sec); 345 344 regs[DS1307_REG_MIN] = bin2bcd(t->tm_min); 346 345 regs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); 347 - regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); 346 + /* rx8130 is bit position, not BCD */ 347 + if (ds1307->type == rx_8130) 348 + regs[DS1307_REG_WDAY] = 1 << t->tm_wday; 349 + else 350 + regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); 348 351 regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); 349 352 regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); 350 353 ··· 416 411 int ret; 417 412 u8 regs[9]; 418 413 419 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 420 - return -EINVAL; 421 - 422 414 /* read all ALARM1, ALARM2, and status registers at once */ 423 415 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, 424 416 regs, sizeof(regs)); ··· 455 453 unsigned char regs[9]; 456 454 u8 control, status; 457 455 int ret; 458 - 459 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 460 - return -EINVAL; 461 456 462 457 dev_dbg(dev, "%s secs=%d, mins=%d, " 463 458 "hours=%d, mday=%d, enabled=%d, pending=%d\n", ··· 510 511 static int ds1307_alarm_irq_enable(struct device *dev, unsigned int enabled) 511 512 { 512 513 struct ds1307 *ds1307 = dev_get_drvdata(dev); 513 - 514 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 515 - return -ENOTTY; 516 514 517 515 return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, 518 516 DS1337_BIT_A1IE, ··· 588 592 u8 ald[3], ctl[3]; 589 593 int ret; 590 594 591 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 592 - return -EINVAL; 593 - 594 595 /* Read alarm registers. */ 595 596 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 596 597 sizeof(ald)); ··· 626 633 struct ds1307 *ds1307 = dev_get_drvdata(dev); 627 634 u8 ald[3], ctl[3]; 628 635 int ret; 629 - 630 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 631 - return -EINVAL; 632 636 633 637 dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d " 634 638 "enabled=%d pending=%d\n", __func__, ··· 670 680 { 671 681 struct ds1307 *ds1307 = dev_get_drvdata(dev); 672 682 int ret, reg; 673 - 674 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 675 - return -EINVAL; 676 683 677 684 ret = regmap_read(ds1307->regmap, RX8130_REG_CONTROL0, &reg); 678 685 if (ret < 0) ··· 721 734 struct ds1307 *ds1307 = dev_get_drvdata(dev); 722 735 u8 regs[10]; 723 736 int ret; 724 - 725 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 726 - return -EINVAL; 727 737 728 738 /* Read control and alarm 0 registers. */ 729 739 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, ··· 777 793 unsigned char regs[10]; 778 794 int wday, ret; 779 795 780 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 781 - return -EINVAL; 782 - 783 796 wday = mcp794xx_alm_weekday(dev, &t->time); 784 797 if (wday < 0) 785 798 return wday; ··· 822 841 static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled) 823 842 { 824 843 struct ds1307 *ds1307 = dev_get_drvdata(dev); 825 - 826 - if (!test_bit(HAS_ALARM, &ds1307->flags)) 827 - return -EINVAL; 828 844 829 845 return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, 830 846 MCP794XX_BIT_ALM0_EN, ··· 1619 1641 * Interrupt signal due to alarm conditions and square-wave 1620 1642 * output share same pin, so don't initialize both. 1621 1643 */ 1622 - if (i == DS3231_CLK_SQW && test_bit(HAS_ALARM, &ds1307->flags)) 1644 + if (i == DS3231_CLK_SQW && test_bit(RTC_FEATURE_ALARM, ds1307->rtc->features)) 1623 1645 continue; 1624 1646 1625 1647 init.name = ds3231_clks_names[i]; ··· 1942 1964 bin2bcd(tmp)); 1943 1965 } 1944 1966 1945 - if (want_irq || ds1307_can_wakeup_device) { 1946 - device_set_wakeup_capable(ds1307->dev, true); 1947 - set_bit(HAS_ALARM, &ds1307->flags); 1948 - } 1949 - 1950 1967 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev); 1951 1968 if (IS_ERR(ds1307->rtc)) 1952 1969 return PTR_ERR(ds1307->rtc); 1970 + 1971 + if (want_irq || ds1307_can_wakeup_device) 1972 + device_set_wakeup_capable(ds1307->dev, true); 1973 + else 1974 + clear_bit(RTC_FEATURE_ALARM, ds1307->rtc->features); 1953 1975 1954 1976 if (ds1307_can_wakeup_device && !want_irq) { 1955 1977 dev_info(ds1307->dev, ··· 1966 1988 if (err) { 1967 1989 client->irq = 0; 1968 1990 device_set_wakeup_capable(ds1307->dev, false); 1969 - clear_bit(HAS_ALARM, &ds1307->flags); 1991 + clear_bit(RTC_FEATURE_ALARM, ds1307->rtc->features); 1970 1992 dev_err(ds1307->dev, "unable to request IRQ!\n"); 1971 1993 } else { 1972 1994 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq);
-6
drivers/rtc/rtc-ds1511.c
··· 104 104 writeb(val, ds1511_base + (reg * reg_spacing)); 105 105 } 106 106 107 - static inline void 108 - rtc_write_alarm(uint8_t val, enum ds1511reg reg) 109 - { 110 - rtc_write((val | 0x80), reg); 111 - } 112 - 113 107 static noinline uint8_t 114 108 rtc_read(enum ds1511reg reg) 115 109 {
+1
drivers/rtc/rtc-fsl-ftm-alarm.c
··· 310 310 { .compatible = "fsl,lx2160a-ftm-alarm", }, 311 311 { }, 312 312 }; 313 + MODULE_DEVICE_TABLE(of, ftm_rtc_match); 313 314 314 315 static const struct acpi_device_id ftm_imx_acpi_ids[] = { 315 316 {"NXP0014",},
-11
drivers/rtc/rtc-imx-sc.c
··· 80 80 return imx_scu_irq_group_enable(SC_IRQ_GROUP_RTC, SC_IRQ_RTC, enable); 81 81 } 82 82 83 - static int imx_sc_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 84 - { 85 - /* 86 - * SCU firmware does NOT provide read alarm API, but .read_alarm 87 - * callback is required by RTC framework to support alarm function, 88 - * so just return here. 89 - */ 90 - return 0; 91 - } 92 - 93 83 static int imx_sc_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 94 84 { 95 85 struct imx_sc_msg_timer_rtc_set_alarm msg; ··· 117 127 static const struct rtc_class_ops imx_sc_rtc_ops = { 118 128 .read_time = imx_sc_rtc_read_time, 119 129 .set_time = imx_sc_rtc_set_time, 120 - .read_alarm = imx_sc_rtc_read_alarm, 121 130 .set_alarm = imx_sc_rtc_set_alarm, 122 131 .alarm_irq_enable = imx_sc_rtc_alarm_irq_enable, 123 132 };
+1 -3
drivers/rtc/rtc-imxdi.c
··· 840 840 return 0; 841 841 } 842 842 843 - #ifdef CONFIG_OF 844 843 static const struct of_device_id dryice_dt_ids[] = { 845 844 { .compatible = "fsl,imx25-rtc" }, 846 845 { /* sentinel */ } 847 846 }; 848 847 849 848 MODULE_DEVICE_TABLE(of, dryice_dt_ids); 850 - #endif 851 849 852 850 static struct platform_driver dryice_rtc_driver = { 853 851 .driver = { 854 852 .name = "imxdi_rtc", 855 - .of_match_table = of_match_ptr(dryice_dt_ids), 853 + .of_match_table = dryice_dt_ids, 856 854 }, 857 855 .remove = __exit_p(dryice_rtc_remove), 858 856 };
+1 -1
drivers/rtc/rtc-m48t59.c
··· 421 421 /* Try to get irq number. We also can work in 422 422 * the mode without IRQ. 423 423 */ 424 - m48t59->irq = platform_get_irq(pdev, 0); 424 + m48t59->irq = platform_get_irq_optional(pdev, 0); 425 425 if (m48t59->irq <= 0) 426 426 m48t59->irq = NO_IRQ; 427 427
+1 -1
drivers/rtc/rtc-mxc.c
··· 415 415 static struct platform_driver mxc_rtc_driver = { 416 416 .driver = { 417 417 .name = "mxc_rtc", 418 - .of_match_table = of_match_ptr(imx_rtc_dt_ids), 418 + .of_match_table = imx_rtc_dt_ids, 419 419 }, 420 420 .probe = mxc_rtc_probe, 421 421 };
+2 -3
drivers/rtc/rtc-omap.c
··· 786 786 /* enable RTC functional clock */ 787 787 if (rtc->type->has_32kclk_en) { 788 788 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); 789 - rtc_writel(rtc, OMAP_RTC_OSC_REG, 790 - reg | OMAP_RTC_OSC_32KCLK_EN); 789 + rtc_write(rtc, OMAP_RTC_OSC_REG, reg | OMAP_RTC_OSC_32KCLK_EN); 791 790 } 792 791 793 792 /* clear old status */ ··· 844 845 reg = rtc_read(rtc, OMAP_RTC_OSC_REG); 845 846 reg &= ~OMAP_RTC_OSC_OSC32K_GZ_DISABLE; 846 847 reg |= OMAP_RTC_OSC_32KCLK_EN | OMAP_RTC_OSC_SEL_32KCLK_SRC; 847 - rtc_writel(rtc, OMAP_RTC_OSC_REG, reg); 848 + rtc_write(rtc, OMAP_RTC_OSC_REG, reg); 848 849 } 849 850 850 851 rtc->type->lock(rtc);
+3 -4
drivers/rtc/rtc-pcf85063.c
··· 478 478 { 479 479 struct clk *clk; 480 480 struct clk_init_data init; 481 + struct device_node *node = pcf85063->rtc->dev.parent->of_node; 481 482 482 483 init.name = "pcf85063-clkout"; 483 484 init.ops = &pcf85063_clkout_ops; ··· 488 487 pcf85063->clkout_hw.init = &init; 489 488 490 489 /* optional override of the clockname */ 491 - of_property_read_string(pcf85063->rtc->dev.of_node, 492 - "clock-output-names", &init.name); 490 + of_property_read_string(node, "clock-output-names", &init.name); 493 491 494 492 /* register the clock */ 495 493 clk = devm_clk_register(&pcf85063->rtc->dev, &pcf85063->clkout_hw); 496 494 497 495 if (!IS_ERR(clk)) 498 - of_clk_add_provider(pcf85063->rtc->dev.of_node, 499 - of_clk_src_simple_get, clk); 496 + of_clk_add_provider(node, of_clk_src_simple_get, clk); 500 497 501 498 return clk; 502 499 }
+191 -5
drivers/rtc/rtc-pcf8523.c
··· 8 8 #include <linux/module.h> 9 9 #include <linux/rtc.h> 10 10 #include <linux/of.h> 11 - 12 - #define DRIVER_NAME "rtc-pcf8523" 11 + #include <linux/pm_wakeirq.h> 13 12 14 13 #define REG_CONTROL1 0x00 15 14 #define REG_CONTROL1_CAP_SEL BIT(7) 16 15 #define REG_CONTROL1_STOP BIT(5) 16 + #define REG_CONTROL1_AIE BIT(1) 17 + 18 + #define REG_CONTROL2 0x01 19 + #define REG_CONTROL2_AF BIT(3) 17 20 18 21 #define REG_CONTROL3 0x02 19 22 #define REG_CONTROL3_PM_BLD BIT(7) /* battery low detection disabled */ ··· 35 32 #define REG_MONTHS 0x08 36 33 #define REG_YEARS 0x09 37 34 35 + #define REG_MINUTE_ALARM 0x0a 36 + #define REG_HOUR_ALARM 0x0b 37 + #define REG_DAY_ALARM 0x0c 38 + #define REG_WEEKDAY_ALARM 0x0d 39 + #define ALARM_DIS BIT(7) 40 + 38 41 #define REG_OFFSET 0x0e 39 42 #define REG_OFFSET_MODE BIT(7) 43 + 44 + #define REG_TMR_CLKOUT_CTRL 0x0f 45 + 46 + struct pcf8523 { 47 + struct rtc_device *rtc; 48 + struct i2c_client *client; 49 + }; 40 50 41 51 static int pcf8523_read(struct i2c_client *client, u8 reg, u8 *valuep) 42 52 { ··· 154 138 return err; 155 139 156 140 return 0; 141 + } 142 + 143 + static irqreturn_t pcf8523_irq(int irq, void *dev_id) 144 + { 145 + struct pcf8523 *pcf8523 = i2c_get_clientdata(dev_id); 146 + u8 value; 147 + int err; 148 + 149 + err = pcf8523_read(pcf8523->client, REG_CONTROL2, &value); 150 + if (err < 0) 151 + return IRQ_HANDLED; 152 + 153 + if (value & REG_CONTROL2_AF) { 154 + value &= ~REG_CONTROL2_AF; 155 + pcf8523_write(pcf8523->client, REG_CONTROL2, value); 156 + rtc_update_irq(pcf8523->rtc, 1, RTC_IRQF | RTC_AF); 157 + 158 + return IRQ_HANDLED; 159 + } 160 + 161 + return IRQ_NONE; 157 162 } 158 163 159 164 static int pcf8523_stop_rtc(struct i2c_client *client) ··· 296 259 return pcf8523_start_rtc(client); 297 260 } 298 261 262 + static int pcf8523_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *tm) 263 + { 264 + struct i2c_client *client = to_i2c_client(dev); 265 + u8 start = REG_MINUTE_ALARM, regs[4]; 266 + struct i2c_msg msgs[2]; 267 + u8 value; 268 + int err; 269 + 270 + msgs[0].addr = client->addr; 271 + msgs[0].flags = 0; 272 + msgs[0].len = 1; 273 + msgs[0].buf = &start; 274 + 275 + msgs[1].addr = client->addr; 276 + msgs[1].flags = I2C_M_RD; 277 + msgs[1].len = sizeof(regs); 278 + msgs[1].buf = regs; 279 + 280 + err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 281 + if (err < 0) 282 + return err; 283 + 284 + tm->time.tm_sec = 0; 285 + tm->time.tm_min = bcd2bin(regs[0] & 0x7F); 286 + tm->time.tm_hour = bcd2bin(regs[1] & 0x3F); 287 + tm->time.tm_mday = bcd2bin(regs[2] & 0x3F); 288 + tm->time.tm_wday = bcd2bin(regs[3] & 0x7); 289 + 290 + err = pcf8523_read(client, REG_CONTROL1, &value); 291 + if (err < 0) 292 + return err; 293 + tm->enabled = !!(value & REG_CONTROL1_AIE); 294 + 295 + err = pcf8523_read(client, REG_CONTROL2, &value); 296 + if (err < 0) 297 + return err; 298 + tm->pending = !!(value & REG_CONTROL2_AF); 299 + 300 + return 0; 301 + } 302 + 303 + static int pcf8523_irq_enable(struct device *dev, unsigned int enabled) 304 + { 305 + struct i2c_client *client = to_i2c_client(dev); 306 + u8 value; 307 + int err; 308 + 309 + err = pcf8523_read(client, REG_CONTROL1, &value); 310 + if (err < 0) 311 + return err; 312 + 313 + value &= REG_CONTROL1_AIE; 314 + 315 + if (enabled) 316 + value |= REG_CONTROL1_AIE; 317 + 318 + err = pcf8523_write(client, REG_CONTROL1, value); 319 + if (err < 0) 320 + return err; 321 + 322 + return 0; 323 + } 324 + 325 + static int pcf8523_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *tm) 326 + { 327 + struct i2c_client *client = to_i2c_client(dev); 328 + struct i2c_msg msg; 329 + u8 regs[5]; 330 + int err; 331 + 332 + err = pcf8523_irq_enable(dev, 0); 333 + if (err) 334 + return err; 335 + 336 + err = pcf8523_write(client, REG_CONTROL2, 0); 337 + if (err < 0) 338 + return err; 339 + 340 + /* The alarm has no seconds, round up to nearest minute */ 341 + if (tm->time.tm_sec) { 342 + time64_t alarm_time = rtc_tm_to_time64(&tm->time); 343 + 344 + alarm_time += 60 - tm->time.tm_sec; 345 + rtc_time64_to_tm(alarm_time, &tm->time); 346 + } 347 + 348 + regs[0] = REG_MINUTE_ALARM; 349 + regs[1] = bin2bcd(tm->time.tm_min); 350 + regs[2] = bin2bcd(tm->time.tm_hour); 351 + regs[3] = bin2bcd(tm->time.tm_mday); 352 + regs[4] = ALARM_DIS; 353 + msg.addr = client->addr; 354 + msg.flags = 0; 355 + msg.len = sizeof(regs); 356 + msg.buf = regs; 357 + err = i2c_transfer(client->adapter, &msg, 1); 358 + if (err < 0) 359 + return err; 360 + 361 + if (tm->enabled) 362 + return pcf8523_irq_enable(dev, tm->enabled); 363 + 364 + return 0; 365 + } 366 + 299 367 #ifdef CONFIG_RTC_INTF_DEV 300 368 static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd, 301 369 unsigned long arg) 302 370 { 303 371 struct i2c_client *client = to_i2c_client(dev); 372 + unsigned int flags = 0; 373 + u8 value; 304 374 int ret; 305 375 306 376 switch (cmd) { ··· 416 272 if (ret < 0) 417 273 return ret; 418 274 if (ret) 419 - ret = RTC_VL_BACKUP_LOW; 275 + flags |= RTC_VL_BACKUP_LOW; 420 276 421 - return put_user(ret, (unsigned int __user *)arg); 277 + ret = pcf8523_read(client, REG_SECONDS, &value); 278 + if (ret < 0) 279 + return ret; 280 + 281 + if (value & REG_SECONDS_OS) 282 + flags |= RTC_VL_DATA_INVALID; 283 + 284 + return put_user(flags, (unsigned int __user *)arg); 422 285 423 286 default: 424 287 return -ENOIOCTLCMD; ··· 473 322 static const struct rtc_class_ops pcf8523_rtc_ops = { 474 323 .read_time = pcf8523_rtc_read_time, 475 324 .set_time = pcf8523_rtc_set_time, 325 + .read_alarm = pcf8523_rtc_read_alarm, 326 + .set_alarm = pcf8523_rtc_set_alarm, 327 + .alarm_irq_enable = pcf8523_irq_enable, 476 328 .ioctl = pcf8523_rtc_ioctl, 477 329 .read_offset = pcf8523_rtc_read_offset, 478 330 .set_offset = pcf8523_rtc_set_offset, ··· 484 330 static int pcf8523_probe(struct i2c_client *client, 485 331 const struct i2c_device_id *id) 486 332 { 333 + struct pcf8523 *pcf8523; 487 334 struct rtc_device *rtc; 335 + bool wakeup_source = false; 488 336 int err; 489 337 490 338 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) 491 339 return -ENODEV; 340 + 341 + pcf8523 = devm_kzalloc(&client->dev, sizeof(struct pcf8523), GFP_KERNEL); 342 + if (!pcf8523) 343 + return -ENOMEM; 344 + 345 + i2c_set_clientdata(client, pcf8523); 346 + pcf8523->client = client; 492 347 493 348 err = pcf8523_load_capacitance(client); 494 349 if (err < 0) ··· 512 349 if (IS_ERR(rtc)) 513 350 return PTR_ERR(rtc); 514 351 352 + pcf8523->rtc = rtc; 515 353 rtc->ops = &pcf8523_rtc_ops; 516 354 rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 517 355 rtc->range_max = RTC_TIMESTAMP_END_2099; 356 + rtc->uie_unsupported = 1; 357 + 358 + if (client->irq > 0) { 359 + err = pcf8523_write(client, REG_TMR_CLKOUT_CTRL, 0x38); 360 + if (err < 0) 361 + return err; 362 + 363 + err = devm_request_threaded_irq(&client->dev, client->irq, 364 + NULL, pcf8523_irq, 365 + IRQF_SHARED | IRQF_ONESHOT | IRQF_TRIGGER_LOW, 366 + dev_name(&rtc->dev), client); 367 + if (err) 368 + return err; 369 + 370 + dev_pm_set_wake_irq(&client->dev, client->irq); 371 + } 372 + 373 + #ifdef CONFIG_OF 374 + wakeup_source = of_property_read_bool(client->dev.of_node, "wakeup-source"); 375 + #endif 376 + if (client->irq > 0 || wakeup_source) 377 + device_init_wakeup(&client->dev, true); 518 378 519 379 return devm_rtc_register_device(rtc); 520 380 } ··· 559 373 560 374 static struct i2c_driver pcf8523_driver = { 561 375 .driver = { 562 - .name = DRIVER_NAME, 376 + .name = "rtc-pcf8523", 563 377 .of_match_table = of_match_ptr(pcf8523_of_match), 564 378 }, 565 379 .probe = pcf8523_probe,
+11
drivers/rtc/rtc-pm8xxx.c
··· 445 445 .alarm_en = BIT(7), 446 446 }; 447 447 448 + static const struct pm8xxx_rtc_regs pmk8350_regs = { 449 + .ctrl = 0x6146, 450 + .write = 0x6140, 451 + .read = 0x6148, 452 + .alarm_rw = 0x6240, 453 + .alarm_ctrl = 0x6246, 454 + .alarm_ctrl2 = 0x6248, 455 + .alarm_en = BIT(7), 456 + }; 457 + 448 458 /* 449 459 * Hardcoded RTC bases until IORESOURCE_REG mapping is figured out 450 460 */ ··· 463 453 { .compatible = "qcom,pm8018-rtc", .data = &pm8921_regs }, 464 454 { .compatible = "qcom,pm8058-rtc", .data = &pm8058_regs }, 465 455 { .compatible = "qcom,pm8941-rtc", .data = &pm8941_regs }, 456 + { .compatible = "qcom,pmk8350-rtc", .data = &pmk8350_regs }, 466 457 { }, 467 458 }; 468 459 MODULE_DEVICE_TABLE(of, pm8xxx_id_table);
+2 -2
drivers/rtc/rtc-rv3028.c
··· 320 320 tm->tm_sec = bcd2bin(date[RV3028_SEC] & 0x7f); 321 321 tm->tm_min = bcd2bin(date[RV3028_MIN] & 0x7f); 322 322 tm->tm_hour = bcd2bin(date[RV3028_HOUR] & 0x3f); 323 - tm->tm_wday = ilog2(date[RV3028_WDAY] & 0x7f); 323 + tm->tm_wday = date[RV3028_WDAY] & 0x7f; 324 324 tm->tm_mday = bcd2bin(date[RV3028_DAY] & 0x3f); 325 325 tm->tm_mon = bcd2bin(date[RV3028_MONTH] & 0x1f) - 1; 326 326 tm->tm_year = bcd2bin(date[RV3028_YEAR]) + 100; ··· 337 337 date[RV3028_SEC] = bin2bcd(tm->tm_sec); 338 338 date[RV3028_MIN] = bin2bcd(tm->tm_min); 339 339 date[RV3028_HOUR] = bin2bcd(tm->tm_hour); 340 - date[RV3028_WDAY] = 1 << (tm->tm_wday); 340 + date[RV3028_WDAY] = tm->tm_wday; 341 341 date[RV3028_DAY] = bin2bcd(tm->tm_mday); 342 342 date[RV3028_MONTH] = bin2bcd(tm->tm_mon + 1); 343 343 date[RV3028_YEAR] = bin2bcd(tm->tm_year - 100);
+7
drivers/rtc/rtc-rx6110.c
··· 447 447 return rx6110_probe(rx6110, &client->dev); 448 448 } 449 449 450 + static const struct acpi_device_id rx6110_i2c_acpi_match[] = { 451 + { "SECC6110" }, 452 + { } 453 + }; 454 + MODULE_DEVICE_TABLE(acpi, rx6110_i2c_acpi_match); 455 + 450 456 static const struct i2c_device_id rx6110_i2c_id[] = { 451 457 { "rx6110", 0 }, 452 458 { } ··· 462 456 static struct i2c_driver rx6110_i2c_driver = { 463 457 .driver = { 464 458 .name = RX6110_DRIVER_NAME, 459 + .acpi_match_table = rx6110_i2c_acpi_match, 465 460 }, 466 461 .probe = rx6110_i2c_probe, 467 462 .id_table = rx6110_i2c_id,
-6
drivers/rtc/rtc-s5m.c
··· 713 713 static int s5m_rtc_probe(struct platform_device *pdev) 714 714 { 715 715 struct sec_pmic_dev *s5m87xx = dev_get_drvdata(pdev->dev.parent); 716 - struct sec_platform_data *pdata = s5m87xx->pdata; 717 716 struct s5m_rtc_info *info; 718 717 const struct regmap_config *regmap_cfg; 719 718 int ret, alarm_irq; 720 - 721 - if (!pdata) { 722 - dev_err(pdev->dev.parent, "Platform data not supplied\n"); 723 - return -ENODEV; 724 - } 725 719 726 720 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); 727 721 if (!info)
+3 -3
drivers/rtc/rtc-spear.c
··· 153 153 static irqreturn_t spear_rtc_irq(int irq, void *dev_id) 154 154 { 155 155 struct spear_rtc_config *config = dev_id; 156 - unsigned long flags, events = 0; 156 + unsigned long events = 0; 157 157 unsigned int irq_data; 158 158 159 - spin_lock_irqsave(&config->lock, flags); 159 + spin_lock(&config->lock); 160 160 irq_data = readl(config->ioaddr + STATUS_REG); 161 - spin_unlock_irqrestore(&config->lock, flags); 161 + spin_unlock(&config->lock); 162 162 163 163 if ((irq_data & RTC_INT_MASK)) { 164 164 spear_rtc_clear_interrupt(config);
+1
drivers/rtc/rtc-tps65910.c
··· 18 18 #include <linux/rtc.h> 19 19 #include <linux/bcd.h> 20 20 #include <linux/math64.h> 21 + #include <linux/property.h> 21 22 #include <linux/platform_device.h> 22 23 #include <linux/interrupt.h> 23 24 #include <linux/mfd/tps65910.h>
+1 -1
drivers/rtc/sysfs.c
··· 273 273 if (!device_can_wakeup(rtc->dev.parent)) 274 274 return false; 275 275 276 - return rtc->ops->set_alarm != NULL; 276 + return !!test_bit(RTC_FEATURE_ALARM, rtc->features); 277 277 } 278 278 279 279 static umode_t rtc_attr_is_visible(struct kobject *kobj,