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

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

Pull RTC updates from Alexandre Belloni:
"This includes new ioctls to get and set parameters and in particular
the backup switch mode that is needed for some RTCs to actually enable
the backup voltage (and have a useful RTC).

The same interface can also be used to get the actual features
supported by the RTC so userspace has a better way than trying and
failing.

Summary:

Subsystem:
- Add new ioctl to get and set extra RTC parameters, this includes
backup switch mode
- Expose available features to userspace, in particular, when alarmas
have a resolution of one minute instead of a second.
- Let the core handle those alarms with a minute resolution

New driver:
- MSTAR MSC313 RTC

Drivers:
- Add SPI ID table where necessary
- Add BSM support for rv3028, rv3032 and pcf8523
- s3c: set RTC range
- rx8025: set range, implement .set_offset and .read_offset"

* tag 'rtc-5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (50 commits)
rtc: rx8025: use .set_offset/.read_offset
rtc: rx8025: use rtc_add_group
rtc: rx8025: clear RTC_FEATURE_ALARM when alarm are not supported
rtc: rx8025: set range
rtc: rx8025: let the core handle the alarm resolution
rtc: rx8025: switch to devm_rtc_allocate_device
rtc: ab8500: let the core handle the alarm resolution
rtc: ab-eoz9: support UIE when available
rtc: ab-eoz9: use RTC_FEATURE_UPDATE_INTERRUPT
rtc: rv3032: let the core handle the alarm resolution
rtc: s35390a: let the core handle the alarm resolution
rtc: handle alarms with a minute resolution
rtc: pcf85063: silence cppcheck warning
rtc: rv8803: fix writing back ctrl in flag register
rtc: s3c: Add time range
rtc: s3c: Extract read/write IO into separate functions
rtc: s3c: Remove usage of devm_rtc_device_register()
rtc: tps80031: Remove driver
rtc: sun6i: Allow probing without an early clock provider
rtc: pcf8523: add BSM support
...

