rtc: class: avoid unnecessary lookup in hctosys
authorAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 23 Mar 2020 21:30:39 +0000 (22:30 +0100)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Tue, 24 Mar 2020 21:48:04 +0000 (22:48 +0100)
rtc_hctosys is only called when the relevant RTC is found, avoid looking it
up while we already have a pinter to the proper struct rtc_device.

Link: https://lore.kernel.org/r/20200323213039.297458-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/class.c

index 8793b2b..03d6516 100644 (file)
@@ -46,20 +46,13 @@ int rtc_hctosys_ret = -ENODEV;
  * the best guess is to add 0.5s.
  */
 
-static int rtc_hctosys(void)
+static void rtc_hctosys(struct rtc_device *rtc)
 {
        int err = -ENODEV;
        struct rtc_time tm;
        struct timespec64 tv64 = {
                .tv_nsec = NSEC_PER_SEC >> 1,
        };
-       struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
-
-       if (!rtc) {
-               pr_info("unable to open rtc device (%s)\n",
-                       CONFIG_RTC_HCTOSYS_DEVICE);
-               goto err_open;
-       }
 
        err = rtc_read_time(rtc, &tm);
        if (err) {
@@ -83,12 +76,7 @@ static int rtc_hctosys(void)
                 &tm, (long long)tv64.tv_sec);
 
 err_read:
-       rtc_class_close(rtc);
-
-err_open:
        rtc_hctosys_ret = err;
-
-       return err;
 }
 #endif
 
@@ -433,7 +421,7 @@ int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
 
 #ifdef CONFIG_RTC_HCTOSYS_DEVICE
        if (!strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE))
-               rtc_hctosys();
+               rtc_hctosys(rtc);
 #endif
 
        return 0;