Commit 5614a4a3 authored by Alexandre Belloni's avatar Alexandre Belloni
Browse files

rtc: class: avoid unnecessary lookup in hctosys

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: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent f1cd2233
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -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;