Merge linux-2.6 with linux-acpi-2.6
[linux-2.6] / arch / mips / kernel / genrtc.c
1 /*
2  * A glue layer that provides RTC read/write to drivers/char/genrtc.c driver
3  * based on MIPS internal RTC routines.  It does take care locking
4  * issues so that we are SMP/Preemption safe.
5  *
6  * Copyright (C) 2004 MontaVista Software Inc.
7  * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
8  *
9  * Please read the COPYING file for all license details.
10  */
11
12 #include <linux/spinlock.h>
13
14 #include <asm/rtc.h>
15 #include <asm/time.h>
16
17 static spinlock_t mips_rtc_lock = SPIN_LOCK_UNLOCKED;
18
19 unsigned int get_rtc_time(struct rtc_time *time)
20 {
21         unsigned long nowtime;
22
23         spin_lock(&mips_rtc_lock);
24         nowtime = rtc_get_time();
25         to_tm(nowtime, time);
26         time->tm_year -= 1900;
27         spin_unlock(&mips_rtc_lock);
28
29         return RTC_24H;
30 }
31
32 int set_rtc_time(struct rtc_time *time)
33 {
34         unsigned long nowtime;
35         int ret;
36
37         spin_lock(&mips_rtc_lock);
38         nowtime = mktime(time->tm_year+1900, time->tm_mon+1,
39                         time->tm_mday, time->tm_hour, time->tm_min,
40                         time->tm_sec);
41         ret = rtc_set_time(nowtime);
42         spin_unlock(&mips_rtc_lock);
43
44         return ret;
45 }
46
47 unsigned int get_rtc_ss(void)
48 {
49         struct rtc_time h;
50
51         get_rtc_time(&h);
52         return h.tm_sec;
53 }
54
55 int get_rtc_pll(struct rtc_pll_info *pll)
56 {
57         return -EINVAL;
58 }
59
60 int set_rtc_pll(struct rtc_pll_info *pll)
61 {
62         return -EINVAL;
63 }
64