diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-04-27 04:34:39 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-04-27 04:34:39 -0400 |
commit | 47c8a08bbe77ad3c06f63919a14b0f0b0cd54390 (patch) | |
tree | 0cc31001058390e56bb1437553adfbe451cd714d | |
parent | 5be7c0a4d3dfe25091f2e4e524103e81d9e7e180 (diff) |
sh: rtc-generic support.
This adds rtc-generic support for SUPERH32.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/Kconfig | 1 | ||||
-rw-r--r-- | arch/sh/include/asm/rtc.h | 11 | ||||
-rw-r--r-- | arch/sh/kernel/time_32.c | 23 | ||||
-rw-r--r-- | drivers/rtc/Kconfig | 2 |
4 files changed, 36 insertions, 1 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 164748945f95..9db02ced57a5 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -30,6 +30,7 @@ config SUPERH32 | |||
30 | select HAVE_DYNAMIC_FTRACE | 30 | select HAVE_DYNAMIC_FTRACE |
31 | select HAVE_ARCH_KGDB | 31 | select HAVE_ARCH_KGDB |
32 | select ARCH_HIBERNATION_POSSIBLE if MMU | 32 | select ARCH_HIBERNATION_POSSIBLE if MMU |
33 | select RTC_LIB | ||
33 | 34 | ||
34 | config SUPERH64 | 35 | config SUPERH64 |
35 | def_bool ARCH = "sh64" | 36 | def_bool ARCH = "sh64" |
diff --git a/arch/sh/include/asm/rtc.h b/arch/sh/include/asm/rtc.h index f7b010d48af7..52b0c2dba979 100644 --- a/arch/sh/include/asm/rtc.h +++ b/arch/sh/include/asm/rtc.h | |||
@@ -6,6 +6,17 @@ extern void (*board_time_init)(void); | |||
6 | extern void (*rtc_sh_get_time)(struct timespec *); | 6 | extern void (*rtc_sh_get_time)(struct timespec *); |
7 | extern int (*rtc_sh_set_time)(const time_t); | 7 | extern int (*rtc_sh_set_time)(const time_t); |
8 | 8 | ||
9 | /* some dummy definitions */ | ||
10 | #define RTC_BATT_BAD 0x100 /* battery bad */ | ||
11 | #define RTC_SQWE 0x08 /* enable square-wave output */ | ||
12 | #define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ | ||
13 | #define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ | ||
14 | #define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */ | ||
15 | |||
16 | struct rtc_time; | ||
17 | unsigned int get_rtc_time(struct rtc_time *); | ||
18 | int set_rtc_time(struct rtc_time *); | ||
19 | |||
9 | #define RTC_CAP_4_DIGIT_YEAR (1 << 0) | 20 | #define RTC_CAP_4_DIGIT_YEAR (1 << 0) |
10 | 21 | ||
11 | struct sh_rtc_platform_info { | 22 | struct sh_rtc_platform_info { |
diff --git a/arch/sh/kernel/time_32.c b/arch/sh/kernel/time_32.c index c770413c3213..109409f5ca53 100644 --- a/arch/sh/kernel/time_32.c +++ b/arch/sh/kernel/time_32.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/mc146818rtc.h> /* for rtc_lock */ | 19 | #include <linux/mc146818rtc.h> /* for rtc_lock */ |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
22 | #include <linux/rtc.h> | ||
22 | #include <asm/clock.h> | 23 | #include <asm/clock.h> |
23 | #include <asm/rtc.h> | 24 | #include <asm/rtc.h> |
24 | #include <asm/timer.h> | 25 | #include <asm/timer.h> |
@@ -45,6 +46,28 @@ static int null_rtc_set_time(const time_t secs) | |||
45 | void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time; | 46 | void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time; |
46 | int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time; | 47 | int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time; |
47 | 48 | ||
49 | unsigned int get_rtc_time(struct rtc_time *tm) | ||
50 | { | ||
51 | if (rtc_sh_get_time != null_rtc_get_time) { | ||
52 | struct timespec tv; | ||
53 | |||
54 | rtc_sh_get_time(&tv); | ||
55 | rtc_time_to_tm(tv.tv_sec, tm); | ||
56 | } | ||
57 | |||
58 | return RTC_24H; | ||
59 | } | ||
60 | EXPORT_SYMBOL(get_rtc_time); | ||
61 | |||
62 | int set_rtc_time(struct rtc_time *tm) | ||
63 | { | ||
64 | unsigned long secs; | ||
65 | |||
66 | rtc_tm_to_time(tm, &secs); | ||
67 | return rtc_sh_set_time(secs); | ||
68 | } | ||
69 | EXPORT_SYMBOL(set_rtc_time); | ||
70 | |||
48 | #ifndef CONFIG_GENERIC_TIME | 71 | #ifndef CONFIG_GENERIC_TIME |
49 | void do_gettimeofday(struct timeval *tv) | 72 | void do_gettimeofday(struct timeval *tv) |
50 | { | 73 | { |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 4e9851fc1746..277d35d232fa 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
@@ -692,7 +692,7 @@ config RTC_DRV_GENERIC | |||
692 | tristate "Generic RTC support" | 692 | tristate "Generic RTC support" |
693 | # Please consider writing a new RTC driver instead of using the generic | 693 | # Please consider writing a new RTC driver instead of using the generic |
694 | # RTC abstraction | 694 | # RTC abstraction |
695 | depends on PARISC || M68K || PPC | 695 | depends on PARISC || M68K || PPC || SUPERH32 |
696 | help | 696 | help |
697 | Say Y or M here to enable RTC support on systems using the generic | 697 | Say Y or M here to enable RTC support on systems using the generic |
698 | RTC abstraction. If you do not know what you are doing, you should | 698 | RTC abstraction. If you do not know what you are doing, you should |