+984 -763
+49
Documentation/devicetree/bindings/rtc/mstar,msc313-rtc.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/rtc/mstar,msc313-rtc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Mstar MSC313e RTC Device Tree Bindings 8 + 9 + allOf: 10 + - $ref: "rtc.yaml#" 11 + 12 + maintainers: 13 + - Daniel Palmer <daniel@0x0f.com> 14 + - Romain Perier <romain.perier@gmail.com> 15 + 16 + properties: 17 + compatible: 18 + enum: 19 + - mstar,msc313-rtc 20 + 21 + reg: 22 + maxItems: 1 23 + 24 + interrupts: 25 + maxItems: 1 26 + 27 + start-year: true 28 + 29 + clocks: 30 + maxItems: 1 31 + 32 + required: 33 + - compatible 34 + - reg 35 + - interrupts 36 + - clocks 37 + 38 + additionalProperties: false 39 + 40 + examples: 41 + - | 42 + #include <dt-bindings/interrupt-controller/arm-gic.h> 43 + rtc@2400 { 44 + compatible = "mstar,msc313-rtc"; 45 + reg = <0x2400 0x40>; 46 + clocks = <&xtal_div2>; 47 + interrupts-extended = <&intc_irq GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; 48 + }; 49 + ...
+9
Documentation/devicetree/bindings/rtc/nxp,pcf85063.txt
··· 13 13 expressed in femto Farad (fF). Valid values are 7000 and 12500. 14 14 Default value (if no value is specified) is 7000fF. 15 15 16 + Optional child node: 17 + - clock: Provide this if the square wave pin is used as boot-enabled fixed clock. 18 + 16 19 Example: 17 20 18 21 pcf85063: rtc@51 { 19 22 compatible = "nxp,pcf85063"; 20 23 reg = <0x51>; 21 24 quartz-load-femtofarads = <12500>; 25 + 26 + clock { 27 + compatible = "fixed-clock"; 28 + #clock-cells = <0>; 29 + clock-frequency = <32768>; 30 + }; 22 31 };
+1
MAINTAINERS
··· 2283 2283 F: arch/arm/mach-mstar/ 2284 2284 F: drivers/clk/mstar/ 2285 2285 F: drivers/gpio/gpio-msc313.c 2286 + F: drivers/rtc/rtc-msc313.c 2286 2287 F: drivers/watchdog/msc313e_wdt.c 2287 2288 F: include/dt-bindings/clock/mstar-* 2288 2289 F: include/dt-bindings/gpio/msc313-gpio.h
+11 -8
drivers/rtc/Kconfig
··· 441 441 442 442 config RTC_DRV_PCF8523 443 443 tristate "NXP PCF8523" 444 + select REGMAP_I2C 444 445 help 445 446 If you say yes here you get support for the NXP PCF8523 RTC 446 447 chips. ··· 582 581 583 582 This driver can also be built as a module. If so, the module 584 583 will be called rtc-tps65910. 585 - 586 - config RTC_DRV_TPS80031 587 - tristate "TI TPS80031/TPS80032 RTC driver" 588 - depends on MFD_TPS80031 589 - help 590 - TI Power Management IC TPS80031 supports RTC functionality 591 - along with alarm. This driver supports the RTC driver for 592 - the TPS80031 RTC module. 593 584 594 585 config RTC_DRV_RC5T583 595 586 tristate "RICOH 5T583 RTC driver" ··· 1921 1928 1922 1929 This can also be built as a module. If so, the module will 1923 1930 be named "rtc_wilco_ec". 1931 + 1932 + config RTC_DRV_MSC313 1933 + tristate "MStar MSC313 RTC" 1934 + depends on ARCH_MSTARV7 || COMPILE_TEST 1935 + help 1936 + If you say yes here you get support for the Mstar MSC313e On-Chip 1937 + Real Time Clock. 1938 + 1939 + This driver can also be built as a module, if so, the module 1940 + will be called "rtc-msc313". 1924 1941 1925 1942 endif # RTC_CLASS
+1 -1
drivers/rtc/Makefile
··· 103 103 obj-$(CONFIG_RTC_DRV_MESON) += rtc-meson.o 104 104 obj-$(CONFIG_RTC_DRV_MOXART) += rtc-moxart.o 105 105 obj-$(CONFIG_RTC_DRV_MPC5121) += rtc-mpc5121.o 106 + obj-$(CONFIG_RTC_DRV_MSC313) += rtc-msc313.o 106 107 obj-$(CONFIG_RTC_DRV_MSM6242) += rtc-msm6242.o 107 108 obj-$(CONFIG_RTC_DRV_MT2712) += rtc-mt2712.o 108 109 obj-$(CONFIG_RTC_DRV_MT6397) += rtc-mt6397.o ··· 170 169 obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o 171 170 obj-$(CONFIG_RTC_DRV_TPS6586X) += rtc-tps6586x.o 172 171 obj-$(CONFIG_RTC_DRV_TPS65910) += rtc-tps65910.o 173 - obj-$(CONFIG_RTC_DRV_TPS80031) += rtc-tps80031.o 174 172 obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o 175 173 obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o 176 174 obj-$(CONFIG_RTC_DRV_VR41XX) += rtc-vr41xx.o
+16 -4
drivers/rtc/class.c
··· 232 232 rtc->pie_enabled = 0; 233 233 234 234 set_bit(RTC_FEATURE_ALARM, rtc->features); 235 + set_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); 235 236 236 237 return rtc; 237 238 } ··· 335 334 * letting any rtc_class_open() users access it again 336 335 */ 337 336 rtc_proc_del_device(rtc); 338 - cdev_device_del(&rtc->char_dev, &rtc->dev); 337 + if (!test_bit(RTC_NO_CDEV, &rtc->flags)) 338 + cdev_device_del(&rtc->char_dev, &rtc->dev); 339 339 rtc->ops = NULL; 340 340 mutex_unlock(&rtc->ops_lock); 341 341 } ··· 365 363 366 364 rtc->id = id; 367 365 rtc->dev.parent = dev; 368 - dev_set_name(&rtc->dev, "rtc%d", id); 366 + err = dev_set_name(&rtc->dev, "rtc%d", id); 367 + if (err) 368 + return ERR_PTR(err); 369 369 370 370 err = devm_add_action_or_reset(dev, devm_rtc_release_device, rtc); 371 371 if (err) ··· 390 386 if (!rtc->ops->set_alarm) 391 387 clear_bit(RTC_FEATURE_ALARM, rtc->features); 392 388 389 + if (rtc->uie_unsupported) 390 + clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); 391 + 392 + if (rtc->ops->set_offset) 393 + set_bit(RTC_FEATURE_CORRECTION, rtc->features); 394 + 393 395 rtc->owner = owner; 394 396 rtc_device_get_offset(rtc); 395 397 ··· 407 397 rtc_dev_prepare(rtc); 408 398 409 399 err = cdev_device_add(&rtc->char_dev, &rtc->dev); 410 - if (err) 400 + if (err) { 401 + set_bit(RTC_NO_CDEV, &rtc->flags); 411 402 dev_warn(rtc->dev.parent, "failed to add char device %d:%d\n", 412 403 MAJOR(rtc->dev.devt), rtc->id); 413 - else 404 + } else { 414 405 dev_dbg(rtc->dev.parent, "char device (%d:%d)\n", 415 406 MAJOR(rtc->dev.devt), rtc->id); 407 + } 416 408 417 409 rtc_proc_add_device(rtc); 418 410
+65
drivers/rtc/dev.c
··· 208 208 const struct rtc_class_ops *ops = rtc->ops; 209 209 struct rtc_time tm; 210 210 struct rtc_wkalrm alarm; 211 + struct rtc_param param; 211 212 void __user *uarg = (void __user *)arg; 212 213 213 214 err = mutex_lock_interruptible(&rtc->ops_lock); ··· 222 221 switch (cmd) { 223 222 case RTC_EPOCH_SET: 224 223 case RTC_SET_TIME: 224 + case RTC_PARAM_SET: 225 225 if (!capable(CAP_SYS_TIME)) 226 226 err = -EACCES; 227 227 break; ··· 383 381 if (copy_to_user(uarg, &alarm, sizeof(alarm))) 384 382 err = -EFAULT; 385 383 return err; 384 + 385 + case RTC_PARAM_GET: 386 + if (copy_from_user(&param, uarg, sizeof(param))) { 387 + mutex_unlock(&rtc->ops_lock); 388 + return -EFAULT; 389 + } 390 + 391 + switch(param.param) { 392 + long offset; 393 + case RTC_PARAM_FEATURES: 394 + if (param.index != 0) 395 + err = -EINVAL; 396 + param.uvalue = rtc->features[0]; 397 + break; 398 + 399 + case RTC_PARAM_CORRECTION: 400 + mutex_unlock(&rtc->ops_lock); 401 + if (param.index != 0) 402 + return -EINVAL; 403 + err = rtc_read_offset(rtc, &offset); 404 + mutex_lock(&rtc->ops_lock); 405 + if (err == 0) 406 + param.svalue = offset; 407 + break; 408 + 409 + default: 410 + if (rtc->ops->param_get) 411 + err = rtc->ops->param_get(rtc->dev.parent, &param); 412 + else 413 + err = -EINVAL; 414 + } 415 + 416 + if (!err) 417 + if (copy_to_user(uarg, &param, sizeof(param))) 418 + err = -EFAULT; 419 + 420 + break; 421 + 422 + case RTC_PARAM_SET: 423 + if (copy_from_user(&param, uarg, sizeof(param))) { 424 + mutex_unlock(&rtc->ops_lock); 425 + return -EFAULT; 426 + } 427 + 428 + switch(param.param) { 429 + case RTC_PARAM_FEATURES: 430 + err = -EINVAL; 431 + break; 432 + 433 + case RTC_PARAM_CORRECTION: 434 + mutex_unlock(&rtc->ops_lock); 435 + if (param.index != 0) 436 + return -EINVAL; 437 + return rtc_set_offset(rtc, param.svalue); 438 + 439 + default: 440 + if (rtc->ops->param_set) 441 + err = rtc->ops->param_set(rtc->dev.parent, &param); 442 + else 443 + err = -EINVAL; 444 + } 445 + 446 + break; 386 447 387 448 default: 388 449 /* Finally try the driver's ioctl interface */
+13 -2
drivers/rtc/interface.c
··· 423 423 if (err) 424 424 return err; 425 425 now = rtc_tm_to_time64(&tm); 426 + 426 427 if (scheduled <= now) 427 428 return -ETIME; 428 429 /* ··· 448 447 449 448 int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 450 449 { 450 + ktime_t alarm_time; 451 451 int err; 452 452 453 453 if (!rtc->ops) ··· 470 468 if (rtc->aie_timer.enabled) 471 469 rtc_timer_remove(rtc, &rtc->aie_timer); 472 470 473 - rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time); 471 + alarm_time = rtc_tm_to_ktime(alarm->time); 472 + /* 473 + * Round down so we never miss a deadline, checking for past deadline is 474 + * done in __rtc_set_alarm 475 + */ 476 + if (test_bit(RTC_FEATURE_ALARM_RES_MINUTE, rtc->features)) 477 + alarm_time = ktime_sub_ns(alarm_time, (u64)alarm->time.tm_sec * NSEC_PER_SEC); 478 + 479 + rtc->aie_timer.node.expires = alarm_time; 474 480 rtc->aie_timer.period = 0; 475 481 if (alarm->enabled) 476 482 err = rtc_timer_enqueue(rtc, &rtc->aie_timer); ··· 571 561 if (rtc->uie_rtctimer.enabled == enabled) 572 562 goto out; 573 563 574 - if (rtc->uie_unsupported || !test_bit(RTC_FEATURE_ALARM, rtc->features)) { 564 + if (!test_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features) || 565 + !test_bit(RTC_FEATURE_ALARM, rtc->features)) { 575 566 mutex_unlock(&rtc->ops_lock); 576 567 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 577 568 return rtc_dev_update_irq_enable_emul(rtc, enabled);
+2 -1
drivers/rtc/rtc-ab-eoz9.c
··· 534 534 data->rtc->ops = &rtc_ops; 535 535 data->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 536 536 data->rtc->range_max = RTC_TIMESTAMP_END_2099; 537 - data->rtc->uie_unsupported = 1; 538 537 clear_bit(RTC_FEATURE_ALARM, data->rtc->features); 539 538 540 539 if (client->irq > 0) { ··· 545 546 dev_err(dev, "failed to request alarm irq\n"); 546 547 return ret; 547 548 } 549 + } else { 550 + clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, data->rtc->features); 548 551 } 549 552 550 553 if (client->irq > 0 || device_property_read_bool(dev, "wakeup-source")) {
+4 -19
drivers/rtc/rtc-ab8500.c
··· 184 184 { 185 185 int retval, i; 186 186 unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; 187 - unsigned long mins, secs = 0, cursec = 0; 188 - struct rtc_time curtm; 187 + unsigned long mins; 189 188 190 - /* Get the number of seconds since 1970 */ 191 - secs = rtc_tm_to_time64(&alarm->time); 192 - 193 - /* 194 - * Check whether alarm is set less than 1min. 195 - * Since our RTC doesn't support alarm resolution less than 1min, 196 - * return -EINVAL, so UIE EMUL can take it up, incase of UIE_ON 197 - */ 198 - ab8500_rtc_read_time(dev, &curtm); /* Read current time */ 199 - cursec = rtc_tm_to_time64(&curtm); 200 - if ((secs - cursec) < 59) { 201 - dev_dbg(dev, "Alarm less than 1 minute not supported\r\n"); 202 - return -EINVAL; 203 - } 204 - 205 - mins = secs / 60; 189 + mins = (unsigned long)rtc_tm_to_time64(&alarm->time) / 60; 206 190 207 191 buf[2] = mins & 0xFF; 208 192 buf[1] = (mins >> 8) & 0xFF; ··· 378 394 dev_pm_set_wake_irq(&pdev->dev, irq); 379 395 platform_set_drvdata(pdev, rtc); 380 396 381 - rtc->uie_unsupported = 1; 397 + set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rtc->features); 398 + clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); 382 399 383 400 rtc->range_max = (1ULL << 24) * 60 - 1; // 24-bit minutes + 59 secs 384 401 rtc->start_secs = RTC_TIMESTAMP_BEGIN_2000;
+7
drivers/rtc/rtc-ds1302.c
··· 199 199 MODULE_DEVICE_TABLE(of, ds1302_dt_ids); 200 200 #endif 201 201 202 + static const struct spi_device_id ds1302_spi_ids[] = { 203 + { .name = "ds1302", }, 204 + { /* sentinel */ } 205 + }; 206 + MODULE_DEVICE_TABLE(spi, ds1302_spi_ids); 207 + 202 208 static struct spi_driver ds1302_driver = { 203 209 .driver.name = "rtc-ds1302", 204 210 .driver.of_match_table = of_match_ptr(ds1302_dt_ids), 205 211 .probe = ds1302_probe, 206 212 .remove = ds1302_remove, 213 + .id_table = ds1302_spi_ids, 207 214 }; 208 215 209 216 module_spi_driver(ds1302_driver);
+7
drivers/rtc/rtc-ds1390.c
··· 219 219 }; 220 220 MODULE_DEVICE_TABLE(of, ds1390_of_match); 221 221 222 + static const struct spi_device_id ds1390_spi_ids[] = { 223 + { .name = "ds1390" }, 224 + {} 225 + }; 226 + MODULE_DEVICE_TABLE(spi, ds1390_spi_ids); 227 + 222 228 static struct spi_driver ds1390_driver = { 223 229 .driver = { 224 230 .name = "rtc-ds1390", 225 231 .of_match_table = of_match_ptr(ds1390_of_match), 226 232 }, 227 233 .probe = ds1390_probe, 234 + .id_table = ds1390_spi_ids, 228 235 }; 229 236 230 237 module_spi_driver(ds1390_driver);
+1 -1
drivers/rtc/rtc-m41t80.c
··· 557 557 * registered automatically when being referenced. 558 558 */ 559 559 of_node_put(fixed_clock); 560 - return 0; 560 + return NULL; 561 561 } 562 562 563 563 /* First disable the clock */
+7
drivers/rtc/rtc-mcp795.c
··· 430 430 MODULE_DEVICE_TABLE(of, mcp795_of_match); 431 431 #endif 432 432 433 + static const struct spi_device_id mcp795_spi_ids[] = { 434 + { .name = "mcp795" }, 435 + { } 436 + }; 437 + MODULE_DEVICE_TABLE(spi, mcp795_spi_ids); 438 + 433 439 static struct spi_driver mcp795_driver = { 434 440 .driver = { 435 441 .name = "rtc-mcp795", 436 442 .of_match_table = of_match_ptr(mcp795_of_match), 437 443 }, 438 444 .probe = mcp795_probe, 445 + .id_table = mcp795_spi_ids, 439 446 }; 440 447 441 448 module_spi_driver(mcp795_driver);
+259
drivers/rtc/rtc-msc313.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Real time clocks driver for MStar/SigmaStar ARMv7 SoCs. 4 + * Based on "Real Time Clock driver for msb252x." that was contained 5 + * in various MStar kernels. 6 + * 7 + * (C) 2019 Daniel Palmer 8 + * (C) 2021 Romain Perier 9 + */ 10 + 11 + #include <linux/clk.h> 12 + #include <linux/delay.h> 13 + #include <linux/io.h> 14 + #include <linux/module.h> 15 + #include <linux/mod_devicetable.h> 16 + #include <linux/platform_device.h> 17 + #include <linux/rtc.h> 18 + 19 + /* Registers */ 20 + #define REG_RTC_CTRL 0x00 21 + #define REG_RTC_FREQ_CW_L 0x04 22 + #define REG_RTC_FREQ_CW_H 0x08 23 + #define REG_RTC_LOAD_VAL_L 0x0C 24 + #define REG_RTC_LOAD_VAL_H 0x10 25 + #define REG_RTC_MATCH_VAL_L 0x14 26 + #define REG_RTC_MATCH_VAL_H 0x18 27 + #define REG_RTC_STATUS_INT 0x1C 28 + #define REG_RTC_CNT_VAL_L 0x20 29 + #define REG_RTC_CNT_VAL_H 0x24 30 + 31 + /* Control bits for REG_RTC_CTRL */ 32 + #define SOFT_RSTZ_BIT BIT(0) 33 + #define CNT_EN_BIT BIT(1) 34 + #define WRAP_EN_BIT BIT(2) 35 + #define LOAD_EN_BIT BIT(3) 36 + #define READ_EN_BIT BIT(4) 37 + #define INT_MASK_BIT BIT(5) 38 + #define INT_FORCE_BIT BIT(6) 39 + #define INT_CLEAR_BIT BIT(7) 40 + 41 + /* Control bits for REG_RTC_STATUS_INT */ 42 + #define RAW_INT_BIT BIT(0) 43 + #define ALM_INT_BIT BIT(1) 44 + 45 + struct msc313_rtc { 46 + struct rtc_device *rtc_dev; 47 + void __iomem *rtc_base; 48 + }; 49 + 50 + static int msc313_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) 51 + { 52 + struct msc313_rtc *priv = dev_get_drvdata(dev); 53 + unsigned long seconds; 54 + 55 + seconds = readw(priv->rtc_base + REG_RTC_MATCH_VAL_L) 56 + | ((unsigned long)readw(priv->rtc_base + REG_RTC_MATCH_VAL_H) << 16); 57 + 58 + rtc_time64_to_tm(seconds, &alarm->time); 59 + 60 + if (!(readw(priv->rtc_base + REG_RTC_CTRL) & INT_MASK_BIT)) 61 + alarm->enabled = 1; 62 + 63 + return 0; 64 + } 65 + 66 + static int msc313_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 67 + { 68 + struct msc313_rtc *priv = dev_get_drvdata(dev); 69 + u16 reg; 70 + 71 + reg = readw(priv->rtc_base + REG_RTC_CTRL); 72 + if (enabled) 73 + reg &= ~INT_MASK_BIT; 74 + else 75 + reg |= INT_MASK_BIT; 76 + writew(reg, priv->rtc_base + REG_RTC_CTRL); 77 + return 0; 78 + } 79 + 80 + static int msc313_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) 81 + { 82 + struct msc313_rtc *priv = dev_get_drvdata(dev); 83 + unsigned long seconds; 84 + 85 + seconds = rtc_tm_to_time64(&alarm->time); 86 + writew((seconds & 0xFFFF), priv->rtc_base + REG_RTC_MATCH_VAL_L); 87 + writew((seconds >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_MATCH_VAL_H); 88 + 89 + msc313_rtc_alarm_irq_enable(dev, alarm->enabled); 90 + 91 + return 0; 92 + } 93 + 94 + static bool msc313_rtc_get_enabled(struct msc313_rtc *priv) 95 + { 96 + return readw(priv->rtc_base + REG_RTC_CTRL) & CNT_EN_BIT; 97 + } 98 + 99 + static void msc313_rtc_set_enabled(struct msc313_rtc *priv) 100 + { 101 + u16 reg; 102 + 103 + reg = readw(priv->rtc_base + REG_RTC_CTRL); 104 + reg |= CNT_EN_BIT; 105 + writew(reg, priv->rtc_base + REG_RTC_CTRL); 106 + } 107 + 108 + static int msc313_rtc_read_time(struct device *dev, struct rtc_time *tm) 109 + { 110 + struct msc313_rtc *priv = dev_get_drvdata(dev); 111 + u32 seconds; 112 + u16 reg; 113 + 114 + if (!msc313_rtc_get_enabled(priv)) 115 + return -EINVAL; 116 + 117 + reg = readw(priv->rtc_base + REG_RTC_CTRL); 118 + writew(reg | READ_EN_BIT, priv->rtc_base + REG_RTC_CTRL); 119 + 120 + /* Wait for HW latch done */ 121 + while (readw(priv->rtc_base + REG_RTC_CTRL) & READ_EN_BIT) 122 + udelay(1); 123 + 124 + seconds = readw(priv->rtc_base + REG_RTC_CNT_VAL_L) 125 + | ((unsigned long)readw(priv->rtc_base + REG_RTC_CNT_VAL_H) << 16); 126 + 127 + rtc_time64_to_tm(seconds, tm); 128 + 129 + return 0; 130 + } 131 + 132 + static int msc313_rtc_set_time(struct device *dev, struct rtc_time *tm) 133 + { 134 + struct msc313_rtc *priv = dev_get_drvdata(dev); 135 + unsigned long seconds; 136 + u16 reg; 137 + 138 + seconds = rtc_tm_to_time64(tm); 139 + writew(seconds & 0xFFFF, priv->rtc_base + REG_RTC_LOAD_VAL_L); 140 + writew((seconds >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_LOAD_VAL_H); 141 + 142 + /* Enable load for loading value into internal RTC counter */ 143 + reg = readw(priv->rtc_base + REG_RTC_CTRL); 144 + writew(reg | LOAD_EN_BIT, priv->rtc_base + REG_RTC_CTRL); 145 + 146 + /* Wait for HW latch done */ 147 + while (readw(priv->rtc_base + REG_RTC_CTRL) & LOAD_EN_BIT) 148 + udelay(1); 149 + msc313_rtc_set_enabled(priv); 150 + return 0; 151 + } 152 + 153 + static const struct rtc_class_ops msc313_rtc_ops = { 154 + .read_time = msc313_rtc_read_time, 155 + .set_time = msc313_rtc_set_time, 156 + .read_alarm = msc313_rtc_read_alarm, 157 + .set_alarm = msc313_rtc_set_alarm, 158 + .alarm_irq_enable = msc313_rtc_alarm_irq_enable, 159 + }; 160 + 161 + static irqreturn_t msc313_rtc_interrupt(s32 irq, void *dev_id) 162 + { 163 + struct msc313_rtc *priv = dev_get_drvdata(dev_id); 164 + u16 reg; 165 + 166 + reg = readw(priv->rtc_base + REG_RTC_STATUS_INT); 167 + if (!(reg & ALM_INT_BIT)) 168 + return IRQ_NONE; 169 + 170 + reg = readw(priv->rtc_base + REG_RTC_CTRL); 171 + reg |= INT_CLEAR_BIT; 172 + reg &= ~INT_FORCE_BIT; 173 + writew(reg, priv->rtc_base + REG_RTC_CTRL); 174 + 175 + rtc_update_irq(priv->rtc_dev, 1, RTC_IRQF | RTC_AF); 176 + 177 + return IRQ_HANDLED; 178 + } 179 + 180 + static int msc313_rtc_probe(struct platform_device *pdev) 181 + { 182 + struct device *dev = &pdev->dev; 183 + struct msc313_rtc *priv; 184 + unsigned long rate; 185 + struct clk *clk; 186 + int ret; 187 + int irq; 188 + 189 + priv = devm_kzalloc(&pdev->dev, sizeof(struct msc313_rtc), GFP_KERNEL); 190 + if (!priv) 191 + return -ENOMEM; 192 + 193 + priv->rtc_base = devm_platform_ioremap_resource(pdev, 0); 194 + if (IS_ERR(priv->rtc_base)) 195 + return PTR_ERR(priv->rtc_base); 196 + 197 + irq = platform_get_irq(pdev, 0); 198 + if (irq < 0) 199 + return -EINVAL; 200 + 201 + priv->rtc_dev = devm_rtc_allocate_device(dev); 202 + if (IS_ERR(priv->rtc_dev)) 203 + return PTR_ERR(priv->rtc_dev); 204 + 205 + priv->rtc_dev->ops = &msc313_rtc_ops; 206 + priv->rtc_dev->range_max = U32_MAX; 207 + 208 + ret = devm_request_irq(dev, irq, msc313_rtc_interrupt, IRQF_SHARED, 209 + dev_name(&pdev->dev), &pdev->dev); 210 + if (ret) { 211 + dev_err(dev, "Could not request IRQ\n"); 212 + return ret; 213 + } 214 + 215 + clk = devm_clk_get(dev, NULL); 216 + if (IS_ERR(clk)) { 217 + dev_err(dev, "No input reference clock\n"); 218 + return PTR_ERR(clk); 219 + } 220 + 221 + ret = clk_prepare_enable(clk); 222 + if (ret) { 223 + dev_err(dev, "Failed to enable the reference clock, %d\n", ret); 224 + return ret; 225 + } 226 + 227 + ret = devm_add_action_or_reset(dev, (void (*) (void *))clk_disable_unprepare, clk); 228 + if (ret) 229 + return ret; 230 + 231 + rate = clk_get_rate(clk); 232 + writew(rate & 0xFFFF, priv->rtc_base + REG_RTC_FREQ_CW_L); 233 + writew((rate >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_FREQ_CW_H); 234 + 235 + platform_set_drvdata(pdev, priv); 236 + 237 + return devm_rtc_register_device(priv->rtc_dev); 238 + } 239 + 240 + static const struct of_device_id msc313_rtc_of_match_table[] = { 241 + { .compatible = "mstar,msc313-rtc" }, 242 + { } 243 + }; 244 + MODULE_DEVICE_TABLE(of, msc313_rtc_of_match_table); 245 + 246 + static struct platform_driver msc313_rtc_driver = { 247 + .probe = msc313_rtc_probe, 248 + .driver = { 249 + .name = "msc313-rtc", 250 + .of_match_table = msc313_rtc_of_match_table, 251 + }, 252 + }; 253 + 254 + module_platform_driver(msc313_rtc_driver); 255 + 256 + MODULE_AUTHOR("Daniel Palmer <daniel@thingy.jp>"); 257 + MODULE_AUTHOR("Romain Perier <romain.perier@gmail.com>"); 258 + MODULE_DESCRIPTION("MStar RTC Driver"); 259 + MODULE_LICENSE("GPL v2");
-1
drivers/rtc/rtc-omap.c
··· 1029 1029 1030 1030 module_platform_driver(omap_rtc_driver); 1031 1031 1032 - MODULE_ALIAS("platform:omap_rtc"); 1033 1032 MODULE_AUTHOR("George G. Davis (and others)"); 1034 1033 MODULE_LICENSE("GPL");
+9
drivers/rtc/rtc-pcf2123.c
··· 451 451 MODULE_DEVICE_TABLE(of, pcf2123_dt_ids); 452 452 #endif 453 453 454 + static const struct spi_device_id pcf2123_spi_ids[] = { 455 + { .name = "pcf2123", }, 456 + { .name = "rv2123", }, 457 + { .name = "rtc-pcf2123", }, 458 + { /* sentinel */ } 459 + }; 460 + MODULE_DEVICE_TABLE(spi, pcf2123_spi_ids); 461 + 454 462 static struct spi_driver pcf2123_driver = { 455 463 .driver = { 456 464 .name = "rtc-pcf2123", 457 465 .of_match_table = of_match_ptr(pcf2123_dt_ids), 458 466 }, 459 467 .probe = pcf2123_probe, 468 + .id_table = pcf2123_spi_ids, 460 469 }; 461 470 462 471 module_spi_driver(pcf2123_driver);
+15 -1
drivers/rtc/rtc-pcf85063.c
··· 34 34 #define PCF85063_REG_CTRL1 0x00 /* status */ 35 35 #define PCF85063_REG_CTRL1_CAP_SEL BIT(0) 36 36 #define PCF85063_REG_CTRL1_STOP BIT(5) 37 + #define PCF85063_REG_CTRL1_EXT_TEST BIT(7) 37 38 38 39 #define PCF85063_REG_CTRL2 0x01 39 40 #define PCF85063_CTRL2_AF BIT(6) ··· 118 117 * reset state until all time/date registers are written 119 118 */ 120 119 rc = regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL1, 120 + PCF85063_REG_CTRL1_EXT_TEST | 121 121 PCF85063_REG_CTRL1_STOP, 122 122 PCF85063_REG_CTRL1_STOP); 123 123 if (rc) ··· 299 297 if (ret < 0) 300 298 return ret; 301 299 302 - status = status & PCF85063_REG_SC_OS ? RTC_VL_DATA_INVALID : 0; 300 + status = (status & PCF85063_REG_SC_OS) ? RTC_VL_DATA_INVALID : 0; 303 301 304 302 return put_user(status, (unsigned int __user *)arg); 305 303 ··· 481 479 struct clk *clk; 482 480 struct clk_init_data init; 483 481 struct device_node *node = pcf85063->rtc->dev.parent->of_node; 482 + struct device_node *fixed_clock; 483 + 484 + fixed_clock = of_get_child_by_name(node, "clock"); 485 + if (fixed_clock) { 486 + /* 487 + * skip registering square wave clock when a fixed 488 + * clock has been registered. The fixed clock is 489 + * registered automatically when being referenced. 490 + */ 491 + of_node_put(fixed_clock); 492 + return NULL; 493 + } 484 494 485 495 init.name = "pcf85063-clkout"; 486 496 init.ops = &pcf85063_clkout_ops;
+185 -255
drivers/rtc/rtc-pcf8523.c
··· 4 4 */ 5 5 6 6 #include <linux/bcd.h> 7 + #include <linux/bitfield.h> 7 8 #include <linux/i2c.h> 8 9 #include <linux/module.h> 10 + #include <linux/regmap.h> 9 11 #include <linux/rtc.h> 10 12 #include <linux/of.h> 11 13 #include <linux/pm_wakeirq.h> ··· 21 19 #define PCF8523_CONTROL2_AF BIT(3) 22 20 23 21 #define PCF8523_REG_CONTROL3 0x02 24 - #define PCF8523_CONTROL3_PM_BLD BIT(7) /* battery low detection disabled */ 25 - #define PCF8523_CONTROL3_PM_VDD BIT(6) /* switch-over disabled */ 26 - #define PCF8523_CONTROL3_PM_DSM BIT(5) /* direct switching mode */ 27 - #define PCF8523_CONTROL3_PM_MASK 0xe0 22 + #define PCF8523_CONTROL3_PM GENMASK(7,5) 23 + #define PCF8523_PM_STANDBY 0x7 28 24 #define PCF8523_CONTROL3_BLF BIT(2) /* battery low bit, read-only */ 25 + #define PCF8523_CONTROL3_BSF BIT(3) 29 26 30 27 #define PCF8523_REG_SECONDS 0x03 31 28 #define PCF8523_SECONDS_OS BIT(7) ··· 49 48 50 49 struct pcf8523 { 51 50 struct rtc_device *rtc; 52 - struct i2c_client *client; 51 + struct regmap *regmap; 53 52 }; 54 53 55 - static int pcf8523_read(struct i2c_client *client, u8 reg, u8 *valuep) 54 + static int pcf8523_load_capacitance(struct pcf8523 *pcf8523, struct device_node *node) 56 55 { 57 - struct i2c_msg msgs[2]; 58 - u8 value = 0; 59 - int err; 60 - 61 - msgs[0].addr = client->addr; 62 - msgs[0].flags = 0; 63 - msgs[0].len = sizeof(reg); 64 - msgs[0].buf = &reg; 65 - 66 - msgs[1].addr = client->addr; 67 - msgs[1].flags = I2C_M_RD; 68 - msgs[1].len = sizeof(value); 69 - msgs[1].buf = &value; 70 - 71 - err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 72 - if (err < 0) 73 - return err; 74 - 75 - *valuep = value; 76 - 77 - return 0; 78 - } 79 - 80 - static int pcf8523_write(struct i2c_client *client, u8 reg, u8 value) 81 - { 82 - u8 buffer[2] = { reg, value }; 83 - struct i2c_msg msg; 84 - int err; 85 - 86 - msg.addr = client->addr; 87 - msg.flags = 0; 88 - msg.len = sizeof(buffer); 89 - msg.buf = buffer; 90 - 91 - err = i2c_transfer(client->adapter, &msg, 1); 92 - if (err < 0) 93 - return err; 94 - 95 - return 0; 96 - } 97 - 98 - static int pcf8523_voltage_low(struct i2c_client *client) 99 - { 100 - u8 value; 101 - int err; 102 - 103 - err = pcf8523_read(client, PCF8523_REG_CONTROL3, &value); 104 - if (err < 0) 105 - return err; 106 - 107 - return !!(value & PCF8523_CONTROL3_BLF); 108 - } 109 - 110 - static int pcf8523_load_capacitance(struct i2c_client *client) 111 - { 112 - u32 load; 113 - u8 value; 114 - int err; 115 - 116 - err = pcf8523_read(client, PCF8523_REG_CONTROL1, &value); 117 - if (err < 0) 118 - return err; 56 + u32 load, value = 0; 119 57 120 58 load = 12500; 121 - of_property_read_u32(client->dev.of_node, "quartz-load-femtofarads", 122 - &load); 59 + of_property_read_u32(node, "quartz-load-femtofarads", &load); 123 60 124 61 switch (load) { 125 62 default: 126 - dev_warn(&client->dev, "Unknown quartz-load-femtofarads value: %d. Assuming 12500", 63 + dev_warn(&pcf8523->rtc->dev, "Unknown quartz-load-femtofarads value: %d. Assuming 12500", 127 64 load); 128 65 fallthrough; 129 66 case 12500: 130 67 value |= PCF8523_CONTROL1_CAP_SEL; 131 68 break; 132 69 case 7000: 133 - value &= ~PCF8523_CONTROL1_CAP_SEL; 134 70 break; 135 71 } 136 72 137 - err = pcf8523_write(client, PCF8523_REG_CONTROL1, value); 138 - 139 - return err; 140 - } 141 - 142 - static int pcf8523_set_pm(struct i2c_client *client, u8 pm) 143 - { 144 - u8 value; 145 - int err; 146 - 147 - err = pcf8523_read(client, PCF8523_REG_CONTROL3, &value); 148 - if (err < 0) 149 - return err; 150 - 151 - value = (value & ~PCF8523_CONTROL3_PM_MASK) | pm; 152 - 153 - err = pcf8523_write(client, PCF8523_REG_CONTROL3, value); 154 - if (err < 0) 155 - return err; 156 - 157 - return 0; 73 + return regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL1, 74 + PCF8523_CONTROL1_CAP_SEL, value); 158 75 } 159 76 160 77 static irqreturn_t pcf8523_irq(int irq, void *dev_id) 161 78 { 162 - struct pcf8523 *pcf8523 = i2c_get_clientdata(dev_id); 163 - u8 value; 79 + struct pcf8523 *pcf8523 = dev_id; 80 + u32 value; 164 81 int err; 165 82 166 - err = pcf8523_read(pcf8523->client, PCF8523_REG_CONTROL2, &value); 83 + err = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL2, &value); 167 84 if (err < 0) 168 85 return IRQ_HANDLED; 169 86 170 87 if (value & PCF8523_CONTROL2_AF) { 171 88 value &= ~PCF8523_CONTROL2_AF; 172 - pcf8523_write(pcf8523->client, PCF8523_REG_CONTROL2, value); 89 + regmap_write(pcf8523->regmap, PCF8523_REG_CONTROL2, value); 173 90 rtc_update_irq(pcf8523->rtc, 1, RTC_IRQF | RTC_AF); 174 91 175 92 return IRQ_HANDLED; ··· 96 177 return IRQ_NONE; 97 178 } 98 179 99 - static int pcf8523_stop_rtc(struct i2c_client *client) 100 - { 101 - u8 value; 102 - int err; 103 - 104 - err = pcf8523_read(client, PCF8523_REG_CONTROL1, &value); 105 - if (err < 0) 106 - return err; 107 - 108 - value |= PCF8523_CONTROL1_STOP; 109 - 110 - err = pcf8523_write(client, PCF8523_REG_CONTROL1, value); 111 - if (err < 0) 112 - return err; 113 - 114 - return 0; 115 - } 116 - 117 - static int pcf8523_start_rtc(struct i2c_client *client) 118 - { 119 - u8 value; 120 - int err; 121 - 122 - err = pcf8523_read(client, PCF8523_REG_CONTROL1, &value); 123 - if (err < 0) 124 - return err; 125 - 126 - value &= ~PCF8523_CONTROL1_STOP; 127 - 128 - err = pcf8523_write(client, PCF8523_REG_CONTROL1, value); 129 - if (err < 0) 130 - return err; 131 - 132 - return 0; 133 - } 134 - 135 180 static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm) 136 181 { 137 - struct i2c_client *client = to_i2c_client(dev); 138 - u8 start = PCF8523_REG_SECONDS, regs[7]; 139 - struct i2c_msg msgs[2]; 182 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 183 + u8 regs[7]; 140 184 int err; 141 185 142 - err = pcf8523_voltage_low(client); 143 - if (err < 0) { 144 - return err; 145 - } else if (err > 0) { 146 - dev_err(dev, "low voltage detected, time is unreliable\n"); 147 - return -EINVAL; 148 - } 149 - 150 - msgs[0].addr = client->addr; 151 - msgs[0].flags = 0; 152 - msgs[0].len = 1; 153 - msgs[0].buf = &start; 154 - 155 - msgs[1].addr = client->addr; 156 - msgs[1].flags = I2C_M_RD; 157 - msgs[1].len = sizeof(regs); 158 - msgs[1].buf = regs; 159 - 160 - err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 186 + err = regmap_bulk_read(pcf8523->regmap, PCF8523_REG_SECONDS, regs, 187 + sizeof(regs)); 161 188 if (err < 0) 162 189 return err; 163 190 ··· 123 258 124 259 static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm) 125 260 { 126 - struct i2c_client *client = to_i2c_client(dev); 127 - struct i2c_msg msg; 128 - u8 regs[8]; 261 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 262 + u8 regs[7]; 129 263 int err; 130 264 131 - err = pcf8523_stop_rtc(client); 265 + err = regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL1, 266 + PCF8523_CONTROL1_STOP, PCF8523_CONTROL1_STOP); 132 267 if (err < 0) 133 268 return err; 134 269 135 - regs[0] = PCF8523_REG_SECONDS; 136 270 /* This will purposely overwrite PCF8523_SECONDS_OS */ 137 - regs[1] = bin2bcd(tm->tm_sec); 138 - regs[2] = bin2bcd(tm->tm_min); 139 - regs[3] = bin2bcd(tm->tm_hour); 140 - regs[4] = bin2bcd(tm->tm_mday); 141 - regs[5] = tm->tm_wday; 142 - regs[6] = bin2bcd(tm->tm_mon + 1); 143 - regs[7] = bin2bcd(tm->tm_year - 100); 271 + regs[0] = bin2bcd(tm->tm_sec); 272 + regs[1] = bin2bcd(tm->tm_min); 273 + regs[2] = bin2bcd(tm->tm_hour); 274 + regs[3] = bin2bcd(tm->tm_mday); 275 + regs[4] = tm->tm_wday; 276 + regs[5] = bin2bcd(tm->tm_mon + 1); 277 + regs[6] = bin2bcd(tm->tm_year - 100); 144 278 145 - msg.addr = client->addr; 146 - msg.flags = 0; 147 - msg.len = sizeof(regs); 148 - msg.buf = regs; 149 - 150 - err = i2c_transfer(client->adapter, &msg, 1); 279 + err = regmap_bulk_write(pcf8523->regmap, PCF8523_REG_SECONDS, regs, 280 + sizeof(regs)); 151 281 if (err < 0) { 152 282 /* 153 283 * If the time cannot be set, restart the RTC anyway. Note 154 284 * that errors are ignored if the RTC cannot be started so 155 285 * that we have a chance to propagate the original error. 156 286 */ 157 - pcf8523_start_rtc(client); 287 + regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL1, 288 + PCF8523_CONTROL1_STOP, 0); 158 289 return err; 159 290 } 160 291 161 - return pcf8523_start_rtc(client); 292 + return regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL1, 293 + PCF8523_CONTROL1_STOP, 0); 162 294 } 163 295 164 296 static int pcf8523_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *tm) 165 297 { 166 - struct i2c_client *client = to_i2c_client(dev); 167 - u8 start = PCF8523_REG_MINUTE_ALARM, regs[4]; 168 - struct i2c_msg msgs[2]; 169 - u8 value; 298 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 299 + u8 regs[4]; 300 + u32 value; 170 301 int err; 171 302 172 - msgs[0].addr = client->addr; 173 - msgs[0].flags = 0; 174 - msgs[0].len = 1; 175 - msgs[0].buf = &start; 176 - 177 - msgs[1].addr = client->addr; 178 - msgs[1].flags = I2C_M_RD; 179 - msgs[1].len = sizeof(regs); 180 - msgs[1].buf = regs; 181 - 182 - err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 303 + err = regmap_bulk_read(pcf8523->regmap, PCF8523_REG_MINUTE_ALARM, regs, 304 + sizeof(regs)); 183 305 if (err < 0) 184 306 return err; 185 307 ··· 176 324 tm->time.tm_mday = bcd2bin(regs[2] & 0x3F); 177 325 tm->time.tm_wday = bcd2bin(regs[3] & 0x7); 178 326 179 - err = pcf8523_read(client, PCF8523_REG_CONTROL1, &value); 327 + err = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL1, &value); 180 328 if (err < 0) 181 329 return err; 182 330 tm->enabled = !!(value & PCF8523_CONTROL1_AIE); 183 331 184 - err = pcf8523_read(client, PCF8523_REG_CONTROL2, &value); 332 + err = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL2, &value); 185 333 if (err < 0) 186 334 return err; 187 335 tm->pending = !!(value & PCF8523_CONTROL2_AF); ··· 191 339 192 340 static int pcf8523_irq_enable(struct device *dev, unsigned int enabled) 193 341 { 194 - struct i2c_client *client = to_i2c_client(dev); 195 - u8 value; 196 - int err; 342 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 197 343 198 - err = pcf8523_read(client, PCF8523_REG_CONTROL1, &value); 199 - if (err < 0) 200 - return err; 201 - 202 - value &= PCF8523_CONTROL1_AIE; 203 - 204 - if (enabled) 205 - value |= PCF8523_CONTROL1_AIE; 206 - 207 - err = pcf8523_write(client, PCF8523_REG_CONTROL1, value); 208 - if (err < 0) 209 - return err; 210 - 211 - return 0; 344 + return regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL1, 345 + PCF8523_CONTROL1_AIE, enabled ? 346 + PCF8523_CONTROL1_AIE : 0); 212 347 } 213 348 214 349 static int pcf8523_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *tm) 215 350 { 216 - struct i2c_client *client = to_i2c_client(dev); 217 - struct i2c_msg msg; 351 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 218 352 u8 regs[5]; 219 353 int err; 220 354 ··· 208 370 if (err) 209 371 return err; 210 372 211 - err = pcf8523_write(client, PCF8523_REG_CONTROL2, 0); 373 + err = regmap_write(pcf8523->regmap, PCF8523_REG_CONTROL2, 0); 212 374 if (err < 0) 213 375 return err; 214 376 ··· 220 382 rtc_time64_to_tm(alarm_time, &tm->time); 221 383 } 222 384 223 - regs[0] = PCF8523_REG_MINUTE_ALARM; 224 - regs[1] = bin2bcd(tm->time.tm_min); 225 - regs[2] = bin2bcd(tm->time.tm_hour); 226 - regs[3] = bin2bcd(tm->time.tm_mday); 227 - regs[4] = ALARM_DIS; 228 - msg.addr = client->addr; 229 - msg.flags = 0; 230 - msg.len = sizeof(regs); 231 - msg.buf = regs; 232 - err = i2c_transfer(client->adapter, &msg, 1); 385 + regs[0] = bin2bcd(tm->time.tm_min); 386 + regs[1] = bin2bcd(tm->time.tm_hour); 387 + regs[2] = bin2bcd(tm->time.tm_mday); 388 + regs[3] = ALARM_DIS; 389 + 390 + err = regmap_bulk_write(pcf8523->regmap, PCF8523_REG_MINUTE_ALARM, regs, 391 + sizeof(regs)); 233 392 if (err < 0) 234 393 return err; 235 394 ··· 236 401 return 0; 237 402 } 238 403 239 - #ifdef CONFIG_RTC_INTF_DEV 404 + static int pcf8523_param_get(struct device *dev, struct rtc_param *param) 405 + { 406 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 407 + int ret; 408 + 409 + switch(param->param) { 410 + u32 value; 411 + 412 + case RTC_PARAM_BACKUP_SWITCH_MODE: 413 + ret = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL3, &value); 414 + if (ret < 0) 415 + return ret; 416 + 417 + value = FIELD_GET(PCF8523_CONTROL3_PM, value); 418 + 419 + switch(value) { 420 + case 0x0: 421 + case 0x4: 422 + param->uvalue = RTC_BSM_LEVEL; 423 + break; 424 + case 0x1: 425 + case 0x5: 426 + param->uvalue = RTC_BSM_DIRECT; 427 + break; 428 + case PCF8523_PM_STANDBY: 429 + param->uvalue = RTC_BSM_STANDBY; 430 + break; 431 + default: 432 + param->uvalue = RTC_BSM_DISABLED; 433 + } 434 + 435 + break; 436 + 437 + default: 438 + return -EINVAL; 439 + } 440 + 441 + return 0; 442 + } 443 + 444 + static int pcf8523_param_set(struct device *dev, struct rtc_param *param) 445 + { 446 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 447 + 448 + switch(param->param) { 449 + u8 mode; 450 + case RTC_PARAM_BACKUP_SWITCH_MODE: 451 + switch (param->uvalue) { 452 + case RTC_BSM_DISABLED: 453 + mode = 0x2; 454 + break; 455 + case RTC_BSM_DIRECT: 456 + mode = 0x1; 457 + break; 458 + case RTC_BSM_LEVEL: 459 + mode = 0x0; 460 + break; 461 + case RTC_BSM_STANDBY: 462 + mode = PCF8523_PM_STANDBY; 463 + break; 464 + default: 465 + return -EINVAL; 466 + } 467 + 468 + return regmap_update_bits(pcf8523->regmap, PCF8523_REG_CONTROL3, 469 + PCF8523_CONTROL3_PM, 470 + FIELD_PREP(PCF8523_CONTROL3_PM, mode)); 471 + 472 + break; 473 + 474 + default: 475 + return -EINVAL; 476 + } 477 + 478 + return 0; 479 + } 480 + 240 481 static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd, 241 482 unsigned long arg) 242 483 { 243 - struct i2c_client *client = to_i2c_client(dev); 484 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 244 485 unsigned int flags = 0; 245 - u8 value; 486 + u32 value; 246 487 int ret; 247 488 248 489 switch (cmd) { 249 490 case RTC_VL_READ: 250 - ret = pcf8523_voltage_low(client); 491 + ret = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL3, &value); 251 492 if (ret < 0) 252 493 return ret; 253 - if (ret) 494 + 495 + if (value & PCF8523_CONTROL3_BLF) 254 496 flags |= RTC_VL_BACKUP_LOW; 255 497 256 - ret = pcf8523_read(client, PCF8523_REG_SECONDS, &value); 498 + ret = regmap_read(pcf8523->regmap, PCF8523_REG_SECONDS, &value); 257 499 if (ret < 0) 258 500 return ret; 259 501 ··· 343 431 return -ENOIOCTLCMD; 344 432 } 345 433 } 346 - #else 347 - #define pcf8523_rtc_ioctl NULL 348 - #endif 349 434 350 435 static int pcf8523_rtc_read_offset(struct device *dev, long *offset) 351 436 { 352 - struct i2c_client *client = to_i2c_client(dev); 437 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 353 438 int err; 354 - u8 value; 439 + u32 value; 355 440 s8 val; 356 441 357 - err = pcf8523_read(client, PCF8523_REG_OFFSET, &value); 442 + err = regmap_read(pcf8523->regmap, PCF8523_REG_OFFSET, &value); 358 443 if (err < 0) 359 444 return err; 360 445 ··· 364 455 365 456 static int pcf8523_rtc_set_offset(struct device *dev, long offset) 366 457 { 367 - struct i2c_client *client = to_i2c_client(dev); 458 + struct pcf8523 *pcf8523 = dev_get_drvdata(dev); 368 459 long reg_m0, reg_m1; 369 - u8 value; 460 + u32 value; 370 461 371 462 reg_m0 = clamp(DIV_ROUND_CLOSEST(offset, 4340), -64L, 63L); 372 463 reg_m1 = clamp(DIV_ROUND_CLOSEST(offset, 4069), -64L, 63L); ··· 376 467 else 377 468 value = (reg_m1 & 0x7f) | PCF8523_OFFSET_MODE; 378 469 379 - return pcf8523_write(client, PCF8523_REG_OFFSET, value); 470 + return regmap_write(pcf8523->regmap, PCF8523_REG_OFFSET, value); 380 471 } 381 472 382 473 static const struct rtc_class_ops pcf8523_rtc_ops = { ··· 388 479 .ioctl = pcf8523_rtc_ioctl, 389 480 .read_offset = pcf8523_rtc_read_offset, 390 481 .set_offset = pcf8523_rtc_set_offset, 482 + .param_get = pcf8523_param_get, 483 + .param_set = pcf8523_param_set, 484 + }; 485 + 486 + static const struct regmap_config regmap_config = { 487 + .reg_bits = 8, 488 + .val_bits = 8, 489 + .max_register = 0x13, 391 490 }; 392 491 393 492 static int pcf8523_probe(struct i2c_client *client, ··· 404 487 struct pcf8523 *pcf8523; 405 488 struct rtc_device *rtc; 406 489 bool wakeup_source = false; 490 + u32 value; 407 491 int err; 408 492 409 493 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) ··· 414 496 if (!pcf8523) 415 497 return -ENOMEM; 416 498 499 + pcf8523->regmap = devm_regmap_init_i2c(client, &regmap_config); 500 + if (IS_ERR(pcf8523->regmap)) 501 + return PTR_ERR(pcf8523->regmap); 502 + 417 503 i2c_set_clientdata(client, pcf8523); 418 - pcf8523->client = client; 419 - 420 - err = pcf8523_load_capacitance(client); 421 - if (err < 0) 422 - dev_warn(&client->dev, "failed to set xtal load capacitance: %d", 423 - err); 424 - 425 - err = pcf8523_set_pm(client, 0); 426 - if (err < 0) 427 - return err; 428 504 429 505 rtc = devm_rtc_allocate_device(&client->dev); 430 506 if (IS_ERR(rtc)) 431 507 return PTR_ERR(rtc); 432 - 433 508 pcf8523->rtc = rtc; 509 + 510 + err = pcf8523_load_capacitance(pcf8523, client->dev.of_node); 511 + if (err < 0) 512 + dev_warn(&client->dev, "failed to set xtal load capacitance: %d", 513 + err); 514 + 515 + err = regmap_read(pcf8523->regmap, PCF8523_REG_SECONDS, &value); 516 + if (err < 0) 517 + return err; 518 + 519 + if (value & PCF8523_SECONDS_OS) { 520 + err = regmap_read(pcf8523->regmap, PCF8523_REG_CONTROL3, &value); 521 + if (err < 0) 522 + return err; 523 + 524 + if (FIELD_GET(PCF8523_CONTROL3_PM, value) == PCF8523_PM_STANDBY) { 525 + err = regmap_write(pcf8523->regmap, PCF8523_REG_CONTROL3, 526 + value & ~PCF8523_CONTROL3_PM); 527 + if (err < 0) 528 + return err; 529 + } 530 + } 531 + 434 532 rtc->ops = &pcf8523_rtc_ops; 435 533 rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 436 534 rtc->range_max = RTC_TIMESTAMP_END_2099; 437 535 rtc->uie_unsupported = 1; 438 536 439 537 if (client->irq > 0) { 440 - err = pcf8523_write(client, PCF8523_TMR_CLKOUT_CTRL, 0x38); 538 + err = regmap_write(pcf8523->regmap, PCF8523_TMR_CLKOUT_CTRL, 0x38); 441 539 if (err < 0) 442 540 return err; 443 541 444 542 err = devm_request_threaded_irq(&client->dev, client->irq, 445 543 NULL, pcf8523_irq, 446 544 IRQF_SHARED | IRQF_ONESHOT | IRQF_TRIGGER_LOW, 447 - dev_name(&rtc->dev), client); 545 + dev_name(&rtc->dev), pcf8523); 448 546 if (err) 449 547 return err; 450 548 451 549 dev_pm_set_wake_irq(&client->dev, client->irq); 452 550 } 453 551 454 - #ifdef CONFIG_OF 455 552 wakeup_source = of_property_read_bool(client->dev.of_node, "wakeup-source"); 456 - #endif 457 553 if (client->irq > 0 || wakeup_source) 458 554 device_init_wakeup(&client->dev, true); 459 555 ··· 480 548 }; 481 549 MODULE_DEVICE_TABLE(i2c, pcf8523_id); 482 550 483 - #ifdef CONFIG_OF 484 551 static const struct of_device_id pcf8523_of_match[] = { 485 552 { .compatible = "nxp,pcf8523" }, 486 553 { .compatible = "microcrystal,rv8523" }, 487 554 { } 488 555 }; 489 556 MODULE_DEVICE_TABLE(of, pcf8523_of_match); 490 - #endif 491 557 492 558 static struct i2c_driver pcf8523_driver = { 493 559 .driver = { 494 560 .name = "rtc-pcf8523", 495 - .of_match_table = of_match_ptr(pcf8523_of_match), 561 + .of_match_table = pcf8523_of_match, 496 562 }, 497 563 .probe = pcf8523_probe, 498 564 .id_table = pcf8523_id,
+74
drivers/rtc/rtc-rv3028.c
··· 10 10 11 11 #include <linux/clk-provider.h> 12 12 #include <linux/bcd.h> 13 + #include <linux/bitfield.h> 13 14 #include <linux/bitops.h> 14 15 #include <linux/i2c.h> 15 16 #include <linux/interrupt.h> ··· 81 80 82 81 #define RV3028_BACKUP_TCE BIT(5) 83 82 #define RV3028_BACKUP_TCR_MASK GENMASK(1,0) 83 + #define RV3028_BACKUP_BSM GENMASK(3,2) 84 + 85 + #define RV3028_BACKUP_BSM_DSM 0x1 86 + #define RV3028_BACKUP_BSM_LSM 0x3 84 87 85 88 #define OFFSET_STEP_PPT 953674 86 89 ··· 517 512 518 513 } 519 514 515 + static int rv3028_param_get(struct device *dev, struct rtc_param *param) 516 + { 517 + struct rv3028_data *rv3028 = dev_get_drvdata(dev); 518 + int ret; 519 + 520 + switch(param->param) { 521 + u32 value; 522 + 523 + case RTC_PARAM_BACKUP_SWITCH_MODE: 524 + ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value); 525 + if (ret < 0) 526 + return ret; 527 + 528 + value = FIELD_GET(RV3028_BACKUP_BSM, value); 529 + 530 + switch(value) { 531 + case RV3028_BACKUP_BSM_DSM: 532 + param->uvalue = RTC_BSM_DIRECT; 533 + break; 534 + case RV3028_BACKUP_BSM_LSM: 535 + param->uvalue = RTC_BSM_LEVEL; 536 + break; 537 + default: 538 + param->uvalue = RTC_BSM_DISABLED; 539 + } 540 + break; 541 + 542 + default: 543 + return -EINVAL; 544 + } 545 + 546 + return 0; 547 + } 548 + 549 + static int rv3028_param_set(struct device *dev, struct rtc_param *param) 550 + { 551 + struct rv3028_data *rv3028 = dev_get_drvdata(dev); 552 + 553 + switch(param->param) { 554 + u8 mode; 555 + case RTC_PARAM_BACKUP_SWITCH_MODE: 556 + switch (param->uvalue) { 557 + case RTC_BSM_DISABLED: 558 + mode = 0; 559 + break; 560 + case RTC_BSM_DIRECT: 561 + mode = RV3028_BACKUP_BSM_DSM; 562 + break; 563 + case RTC_BSM_LEVEL: 564 + mode = RV3028_BACKUP_BSM_LSM; 565 + break; 566 + default: 567 + return -EINVAL; 568 + } 569 + 570 + return rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_BSM, 571 + FIELD_PREP(RV3028_BACKUP_BSM, mode)); 572 + 573 + default: 574 + return -EINVAL; 575 + } 576 + 577 + return 0; 578 + } 579 + 520 580 static int rv3028_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) 521 581 { 522 582 struct rv3028_data *rv3028 = dev_get_drvdata(dev); ··· 846 776 .read_offset = rv3028_read_offset, 847 777 .set_offset = rv3028_set_offset, 848 778 .ioctl = rv3028_ioctl, 779 + .param_get = rv3028_param_get, 780 + .param_set = rv3028_param_set, 849 781 }; 850 782 851 783 static const struct regmap_config regmap_config = { ··· 949 877 ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group); 950 878 if (ret) 951 879 return ret; 880 + 881 + set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3028->rtc->features); 952 882 953 883 rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 954 884 rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
+79 -10
drivers/rtc/rtc-rv3032.c
··· 106 106 struct rv3032_data { 107 107 struct regmap *regmap; 108 108 struct rtc_device *rtc; 109 + bool trickle_charger_set; 109 110 #ifdef CONFIG_COMMON_CLK 110 111 struct clk_hw clkout_hw; 111 112 #endif ··· 311 310 u8 ctrl = 0; 312 311 int ret; 313 312 314 - /* The alarm has no seconds, round up to nearest minute */ 315 - if (alrm->time.tm_sec) { 316 - time64_t alarm_time = rtc_tm_to_time64(&alrm->time); 317 - 318 - alarm_time += 60 - alrm->time.tm_sec; 319 - rtc_time64_to_tm(alarm_time, &alrm->time); 320 - } 321 - 322 313 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, 323 314 RV3032_CTRL2_AIE | RV3032_CTRL2_UIE, 0); 324 315 if (ret) ··· 393 400 394 401 return rv3032_update_cfg(rv3032, RV3032_OFFSET, RV3032_OFFSET_MSK, 395 402 FIELD_PREP(RV3032_OFFSET_MSK, offset)); 403 + } 404 + 405 + static int rv3032_param_get(struct device *dev, struct rtc_param *param) 406 + { 407 + struct rv3032_data *rv3032 = dev_get_drvdata(dev); 408 + int ret; 409 + 410 + switch(param->param) { 411 + u32 value; 412 + 413 + case RTC_PARAM_BACKUP_SWITCH_MODE: 414 + ret = regmap_read(rv3032->regmap, RV3032_PMU, &value); 415 + if (ret < 0) 416 + return ret; 417 + 418 + value = FIELD_GET(RV3032_PMU_BSM, value); 419 + 420 + switch(value) { 421 + case RV3032_PMU_BSM_DSM: 422 + param->uvalue = RTC_BSM_DIRECT; 423 + break; 424 + case RV3032_PMU_BSM_LSM: 425 + param->uvalue = RTC_BSM_LEVEL; 426 + break; 427 + default: 428 + param->uvalue = RTC_BSM_DISABLED; 429 + } 430 + 431 + break; 432 + 433 + default: 434 + return -EINVAL; 435 + } 436 + 437 + return 0; 438 + } 439 + 440 + static int rv3032_param_set(struct device *dev, struct rtc_param *param) 441 + { 442 + struct rv3032_data *rv3032 = dev_get_drvdata(dev); 443 + 444 + switch(param->param) { 445 + u8 mode; 446 + case RTC_PARAM_BACKUP_SWITCH_MODE: 447 + if (rv3032->trickle_charger_set) 448 + return -EINVAL; 449 + 450 + switch (param->uvalue) { 451 + case RTC_BSM_DISABLED: 452 + mode = 0; 453 + break; 454 + case RTC_BSM_DIRECT: 455 + mode = RV3032_PMU_BSM_DSM; 456 + break; 457 + case RTC_BSM_LEVEL: 458 + mode = RV3032_PMU_BSM_LSM; 459 + break; 460 + default: 461 + return -EINVAL; 462 + } 463 + 464 + return rv3032_update_cfg(rv3032, RV3032_PMU, RV3032_PMU_BSM, 465 + FIELD_PREP(RV3032_PMU_BSM, mode)); 466 + 467 + default: 468 + return -EINVAL; 469 + } 470 + 471 + return 0; 396 472 } 397 473 398 474 static int rv3032_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) ··· 603 541 return 0; 604 542 } 605 543 544 + rv3032->trickle_charger_set = true; 545 + 606 546 return rv3032_update_cfg(rv3032, RV3032_PMU, 607 547 RV3032_PMU_TCR | RV3032_PMU_TCM | RV3032_PMU_BSM, 608 548 val | FIELD_PREP(RV3032_PMU_TCR, i)); ··· 681 617 682 618 ret = rv3032_enter_eerd(rv3032, &eerd); 683 619 if (ret) 684 - goto exit_eerd; 620 + return ret; 685 621 686 622 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT1, hfd & 0xff); 687 623 if (ret) 688 - return ret; 624 + goto exit_eerd; 689 625 690 626 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT2, RV3032_CLKOUT2_OS | 691 627 FIELD_PREP(RV3032_CLKOUT2_HFD_MSK, hfd >> 8)); ··· 877 813 .read_alarm = rv3032_get_alarm, 878 814 .set_alarm = rv3032_set_alarm, 879 815 .alarm_irq_enable = rv3032_alarm_irq_enable, 816 + .param_get = rv3032_param_get, 817 + .param_set = rv3032_param_set, 880 818 }; 881 819 882 820 static const struct regmap_config regmap_config = { ··· 948 882 return ret; 949 883 950 884 rv3032_trickle_charger_setup(&client->dev, rv3032); 885 + 886 + set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3032->rtc->features); 887 + set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rv3032->rtc->features); 951 888 952 889 rv3032->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 953 890 rv3032->rtc->range_max = RTC_TIMESTAMP_END_2099;
+2 -2
drivers/rtc/rtc-rv8803.c
··· 340 340 } 341 341 } 342 342 343 - ctrl[1] &= ~RV8803_FLAG_AF; 344 - err = rv8803_write_reg(rv8803->client, RV8803_FLAG, ctrl[1]); 343 + ctrl[0] &= ~RV8803_FLAG_AF; 344 + err = rv8803_write_reg(rv8803->client, RV8803_FLAG, ctrl[0]); 345 345 mutex_unlock(&rv8803->flags_lock); 346 346 if (err) 347 347 return err;
+1 -1
drivers/rtc/rtc-rx6110.c
··· 422 422 static int rx6110_i2c_probe(struct i2c_client *client, 423 423 const struct i2c_device_id *id) 424 424 { 425 - struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 425 + struct i2c_adapter *adapter = client->adapter; 426 426 struct rx6110_data *rx6110; 427 427 428 428 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
+57 -84
drivers/rtc/rtc-rx8025.c
··· 248 248 u8 date[7]; 249 249 int ret; 250 250 251 - if ((dt->tm_year < 100) || (dt->tm_year > 199)) 252 - return -EINVAL; 253 - 254 251 /* 255 252 * Here the read-only bits are written as "0". I'm not sure if that 256 253 * is sound. ··· 315 318 u8 ald[2]; 316 319 int ctrl2, err; 317 320 318 - if (client->irq <= 0) 319 - return -EINVAL; 320 - 321 321 err = rx8025_read_regs(client, RX8025_REG_ALDMIN, 2, ald); 322 322 if (err) 323 323 return err; ··· 348 354 struct rx8025_data *rx8025 = dev_get_drvdata(dev); 349 355 u8 ald[2]; 350 356 int err; 351 - 352 - if (client->irq <= 0) 353 - return -EINVAL; 354 - 355 - /* 356 - * Hardware alarm precision is 1 minute! 357 - * round up to nearest minute 358 - */ 359 - if (t->time.tm_sec) { 360 - time64_t alarm_time = rtc_tm_to_time64(&t->time); 361 - 362 - alarm_time += 60 - t->time.tm_sec; 363 - rtc_time64_to_tm(alarm_time, &t->time); 364 - } 365 357 366 358 ald[0] = bin2bcd(t->time.tm_min); 367 359 if (rx8025->ctrl1 & RX8025_BIT_CTRL1_1224) ··· 403 423 return 0; 404 424 } 405 425 406 - static const struct rtc_class_ops rx8025_rtc_ops = { 407 - .read_time = rx8025_get_time, 408 - .set_time = rx8025_set_time, 409 - .read_alarm = rx8025_read_alarm, 410 - .set_alarm = rx8025_set_alarm, 411 - .alarm_irq_enable = rx8025_alarm_irq_enable, 412 - }; 413 - 414 426 /* 415 - * Clock precision adjustment support 416 - * 417 427 * According to the RX8025 SA/NB application manual the frequency and 418 428 * temperature characteristics can be approximated using the following 419 429 * equation: ··· 414 444 * a : Coefficient = (-35 +-5) * 10**-9 415 445 * ut: Ultimate temperature in degree = +25 +-5 degree 416 446 * t : Any temperature in degree 417 - * 418 - * Note that the clock adjustment in ppb must be entered (which is 419 - * the negative value of the deviation). 420 447 */ 421 - static int rx8025_get_clock_adjust(struct device *dev, int *adj) 448 + static int rx8025_read_offset(struct device *dev, long *offset) 422 449 { 423 450 struct i2c_client *client = to_i2c_client(dev); 424 451 int digoff; ··· 424 457 if (digoff < 0) 425 458 return digoff; 426 459 427 - *adj = digoff >= 64 ? digoff - 128 : digoff; 428 - if (*adj > 0) 429 - (*adj)--; 430 - *adj *= -RX8025_ADJ_RESOLUTION; 460 + *offset = digoff >= 64 ? digoff - 128 : digoff; 461 + if (*offset > 0) 462 + (*offset)--; 463 + *offset *= RX8025_ADJ_RESOLUTION; 431 464 432 465 return 0; 433 466 } 434 467 435 - static int rx8025_set_clock_adjust(struct device *dev, int adj) 468 + static int rx8025_set_offset(struct device *dev, long offset) 436 469 { 437 470 struct i2c_client *client = to_i2c_client(dev); 438 471 u8 digoff; 439 472 int err; 440 473 441 - adj /= -RX8025_ADJ_RESOLUTION; 442 - if (adj > RX8025_ADJ_DATA_MAX) 443 - adj = RX8025_ADJ_DATA_MAX; 444 - else if (adj < RX8025_ADJ_DATA_MIN) 445 - adj = RX8025_ADJ_DATA_MIN; 446 - else if (adj > 0) 447 - adj++; 448 - else if (adj < 0) 449 - adj += 128; 450 - digoff = adj; 474 + offset /= RX8025_ADJ_RESOLUTION; 475 + if (offset > RX8025_ADJ_DATA_MAX) 476 + offset = RX8025_ADJ_DATA_MAX; 477 + else if (offset < RX8025_ADJ_DATA_MIN) 478 + offset = RX8025_ADJ_DATA_MIN; 479 + else if (offset > 0) 480 + offset++; 481 + else if (offset < 0) 482 + offset += 128; 483 + digoff = offset; 451 484 452 485 err = rx8025_write_reg(client, RX8025_REG_DIGOFF, digoff); 453 486 if (err) 454 487 return err; 455 488 456 - dev_dbg(dev, "%s: write 0x%02x\n", __func__, digoff); 457 - 458 489 return 0; 459 490 } 491 + 492 + static const struct rtc_class_ops rx8025_rtc_ops = { 493 + .read_time = rx8025_get_time, 494 + .set_time = rx8025_set_time, 495 + .read_alarm = rx8025_read_alarm, 496 + .set_alarm = rx8025_set_alarm, 497 + .alarm_irq_enable = rx8025_alarm_irq_enable, 498 + .read_offset = rx8025_read_offset, 499 + .set_offset = rx8025_set_offset, 500 + }; 460 501 461 502 static ssize_t rx8025_sysfs_show_clock_adjust(struct device *dev, 462 503 struct device_attribute *attr, 463 504 char *buf) 464 505 { 465 - int err, adj; 506 + long adj; 507 + int err; 466 508 467 - err = rx8025_get_clock_adjust(dev, &adj); 509 + dev_warn_once(dev, "clock_adjust_ppb is deprecated, use offset\n"); 510 + err = rx8025_read_offset(dev, &adj); 468 511 if (err) 469 512 return err; 470 513 471 - return sprintf(buf, "%d\n", adj); 514 + return sprintf(buf, "%ld\n", -adj); 472 515 } 473 516 474 517 static ssize_t rx8025_sysfs_store_clock_adjust(struct device *dev, 475 518 struct device_attribute *attr, 476 519 const char *buf, size_t count) 477 520 { 478 - int adj, err; 521 + long adj; 522 + int err; 479 523 480 - if (sscanf(buf, "%i", &adj) != 1) 524 + dev_warn_once(dev, "clock_adjust_ppb is deprecated, use offset\n"); 525 + if (kstrtol(buf, 10, &adj) != 0) 481 526 return -EINVAL; 482 527 483 - err = rx8025_set_clock_adjust(dev, adj); 528 + err = rx8025_set_offset(dev, -adj); 484 529 485 530 return err ? err : count; 486 531 } ··· 501 522 rx8025_sysfs_show_clock_adjust, 502 523 rx8025_sysfs_store_clock_adjust); 503 524 504 - static int rx8025_sysfs_register(struct device *dev) 505 - { 506 - return device_create_file(dev, &dev_attr_clock_adjust_ppb); 507 - } 525 + static struct attribute *rx8025_attrs[] = { 526 + &dev_attr_clock_adjust_ppb.attr, 527 + NULL 528 + }; 508 529 509 - static void rx8025_sysfs_unregister(struct device *dev) 510 - { 511 - device_remove_file(dev, &dev_attr_clock_adjust_ppb); 512 - } 530 + static const struct attribute_group rx8025_attr_group = { 531 + .attrs = rx8025_attrs, 532 + }; 513 533 514 534 static int rx8025_probe(struct i2c_client *client, 515 535 const struct i2c_device_id *id) ··· 537 559 if (err) 538 560 return err; 539 561 540 - rx8025->rtc = devm_rtc_device_register(&client->dev, client->name, 541 - &rx8025_rtc_ops, THIS_MODULE); 542 - if (IS_ERR(rx8025->rtc)) { 543 - dev_err(&client->dev, "unable to register the class device\n"); 562 + rx8025->rtc = devm_rtc_allocate_device(&client->dev); 563 + if (IS_ERR(rx8025->rtc)) 544 564 return PTR_ERR(rx8025->rtc); 545 - } 565 + 566 + rx8025->rtc->ops = &rx8025_rtc_ops; 567 + rx8025->rtc->range_min = RTC_TIMESTAMP_BEGIN_1900; 568 + rx8025->rtc->range_max = RTC_TIMESTAMP_END_2099; 546 569 547 570 if (client->irq > 0) { 548 571 dev_info(&client->dev, "IRQ %d supplied\n", client->irq); ··· 551 572 rx8025_handle_irq, 552 573 IRQF_ONESHOT, 553 574 "rx8025", client); 554 - if (err) { 555 - dev_err(&client->dev, "unable to request IRQ, alarms disabled\n"); 556 - client->irq = 0; 557 - } 575 + if (err) 576 + clear_bit(RTC_FEATURE_ALARM, rx8025->rtc->features); 558 577 } 559 578 560 579 rx8025->rtc->max_user_freq = 1; 561 580 562 - /* the rx8025 alarm only supports a minute accuracy */ 563 - rx8025->rtc->uie_unsupported = 1; 581 + set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rx8025->rtc->features); 582 + clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rx8025->rtc->features); 564 583 565 - err = rx8025_sysfs_register(&client->dev); 566 - return err; 567 - } 584 + err = rtc_add_group(rx8025->rtc, &rx8025_attr_group); 585 + if (err) 586 + return err; 568 587 569 - static int rx8025_remove(struct i2c_client *client) 570 - { 571 - rx8025_sysfs_unregister(&client->dev); 572 - return 0; 588 + return devm_rtc_register_device(rx8025->rtc); 573 589 } 574 590 575 591 static struct i2c_driver rx8025_driver = { ··· 572 598 .name = "rtc-rx8025", 573 599 }, 574 600 .probe = rx8025_probe, 575 - .remove = rx8025_remove, 576 601 .id_table = rx8025_id, 577 602 }; 578 603
+2 -5
drivers/rtc/rtc-s35390a.c
··· 285 285 alm->time.tm_min, alm->time.tm_hour, alm->time.tm_mday, 286 286 alm->time.tm_mon, alm->time.tm_year, alm->time.tm_wday); 287 287 288 - if (alm->time.tm_sec != 0) 289 - dev_warn(&client->dev, "Alarms are only supported on a per minute basis!\n"); 290 - 291 288 /* disable interrupt (which deasserts the irq line) */ 292 289 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); 293 290 if (err < 0) ··· 488 491 s35390a->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 489 492 s35390a->rtc->range_max = RTC_TIMESTAMP_END_2099; 490 493 491 - /* supports per-minute alarms only, therefore set uie_unsupported */ 492 - s35390a->rtc->uie_unsupported = 1; 494 + set_bit(RTC_FEATURE_ALARM_RES_MINUTE, s35390a->rtc->features); 495 + clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, s35390a->rtc->features ); 493 496 494 497 if (status1 & S35390A_FLAG_INT2) 495 498 rtc_update_irq(s35390a->rtc, 1, RTC_AF);
+64 -40
drivers/rtc/rtc-s3c.c
··· 127 127 return ret; 128 128 } 129 129 130 - /* Time read/write */ 131 - static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) 130 + /* Read time from RTC and convert it from BCD */ 131 + static int s3c_rtc_read_time(struct s3c_rtc *info, struct rtc_time *tm) 132 132 { 133 - struct s3c_rtc *info = dev_get_drvdata(dev); 134 133 unsigned int have_retried = 0; 135 134 int ret; 136 135 ··· 138 139 return ret; 139 140 140 141 retry_get_time: 141 - rtc_tm->tm_min = readb(info->base + S3C2410_RTCMIN); 142 - rtc_tm->tm_hour = readb(info->base + S3C2410_RTCHOUR); 143 - rtc_tm->tm_mday = readb(info->base + S3C2410_RTCDATE); 144 - rtc_tm->tm_mon = readb(info->base + S3C2410_RTCMON); 145 - rtc_tm->tm_year = readb(info->base + S3C2410_RTCYEAR); 146 - rtc_tm->tm_sec = readb(info->base + S3C2410_RTCSEC); 142 + tm->tm_min = readb(info->base + S3C2410_RTCMIN); 143 + tm->tm_hour = readb(info->base + S3C2410_RTCHOUR); 144 + tm->tm_mday = readb(info->base + S3C2410_RTCDATE); 145 + tm->tm_mon = readb(info->base + S3C2410_RTCMON); 146 + tm->tm_year = readb(info->base + S3C2410_RTCYEAR); 147 + tm->tm_sec = readb(info->base + S3C2410_RTCSEC); 147 148 148 - /* the only way to work out whether the system was mid-update 149 + /* 150 + * The only way to work out whether the system was mid-update 149 151 * when we read it is to check the second counter, and if it 150 152 * is zero, then we re-try the entire read 151 153 */ 152 - 153 - if (rtc_tm->tm_sec == 0 && !have_retried) { 154 + if (tm->tm_sec == 0 && !have_retried) { 154 155 have_retried = 1; 155 156 goto retry_get_time; 156 157 } 157 158 158 - rtc_tm->tm_sec = bcd2bin(rtc_tm->tm_sec); 159 - rtc_tm->tm_min = bcd2bin(rtc_tm->tm_min); 160 - rtc_tm->tm_hour = bcd2bin(rtc_tm->tm_hour); 161 - rtc_tm->tm_mday = bcd2bin(rtc_tm->tm_mday); 162 - rtc_tm->tm_mon = bcd2bin(rtc_tm->tm_mon); 163 - rtc_tm->tm_year = bcd2bin(rtc_tm->tm_year); 164 - 165 159 s3c_rtc_disable_clk(info); 166 160 167 - rtc_tm->tm_year += 100; 168 - rtc_tm->tm_mon -= 1; 161 + tm->tm_sec = bcd2bin(tm->tm_sec); 162 + tm->tm_min = bcd2bin(tm->tm_min); 163 + tm->tm_hour = bcd2bin(tm->tm_hour); 164 + tm->tm_mday = bcd2bin(tm->tm_mday); 165 + tm->tm_mon = bcd2bin(tm->tm_mon); 166 + tm->tm_year = bcd2bin(tm->tm_year); 169 167 170 - dev_dbg(dev, "read time %ptR\n", rtc_tm); 171 168 return 0; 172 169 } 173 170 174 - static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 171 + /* Convert time to BCD and write it to RTC */ 172 + static int s3c_rtc_write_time(struct s3c_rtc *info, const struct rtc_time *tm) 175 173 { 176 - struct s3c_rtc *info = dev_get_drvdata(dev); 177 - int year = tm->tm_year - 100; 178 174 int ret; 179 - 180 - dev_dbg(dev, "set time %ptR\n", tm); 181 - 182 - /* we get around y2k by simply not supporting it */ 183 - 184 - if (year < 0 || year >= 100) { 185 - dev_err(dev, "rtc only supports 100 years\n"); 186 - return -EINVAL; 187 - } 188 175 189 176 ret = s3c_rtc_enable_clk(info); 190 177 if (ret) ··· 180 195 writeb(bin2bcd(tm->tm_min), info->base + S3C2410_RTCMIN); 181 196 writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_RTCHOUR); 182 197 writeb(bin2bcd(tm->tm_mday), info->base + S3C2410_RTCDATE); 183 - writeb(bin2bcd(tm->tm_mon + 1), info->base + S3C2410_RTCMON); 184 - writeb(bin2bcd(year), info->base + S3C2410_RTCYEAR); 198 + writeb(bin2bcd(tm->tm_mon), info->base + S3C2410_RTCMON); 199 + writeb(bin2bcd(tm->tm_year), info->base + S3C2410_RTCYEAR); 185 200 186 201 s3c_rtc_disable_clk(info); 187 202 188 203 return 0; 204 + } 205 + 206 + static int s3c_rtc_gettime(struct device *dev, struct rtc_time *tm) 207 + { 208 + struct s3c_rtc *info = dev_get_drvdata(dev); 209 + int ret; 210 + 211 + ret = s3c_rtc_read_time(info, tm); 212 + if (ret) 213 + return ret; 214 + 215 + /* Convert internal representation to actual date/time */ 216 + tm->tm_year += 100; 217 + tm->tm_mon -= 1; 218 + 219 + dev_dbg(dev, "read time %ptR\n", tm); 220 + return 0; 221 + } 222 + 223 + static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 224 + { 225 + struct s3c_rtc *info = dev_get_drvdata(dev); 226 + struct rtc_time rtc_tm = *tm; 227 + 228 + dev_dbg(dev, "set time %ptR\n", tm); 229 + 230 + /* 231 + * Convert actual date/time to internal representation. 232 + * We get around Y2K by simply not supporting it. 233 + */ 234 + rtc_tm.tm_year -= 100; 235 + rtc_tm.tm_mon += 1; 236 + 237 + return s3c_rtc_write_time(info, &rtc_tm); 189 238 } 190 239 191 240 static int s3c_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm) ··· 466 447 467 448 device_init_wakeup(&pdev->dev, 1); 468 449 469 - /* register RTC and exit */ 470 - info->rtc = devm_rtc_device_register(&pdev->dev, "s3c", &s3c_rtcops, 471 - THIS_MODULE); 450 + info->rtc = devm_rtc_allocate_device(&pdev->dev); 472 451 if (IS_ERR(info->rtc)) { 473 - dev_err(&pdev->dev, "cannot attach rtc\n"); 474 452 ret = PTR_ERR(info->rtc); 475 453 goto err_nortc; 476 454 } 455 + 456 + info->rtc->ops = &s3c_rtcops; 457 + info->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 458 + info->rtc->range_max = RTC_TIMESTAMP_END_2099; 459 + 460 + ret = devm_rtc_register_device(info->rtc); 461 + if (ret) 462 + goto err_nortc; 477 463 478 464 ret = devm_request_irq(&pdev->dev, info->irq_alarm, s3c_rtc_alarmirq, 479 465 0, "s3c2410-rtc alarm", info);
-1
drivers/rtc/rtc-s5m.c
··· 861 861 MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>"); 862 862 MODULE_DESCRIPTION("Samsung S5M/S2MPS14 RTC driver"); 863 863 MODULE_LICENSE("GPL"); 864 - MODULE_ALIAS("platform:s5m-rtc");
+11 -2
drivers/rtc/rtc-sun6i.c
··· 673 673 struct sun6i_rtc_dev *chip = sun6i_rtc; 674 674 int ret; 675 675 676 - if (!chip) 677 - return -ENODEV; 676 + if (!chip) { 677 + chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); 678 + if (!chip) 679 + return -ENOMEM; 680 + 681 + spin_lock_init(&chip->lock); 682 + 683 + chip->base = devm_platform_ioremap_resource(pdev, 0); 684 + if (IS_ERR(chip->base)) 685 + return PTR_ERR(chip->base); 686 + } 678 687 679 688 platform_set_drvdata(pdev, chip); 680 689
-324
drivers/rtc/rtc-tps80031.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * rtc-tps80031.c -- TI TPS80031/TPS80032 RTC driver 4 - * 5 - * RTC driver for TI TPS80031/TPS80032 Fully Integrated 6 - * Power Management with Power Path and Battery Charger 7 - * 8 - * Copyright (c) 2012, NVIDIA Corporation. 9 - * 10 - * Author: Laxman Dewangan <ldewangan@nvidia.com> 11 - */ 12 - 13 - #include <linux/bcd.h> 14 - #include <linux/device.h> 15 - #include <linux/err.h> 16 - #include <linux/init.h> 17 - #include <linux/kernel.h> 18 - #include <linux/module.h> 19 - #include <linux/mfd/tps80031.h> 20 - #include <linux/platform_device.h> 21 - #include <linux/pm.h> 22 - #include <linux/rtc.h> 23 - #include <linux/slab.h> 24 - 25 - #define ENABLE_ALARM_INT 0x08 26 - #define ALARM_INT_STATUS 0x40 27 - 28 - /** 29 - * Setting bit to 1 in STOP_RTC will run the RTC and 30 - * setting this bit to 0 will freeze RTC. 31 - */ 32 - #define STOP_RTC 0x1 33 - 34 - /* Power on reset Values of RTC registers */ 35 - #define TPS80031_RTC_POR_YEAR 0 36 - #define TPS80031_RTC_POR_MONTH 1 37 - #define TPS80031_RTC_POR_DAY 1 38 - 39 - /* Numbers of registers for time and alarms */ 40 - #define TPS80031_RTC_TIME_NUM_REGS 7 41 - #define TPS80031_RTC_ALARM_NUM_REGS 6 42 - 43 - /** 44 - * PMU RTC have only 2 nibbles to store year information, so using an 45 - * offset of 100 to set the base year as 2000 for our driver. 46 - */ 47 - #define RTC_YEAR_OFFSET 100 48 - 49 - struct tps80031_rtc { 50 - struct rtc_device *rtc; 51 - int irq; 52 - }; 53 - 54 - static int tps80031_rtc_read_time(struct device *dev, struct rtc_time *tm) 55 - { 56 - u8 buff[TPS80031_RTC_TIME_NUM_REGS]; 57 - int ret; 58 - 59 - ret = tps80031_reads(dev->parent, TPS80031_SLAVE_ID1, 60 - TPS80031_SECONDS_REG, TPS80031_RTC_TIME_NUM_REGS, buff); 61 - if (ret < 0) { 62 - dev_err(dev, "reading RTC_SECONDS_REG failed, err = %d\n", ret); 63 - return ret; 64 - } 65 - 66 - tm->tm_sec = bcd2bin(buff[0]); 67 - tm->tm_min = bcd2bin(buff[1]); 68 - tm->tm_hour = bcd2bin(buff[2]); 69 - tm->tm_mday = bcd2bin(buff[3]); 70 - tm->tm_mon = bcd2bin(buff[4]) - 1; 71 - tm->tm_year = bcd2bin(buff[5]) + RTC_YEAR_OFFSET; 72 - tm->tm_wday = bcd2bin(buff[6]); 73 - return 0; 74 - } 75 - 76 - static int tps80031_rtc_set_time(struct device *dev, struct rtc_time *tm) 77 - { 78 - u8 buff[7]; 79 - int ret; 80 - 81 - buff[0] = bin2bcd(tm->tm_sec); 82 - buff[1] = bin2bcd(tm->tm_min); 83 - buff[2] = bin2bcd(tm->tm_hour); 84 - buff[3] = bin2bcd(tm->tm_mday); 85 - buff[4] = bin2bcd(tm->tm_mon + 1); 86 - buff[5] = bin2bcd(tm->tm_year % RTC_YEAR_OFFSET); 87 - buff[6] = bin2bcd(tm->tm_wday); 88 - 89 - /* Stop RTC while updating the RTC time registers */ 90 - ret = tps80031_clr_bits(dev->parent, TPS80031_SLAVE_ID1, 91 - TPS80031_RTC_CTRL_REG, STOP_RTC); 92 - if (ret < 0) { 93 - dev_err(dev->parent, "Stop RTC failed, err = %d\n", ret); 94 - return ret; 95 - } 96 - 97 - ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1, 98 - TPS80031_SECONDS_REG, 99 - TPS80031_RTC_TIME_NUM_REGS, buff); 100 - if (ret < 0) { 101 - dev_err(dev, "writing RTC_SECONDS_REG failed, err %d\n", ret); 102 - return ret; 103 - } 104 - 105 - ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1, 106 - TPS80031_RTC_CTRL_REG, STOP_RTC); 107 - if (ret < 0) 108 - dev_err(dev->parent, "Start RTC failed, err = %d\n", ret); 109 - return ret; 110 - } 111 - 112 - static int tps80031_rtc_alarm_irq_enable(struct device *dev, 113 - unsigned int enable) 114 - { 115 - int ret; 116 - 117 - if (enable) 118 - ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1, 119 - TPS80031_RTC_INTERRUPTS_REG, ENABLE_ALARM_INT); 120 - else 121 - ret = tps80031_clr_bits(dev->parent, TPS80031_SLAVE_ID1, 122 - TPS80031_RTC_INTERRUPTS_REG, ENABLE_ALARM_INT); 123 - if (ret < 0) { 124 - dev_err(dev, "Update on RTC_INT failed, err = %d\n", ret); 125 - return ret; 126 - } 127 - return 0; 128 - } 129 - 130 - static int tps80031_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 131 - { 132 - u8 buff[TPS80031_RTC_ALARM_NUM_REGS]; 133 - int ret; 134 - 135 - buff[0] = bin2bcd(alrm->time.tm_sec); 136 - buff[1] = bin2bcd(alrm->time.tm_min); 137 - buff[2] = bin2bcd(alrm->time.tm_hour); 138 - buff[3] = bin2bcd(alrm->time.tm_mday); 139 - buff[4] = bin2bcd(alrm->time.tm_mon + 1); 140 - buff[5] = bin2bcd(alrm->time.tm_year % RTC_YEAR_OFFSET); 141 - ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1, 142 - TPS80031_ALARM_SECONDS_REG, 143 - TPS80031_RTC_ALARM_NUM_REGS, buff); 144 - if (ret < 0) { 145 - dev_err(dev, "Writing RTC_ALARM failed, err %d\n", ret); 146 - return ret; 147 - } 148 - return tps80031_rtc_alarm_irq_enable(dev, alrm->enabled); 149 - } 150 - 151 - static int tps80031_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 152 - { 153 - u8 buff[6]; 154 - int ret; 155 - 156 - ret = tps80031_reads(dev->parent, TPS80031_SLAVE_ID1, 157 - TPS80031_ALARM_SECONDS_REG, 158 - TPS80031_RTC_ALARM_NUM_REGS, buff); 159 - if (ret < 0) { 160 - dev_err(dev->parent, 161 - "reading RTC_ALARM failed, err = %d\n", ret); 162 - return ret; 163 - } 164 - 165 - alrm->time.tm_sec = bcd2bin(buff[0]); 166 - alrm->time.tm_min = bcd2bin(buff[1]); 167 - alrm->time.tm_hour = bcd2bin(buff[2]); 168 - alrm->time.tm_mday = bcd2bin(buff[3]); 169 - alrm->time.tm_mon = bcd2bin(buff[4]) - 1; 170 - alrm->time.tm_year = bcd2bin(buff[5]) + RTC_YEAR_OFFSET; 171 - return 0; 172 - } 173 - 174 - static int clear_alarm_int_status(struct device *dev, struct tps80031_rtc *rtc) 175 - { 176 - int ret; 177 - u8 buf; 178 - 179 - /** 180 - * As per datasheet, A dummy read of this RTC_STATUS_REG register 181 - * is necessary before each I2C read in order to update the status 182 - * register value. 183 - */ 184 - ret = tps80031_read(dev->parent, TPS80031_SLAVE_ID1, 185 - TPS80031_RTC_STATUS_REG, &buf); 186 - if (ret < 0) { 187 - dev_err(dev, "reading RTC_STATUS failed. err = %d\n", ret); 188 - return ret; 189 - } 190 - 191 - /* clear Alarm status bits.*/ 192 - ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1, 193 - TPS80031_RTC_STATUS_REG, ALARM_INT_STATUS); 194 - if (ret < 0) { 195 - dev_err(dev, "clear Alarm INT failed, err = %d\n", ret); 196 - return ret; 197 - } 198 - return 0; 199 - } 200 - 201 - static irqreturn_t tps80031_rtc_irq(int irq, void *data) 202 - { 203 - struct device *dev = data; 204 - struct tps80031_rtc *rtc = dev_get_drvdata(dev); 205 - int ret; 206 - 207 - ret = clear_alarm_int_status(dev, rtc); 208 - if (ret < 0) 209 - return ret; 210 - 211 - rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF); 212 - return IRQ_HANDLED; 213 - } 214 - 215 - static const struct rtc_class_ops tps80031_rtc_ops = { 216 - .read_time = tps80031_rtc_read_time, 217 - .set_time = tps80031_rtc_set_time, 218 - .set_alarm = tps80031_rtc_set_alarm, 219 - .read_alarm = tps80031_rtc_read_alarm, 220 - .alarm_irq_enable = tps80031_rtc_alarm_irq_enable, 221 - }; 222 - 223 - static int tps80031_rtc_probe(struct platform_device *pdev) 224 - { 225 - struct tps80031_rtc *rtc; 226 - struct rtc_time tm; 227 - int ret; 228 - 229 - rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); 230 - if (!rtc) 231 - return -ENOMEM; 232 - 233 - rtc->irq = platform_get_irq(pdev, 0); 234 - platform_set_drvdata(pdev, rtc); 235 - 236 - /* Start RTC */ 237 - ret = tps80031_set_bits(pdev->dev.parent, TPS80031_SLAVE_ID1, 238 - TPS80031_RTC_CTRL_REG, STOP_RTC); 239 - if (ret < 0) { 240 - dev_err(&pdev->dev, "failed to start RTC. err = %d\n", ret); 241 - return ret; 242 - } 243 - 244 - /* If RTC have POR values, set time 01:01:2000 */ 245 - tps80031_rtc_read_time(&pdev->dev, &tm); 246 - if ((tm.tm_year == RTC_YEAR_OFFSET + TPS80031_RTC_POR_YEAR) && 247 - (tm.tm_mon == (TPS80031_RTC_POR_MONTH - 1)) && 248 - (tm.tm_mday == TPS80031_RTC_POR_DAY)) { 249 - tm.tm_year = 2000; 250 - tm.tm_mday = 1; 251 - tm.tm_mon = 1; 252 - ret = tps80031_rtc_set_time(&pdev->dev, &tm); 253 - if (ret < 0) { 254 - dev_err(&pdev->dev, 255 - "RTC set time failed, err = %d\n", ret); 256 - return ret; 257 - } 258 - } 259 - 260 - /* Clear alarm intretupt status if it is there */ 261 - ret = clear_alarm_int_status(&pdev->dev, rtc); 262 - if (ret < 0) { 263 - dev_err(&pdev->dev, "Clear alarm int failed, err = %d\n", ret); 264 - return ret; 265 - } 266 - 267 - rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 268 - &tps80031_rtc_ops, THIS_MODULE); 269 - if (IS_ERR(rtc->rtc)) { 270 - ret = PTR_ERR(rtc->rtc); 271 - dev_err(&pdev->dev, "RTC registration failed, err %d\n", ret); 272 - return ret; 273 - } 274 - 275 - ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL, 276 - tps80031_rtc_irq, 277 - IRQF_ONESHOT, 278 - dev_name(&pdev->dev), rtc); 279 - if (ret < 0) { 280 - dev_err(&pdev->dev, "request IRQ:%d failed, err = %d\n", 281 - rtc->irq, ret); 282 - return ret; 283 - } 284 - device_set_wakeup_capable(&pdev->dev, 1); 285 - return 0; 286 - } 287 - 288 - #ifdef CONFIG_PM_SLEEP 289 - static int tps80031_rtc_suspend(struct device *dev) 290 - { 291 - struct tps80031_rtc *rtc = dev_get_drvdata(dev); 292 - 293 - if (device_may_wakeup(dev)) 294 - enable_irq_wake(rtc->irq); 295 - return 0; 296 - } 297 - 298 - static int tps80031_rtc_resume(struct device *dev) 299 - { 300 - struct tps80031_rtc *rtc = dev_get_drvdata(dev); 301 - 302 - if (device_may_wakeup(dev)) 303 - disable_irq_wake(rtc->irq); 304 - return 0; 305 - }; 306 - #endif 307 - 308 - static SIMPLE_DEV_PM_OPS(tps80031_pm_ops, tps80031_rtc_suspend, 309 - tps80031_rtc_resume); 310 - 311 - static struct platform_driver tps80031_rtc_driver = { 312 - .driver = { 313 - .name = "tps80031-rtc", 314 - .pm = &tps80031_pm_ops, 315 - }, 316 - .probe = tps80031_rtc_probe, 317 - }; 318 - 319 - module_platform_driver(tps80031_rtc_driver); 320 - 321 - MODULE_ALIAS("platform:tps80031-rtc"); 322 - MODULE_DESCRIPTION("TI TPS80031/TPS80032 RTC driver"); 323 - MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>"); 324 - MODULE_LICENSE("GPL v2");
+3
include/linux/rtc.h
··· 66 66 int (*alarm_irq_enable)(struct device *, unsigned int enabled); 67 67 int (*read_offset)(struct device *, long *offset); 68 68 int (*set_offset)(struct device *, long offset); 69 + int (*param_get)(struct device *, struct rtc_param *param); 70 + int (*param_set)(struct device *, struct rtc_param *param); 69 71 }; 70 72 71 73 struct rtc_device; ··· 82 80 83 81 /* flags */ 84 82 #define RTC_DEV_BUSY 0 83 + #define RTC_NO_CDEV 1 85 84 86 85 struct rtc_device { 87 86 struct device dev;
+30 -1
include/uapi/linux/rtc.h
··· 14 14 15 15 #include <linux/const.h> 16 16 #include <linux/ioctl.h> 17 + #include <linux/types.h> 17 18 18 19 /* 19 20 * The struct used to pass data via the following ioctl. Similar to the ··· 67 66 long pll_clock; /* base PLL frequency */ 68 67 }; 69 68 69 + struct rtc_param { 70 + __u64 param; 71 + union { 72 + __u64 uvalue; 73 + __s64 svalue; 74 + __u64 ptr; 75 + }; 76 + __u32 index; 77 + __u32 __pad; 78 + }; 79 + 70 80 /* 71 81 * ioctl calls that are permitted to the /dev/rtc interface, if 72 82 * any of the RTC drivers are enabled. ··· 107 95 #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ 108 96 #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ 109 97 98 + #define RTC_PARAM_GET _IOW('p', 0x13, struct rtc_param) /* Get parameter */ 99 + #define RTC_PARAM_SET _IOW('p', 0x14, struct rtc_param) /* Set parameter */ 100 + 110 101 #define RTC_VL_DATA_INVALID _BITUL(0) /* Voltage too low, RTC data is invalid */ 111 102 #define RTC_VL_BACKUP_LOW _BITUL(1) /* Backup voltage is low */ 112 103 #define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Backup empty or not present */ ··· 129 114 #define RTC_FEATURE_ALARM 0 130 115 #define RTC_FEATURE_ALARM_RES_MINUTE 1 131 116 #define RTC_FEATURE_NEED_WEEK_DAY 2 132 - #define RTC_FEATURE_CNT 3 117 + #define RTC_FEATURE_ALARM_RES_2S 3 118 + #define RTC_FEATURE_UPDATE_INTERRUPT 4 119 + #define RTC_FEATURE_CORRECTION 5 120 + #define RTC_FEATURE_BACKUP_SWITCH_MODE 6 121 + #define RTC_FEATURE_CNT 7 122 + 123 + /* parameter list */ 124 + #define RTC_PARAM_FEATURES 0 125 + #define RTC_PARAM_CORRECTION 1 126 + #define RTC_PARAM_BACKUP_SWITCH_MODE 2 127 + 128 + #define RTC_BSM_DISABLED 0 129 + #define RTC_BSM_DIRECT 1 130 + #define RTC_BSM_LEVEL 2 131 + #define RTC_BSM_STANDBY 3 133 132 134 133 #define RTC_MAX_FREQ 8192 135 134