diff options
author | Alessandro Zummo <a.zummo@towertech.it> | 2009-01-06 17:42:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-06 18:59:25 -0500 |
commit | bbccf83f6c4e1a0de5bdf51ec9ec708d3a1ce933 (patch) | |
tree | 8c9797c7914b0f7fc78e5878ef33ae5f3219a202 /drivers/rtc/interface.c | |
parent | f60091575d43e5a27b26f4d6fa4251cdd6b9ae8a (diff) |
rtc: use set_mmss when set_time is not available
Drivers should only need to implement either set_mmss (counter based RTCs)
or set_time (most RTCs). The RTC subsystem will handle them
appropriately.
Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
Cc: Kumar Gala <galak@kernel.crashing.org>
Cc: David Brownell <david-b@pacbell.net>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc/interface.c')
-rw-r--r-- | drivers/rtc/interface.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 50482d1321e8..4348c4b0d453 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c | |||
@@ -50,10 +50,15 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm) | |||
50 | 50 | ||
51 | if (!rtc->ops) | 51 | if (!rtc->ops) |
52 | err = -ENODEV; | 52 | err = -ENODEV; |
53 | else if (!rtc->ops->set_time) | 53 | else if (rtc->ops->set_time) |
54 | err = -EINVAL; | ||
55 | else | ||
56 | err = rtc->ops->set_time(rtc->dev.parent, tm); | 54 | err = rtc->ops->set_time(rtc->dev.parent, tm); |
55 | else if (rtc->ops->set_mmss) { | ||
56 | unsigned long secs; | ||
57 | err = rtc_tm_to_time(tm, &secs); | ||
58 | if (err == 0) | ||
59 | err = rtc->ops->set_mmss(rtc->dev.parent, secs); | ||
60 | } else | ||
61 | err = -EINVAL; | ||
57 | 62 | ||
58 | mutex_unlock(&rtc->ops_lock); | 63 | mutex_unlock(&rtc->ops_lock); |
59 | return err; | 64 | return err; |