From: Alessandro Zummo <a.zummo@towertech.it>
To: rtc-linux@googlegroups.com
Cc: u.kleine-koenig@pengutronix.de,
Paul Gortmaker <p_gortmaker@yahoo.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [rtc-linux] [PATCH RESEND] rtc/hctosys: only claim the RTC provided the system time if it did
Date: Thu, 11 Feb 2010 11:57:00 +0100 [thread overview]
Message-ID: <20100211115700.12853990@linux.lan.towertech.it> (raw)
In-Reply-To: <1265885549-23920-1-git-send-email-u.kleine-koenig@pengutronix.de>
On Thu, 11 Feb 2010 11:52:29 +0100
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> wrote:
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>
> this time the patch is complete.
>
> What do you think about it?
looks nice but I'll have to give a deeper look.
will probably queue for the next merge window
>
> Best regards
> Uwe
>
> drivers/rtc/hctosys.c | 59 +++++++++++++++++++++++++++--------------------
> drivers/rtc/rtc-sysfs.c | 5 ++-
> include/linux/rtc.h | 6 ++++
> 3 files changed, 43 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
> index 33c0e98..bc90b09 100644
> --- a/drivers/rtc/hctosys.c
> +++ b/drivers/rtc/hctosys.c
> @@ -22,48 +22,57 @@
> * the best guess is to add 0.5s.
> */
>
> +int rtc_hctosys_ret = -ENODEV;
> +
> static int __init rtc_hctosys(void)
> {
> - int err;
> + int err = -ENODEV;
> struct rtc_time tm;
> + struct timespec tv = {
> + .tv_nsec = NSEC_PER_SEC >> 1,
> + };
> struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
>
> if (rtc == NULL) {
> - printk("%s: unable to open rtc device (%s)\n",
> + pr_err("%s: unable to open rtc device (%s)\n",
> __FILE__, CONFIG_RTC_HCTOSYS_DEVICE);
> - return -ENODEV;
> + goto err_open;
> }
>
> err = rtc_read_time(rtc, &tm);
> - if (err == 0) {
> - err = rtc_valid_tm(&tm);
> - if (err == 0) {
> - struct timespec tv;
> + if (err) {
> + dev_err(rtc->dev.parent,
> + "hctosys: unable to read the hardware clock\n");
> + goto err_read;
>
> - tv.tv_nsec = NSEC_PER_SEC >> 1;
> + }
>
> - rtc_tm_to_time(&tm, &tv.tv_sec);
> + err = rtc_valid_tm(&tm);
> + if (err) {
> + dev_err(rtc->dev.parent,
> + "hctosys: invalid date/time\n");
> + goto err_invalid;
> + }
>
> - do_settimeofday(&tv);
> + rtc_tm_to_time(&tm, &tv.tv_sec);
>
> - dev_info(rtc->dev.parent,
> - "setting system clock to "
> - "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n",
> - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> - tm.tm_hour, tm.tm_min, tm.tm_sec,
> - (unsigned int) tv.tv_sec);
> - }
> - else
> - dev_err(rtc->dev.parent,
> - "hctosys: invalid date/time\n");
> - }
> - else
> - dev_err(rtc->dev.parent,
> - "hctosys: unable to read the hardware clock\n");
> + do_settimeofday(&tv);
>
> + dev_info(rtc->dev.parent,
> + "setting system clock to "
> + "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n",
> + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> + tm.tm_hour, tm.tm_min, tm.tm_sec,
> + (unsigned int) tv.tv_sec);
> +
> +err_invalid:
> +err_read:
> rtc_class_close(rtc);
>
> - return 0;
> +err_open:
> + rtc_hctosys_ret = err;
> +
> + return err;
> }
>
> late_initcall(rtc_hctosys);
> diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
> index 7dd23a6..380083c 100644
> --- a/drivers/rtc/rtc-sysfs.c
> +++ b/drivers/rtc/rtc-sysfs.c
> @@ -107,8 +107,9 @@ rtc_sysfs_show_hctosys(struct device *dev, struct device_attribute *attr,
> char *buf)
> {
> #ifdef CONFIG_RTC_HCTOSYS_DEVICE
> - if (strcmp(dev_name(&to_rtc_device(dev)->dev),
> - CONFIG_RTC_HCTOSYS_DEVICE) == 0)
> + if (rtc_hctosys_ret == 0 &&
> + strcmp(dev_name(&to_rtc_device(dev)->dev),
> + CONFIG_RTC_HCTOSYS_DEVICE) == 0)
> return sprintf(buf, "1\n");
> else
> #endif
> diff --git a/include/linux/rtc.h b/include/linux/rtc.h
> index 60f88a7..14dbc83 100644
> --- a/include/linux/rtc.h
> +++ b/include/linux/rtc.h
> @@ -238,6 +238,12 @@ static inline bool is_leap_year(unsigned int year)
> return (!(year % 4) && (year % 100)) || !(year % 400);
> }
>
> +#ifdef CONFIG_RTC_HCTOSYS
> +extern int rtc_hctosys_ret;
> +#else
> +#define rtc_hctosys_ret -ENODEV
> +#endif
> +
> #endif /* __KERNEL__ */
>
> #endif /* _LINUX_RTC_H_ */
> --
> 1.6.6
>
> --
> You received this message because you are subscribed to "rtc-linux".
> Membership options at http://groups.google.com/group/rtc-linux .
> Please read http://groups.google.com/group/rtc-linux/web/checklist
> before submitting a driver.
--
Best regards,
Alessandro Zummo,
Tower Technologies - Torino, Italy
http://www.towertech.it
next prev parent reply other threads:[~2010-02-11 10:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-08 21:10 [PATCH] rtc/hctosys: only claim the RTC provided the system time if it did Uwe Kleine-König
2010-02-08 21:21 ` Uwe Kleine-König
2010-02-11 10:52 ` [PATCH RESEND] " Uwe Kleine-König
2010-02-11 10:57 ` Alessandro Zummo [this message]
2010-02-11 22:42 ` [rtc-linux] " Andrew Morton
2010-02-12 8:52 ` Uwe Kleine-König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100211115700.12853990@linux.lan.towertech.it \
--to=a.zummo@towertech.it \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=p_gortmaker@yahoo.com \
--cc=rtc-linux@googlegroups.com \
--cc=u.kleine-koenig@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.