Procházet zdrojové kódy

sh: rtc-generic support.

This adds rtc-generic support for SUPERH32.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt před 16 roky
rodič
revize
47c8a08bbe
4 změnil soubory, kde provedl 36 přidání a 1 odebrání
  1. 1 0
      arch/sh/Kconfig
  2. 11 0
      arch/sh/include/asm/rtc.h
  3. 23 0
      arch/sh/kernel/time_32.c
  4. 1 1
      drivers/rtc/Kconfig

+ 1 - 0
arch/sh/Kconfig

@@ -30,6 +30,7 @@ config SUPERH32
 	select HAVE_DYNAMIC_FTRACE
 	select HAVE_DYNAMIC_FTRACE
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_KGDB
 	select ARCH_HIBERNATION_POSSIBLE if MMU
 	select ARCH_HIBERNATION_POSSIBLE if MMU
+	select RTC_LIB
 
 
 config SUPERH64
 config SUPERH64
 	def_bool ARCH = "sh64"
 	def_bool ARCH = "sh64"

+ 11 - 0
arch/sh/include/asm/rtc.h

@@ -6,6 +6,17 @@ extern void (*board_time_init)(void);
 extern void (*rtc_sh_get_time)(struct timespec *);
 extern void (*rtc_sh_get_time)(struct timespec *);
 extern int (*rtc_sh_set_time)(const time_t);
 extern int (*rtc_sh_set_time)(const time_t);
 
 
+/* some dummy definitions */
+#define RTC_BATT_BAD 0x100	/* battery bad */
+#define RTC_SQWE 0x08		/* enable square-wave output */
+#define RTC_DM_BINARY 0x04	/* all time/date values are BCD if clear */
+#define RTC_24H 0x02		/* 24 hour mode - else hours bit 7 means pm */
+#define RTC_DST_EN 0x01	        /* auto switch DST - works f. USA only */
+
+struct rtc_time;
+unsigned int get_rtc_time(struct rtc_time *);
+int set_rtc_time(struct rtc_time *);
+
 #define RTC_CAP_4_DIGIT_YEAR	(1 << 0)
 #define RTC_CAP_4_DIGIT_YEAR	(1 << 0)
 
 
 struct sh_rtc_platform_info {
 struct sh_rtc_platform_info {

+ 23 - 0
arch/sh/kernel/time_32.c

@@ -19,6 +19,7 @@
 #include <linux/mc146818rtc.h>	/* for rtc_lock */
 #include <linux/mc146818rtc.h>	/* for rtc_lock */
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/smp.h>
 #include <linux/smp.h>
+#include <linux/rtc.h>
 #include <asm/clock.h>
 #include <asm/clock.h>
 #include <asm/rtc.h>
 #include <asm/rtc.h>
 #include <asm/timer.h>
 #include <asm/timer.h>
@@ -45,6 +46,28 @@ static int null_rtc_set_time(const time_t secs)
 void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time;
 void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time;
 int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time;
 int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time;
 
 
+unsigned int get_rtc_time(struct rtc_time *tm)
+{
+	if (rtc_sh_get_time != null_rtc_get_time) {
+		struct timespec tv;
+
+		rtc_sh_get_time(&tv);
+		rtc_time_to_tm(tv.tv_sec, tm);
+	}
+
+	return RTC_24H;
+}
+EXPORT_SYMBOL(get_rtc_time);
+
+int set_rtc_time(struct rtc_time *tm)
+{
+	unsigned long secs;
+
+	rtc_tm_to_time(tm, &secs);
+	return rtc_sh_set_time(secs);
+}
+EXPORT_SYMBOL(set_rtc_time);
+
 #ifndef CONFIG_GENERIC_TIME
 #ifndef CONFIG_GENERIC_TIME
 void do_gettimeofday(struct timeval *tv)
 void do_gettimeofday(struct timeval *tv)
 {
 {

+ 1 - 1
drivers/rtc/Kconfig

@@ -692,7 +692,7 @@ config RTC_DRV_GENERIC
 	tristate "Generic RTC support"
 	tristate "Generic RTC support"
 	# Please consider writing a new RTC driver instead of using the generic
 	# Please consider writing a new RTC driver instead of using the generic
 	# RTC abstraction
 	# RTC abstraction
-	depends on PARISC || M68K || PPC
+	depends on PARISC || M68K || PPC || SUPERH32
 	help
 	help
 	  Say Y or M here to enable RTC support on systems using the generic
 	  Say Y or M here to enable RTC support on systems using the generic
 	  RTC abstraction. If you do not know what you are doing, you should
 	  RTC abstraction. If you do not know what you are doing, you should