Merge tag 'rtc-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 20 Dec 2020 18:12:06 +0000 (10:12 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 20 Dec 2020 18:12:06 +0000 (10:12 -0800)
Pull RTC updates from Alexandre Belloni:
 "Subsystem:

   - Remove nvram ABI. There was no complaints about the deprecation for
     the last 3 years.

   - Improve RTC device allocation and registration

   - Now available for ARCH=um

  Drivers:

   - at91rm9200: correction and sam9x60 support

   - ds1307: improve ACPI support

   - mxc: now DT only

   - pcf2127: watchdog support now needs the reset-source property

   - pcf8523: set range

   - rx6110: i2c support"

* tag 'rtc-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (43 commits)
  rtc: pcf2127: only use watchdog when explicitly available
  dt-bindings: rtc: add reset-source property
  rtc: fix RTC removal
  rtc: s3c: Remove dead code related to periodic tick handling
  rtc: s3c: Disable all enable (RTC, tick) bits in the probe
  rtc: ep93xx: Fix NULL pointer dereference in ep93xx_rtc_read_time
  rtc: test: remove debug message
  rtc: mxc{,_v2}: enable COMPILE_TEST
  rtc: enable RTC framework on ARCH=um
  rtc: pcf8523: use BIT
  rtc: pcf8523: set range
  rtc: pcf8523: switch to devm_rtc_allocate_device
  rtc: destroy mutex when releasing the device
  rtc: shrink devm_rtc_allocate_device()
  rtc: rework rtc_register_device() resource management
  rtc: nvmem: emit an error message when nvmem registration fails
  rtc: add devm_ prefix to rtc_nvmem_register()
  rtc: nvmem: remove nvram ABI
  Documentation: list RTC devres helpers in devres.rst
  rtc: omap: use devm_pinctrl_register()
  ...

1  2 
MAINTAINERS
drivers/rtc/class.c
drivers/rtc/rtc-cmos.c
include/linux/rtc.h

diff --cc MAINTAINERS
Simple merge
Simple merge
@@@ -868,13 -867,9 +867,12 @@@ cmos_do_probe(struct device *dev, struc
        if (retval)
                goto cleanup2;
  
 +      /* Set the sync offset for the periodic 11min update correct */
 +      cmos_rtc.rtc->set_offset_nsec = NSEC_PER_SEC / 2;
 +
        /* export at least the first block of NVRAM */
        nvmem_cfg.size = address_space - NVRAM_OFFSET;
-       if (rtc_nvmem_register(cmos_rtc.rtc, &nvmem_cfg))
-               dev_err(dev, "nvmem registration failed\n");
+       devm_rtc_nvmem_register(cmos_rtc.rtc, &nvmem_cfg);
  
        dev_info(dev, "%s%s, %d bytes nvram%s\n",
                 !is_valid_irq(rtc_irq) ? "no alarms" :
@@@ -110,43 -110,14 +110,37 @@@ struct rtc_device 
        /* Some hardware can't support UIE mode */
        int uie_unsupported;
  
 -      /* Number of nsec it takes to set the RTC clock. This influences when
 -       * the set ops are called. An offset:
 -       *   - of 0.5 s will call RTC set for wall clock time 10.0 s at 9.5 s
 -       *   - of 1.5 s will call RTC set for wall clock time 10.0 s at 8.5 s
 -       *   - of -0.5 s will call RTC set for wall clock time 10.0 s at 10.5 s
 +      /*
 +       * This offset specifies the update timing of the RTC.
 +       *
 +       * tsched     t1 write(t2.tv_sec - 1sec))  t2 RTC increments seconds
 +       *
 +       * The offset defines how tsched is computed so that the write to
 +       * the RTC (t2.tv_sec - 1sec) is correct versus the time required
 +       * for the transport of the write and the time which the RTC needs
 +       * to increment seconds the first time after the write (t2).
 +       *
 +       * For direct accessible RTCs tsched ~= t1 because the write time
 +       * is negligible. For RTCs behind slow busses the transport time is
 +       * significant and has to be taken into account.
 +       *
 +       * The time between the write (t1) and the first increment after
 +       * the write (t2) is RTC specific. For a MC146818 RTC it's 500ms,
 +       * for many others it's exactly 1 second. Consult the datasheet.
 +       *
 +       * The value of this offset is also used to calculate the to be
 +       * written value (t2.tv_sec - 1sec) at tsched.
 +       *
 +       * The default value for this is NSEC_PER_SEC + 10 msec default
 +       * transport time. The offset can be adjusted by drivers so the
 +       * calculation for the to be written value at tsched becomes
 +       * correct:
 +       *
 +       *      newval = tsched + set_offset_nsec - NSEC_PER_SEC
 +       * and  (tsched + set_offset_nsec) % NSEC_PER_SEC == 0
         */
 -      long set_offset_nsec;
 +      unsigned long set_offset_nsec;
  
-       bool registered;
-       /* Old ABI support */
-       bool nvram_old_abi;
-       struct bin_attribute *nvram;
        time64_t range_min;
        timeu64_t range_max;
        time64_t start_secs;
@@@ -227,8 -199,41 +221,8 @@@ static inline bool is_leap_year(unsigne
        return (!(year % 4) && (year % 100)) || !(year % 400);
  }
  
- #define rtc_register_device(device) \
-       __rtc_register_device(THIS_MODULE, device)
 -/* Determine if we can call to driver to set the time. Drivers can only be
 - * called to set a second aligned time value, and the field set_offset_nsec
 - * specifies how far away from the second aligned time to call the driver.
 - *
 - * This also computes 'to_set' which is the time we are trying to set, and has
 - * a zero in tv_nsecs, such that:
 - *    to_set - set_delay_nsec == now +/- FUZZ
 - *
 - */
 -static inline bool rtc_tv_nsec_ok(s64 set_offset_nsec,
 -                                struct timespec64 *to_set,
 -                                const struct timespec64 *now)
 -{
 -      /* Allowed error in tv_nsec, arbitarily set to 5 jiffies in ns. */
 -      const unsigned long TIME_SET_NSEC_FUZZ = TICK_NSEC * 5;
 -      struct timespec64 delay = {.tv_sec = 0,
 -                                 .tv_nsec = set_offset_nsec};
 -
 -      *to_set = timespec64_add(*now, delay);
 -
 -      if (to_set->tv_nsec < TIME_SET_NSEC_FUZZ) {
 -              to_set->tv_nsec = 0;
 -              return true;
 -      }
 -
 -      if (to_set->tv_nsec > NSEC_PER_SEC - TIME_SET_NSEC_FUZZ) {
 -              to_set->tv_sec++;
 -              to_set->tv_nsec = 0;
 -              return true;
 -      }
 -      return false;
 -}
 -
+ #define devm_rtc_register_device(device) \
+       __devm_rtc_register_device(THIS_MODULE, device)
  
  #ifdef CONFIG_RTC_HCTOSYS_DEVICE
  extern int rtc_hctosys_ret;