瀏覽代碼

m68k: Hook up rtc-generic

m68k has been a long time user of the generic RTC abstraction, so hook up
rtc-generic:
  - Create the "rtc-generic" platform device if mach_hwclk is set,
  - Add checks for mach_hwclk, in anticipation of RTC chip drivers being moved
    to drivers/rtc/.

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Acked-by: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
Geert Uytterhoeven 16 年之前
父節點
當前提交
2ceb3ad705
共有 3 個文件被更改,包括 24 次插入3 次删除
  1. 5 2
      arch/m68k/include/asm/rtc.h
  2. 18 0
      arch/m68k/kernel/time.c
  3. 1 1
      drivers/rtc/Kconfig

+ 5 - 2
arch/m68k/include/asm/rtc.h

@@ -36,13 +36,16 @@ static inline unsigned int get_rtc_time(struct rtc_time *time)
 	 * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
 	 * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
 	 * by the RTC when initially set to a non-zero value.
 	 * by the RTC when initially set to a non-zero value.
 	 */
 	 */
-	mach_hwclk(0, time);
+	if (mach_hwclk)
+		mach_hwclk(0, time);
 	return RTC_24H;
 	return RTC_24H;
 }
 }
 
 
 static inline int set_rtc_time(struct rtc_time *time)
 static inline int set_rtc_time(struct rtc_time *time)
 {
 {
-	return mach_hwclk(1, time);
+	if (mach_hwclk)
+		return mach_hwclk(1, time);
+	return -EINVAL;
 }
 }
 
 
 static inline unsigned int get_rtc_ss(void)
 static inline unsigned int get_rtc_ss(void)

+ 18 - 0
arch/m68k/kernel/time.c

@@ -18,6 +18,7 @@
 #include <linux/string.h>
 #include <linux/string.h>
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/rtc.h>
 #include <linux/rtc.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/machdep.h>
 #include <asm/machdep.h>
 #include <asm/io.h>
 #include <asm/io.h>
@@ -159,3 +160,20 @@ int do_settimeofday(struct timespec *tv)
 }
 }
 
 
 EXPORT_SYMBOL(do_settimeofday);
 EXPORT_SYMBOL(do_settimeofday);
+
+
+static int __init rtc_init(void)
+{
+	struct platform_device *pdev;
+
+	if (!mach_hwclk)
+		return -ENODEV;
+
+	pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0);
+	if (IS_ERR(pdev))
+		return PTR_ERR(pdev);
+
+	return 0;
+}
+
+module_init(rtc_init);

+ 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
+	depends on PARISC || M68K
 	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