~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sh/kernel/time.c

Version: ~ [ linux-5.5 ] ~ [ linux-5.4.15 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.98 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.167 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.211 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.211 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.81 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  arch/sh/kernel/time.c
  3  *
  4  *  Copyright (C) 1999  Tetsuya Okada & Niibe Yutaka
  5  *  Copyright (C) 2000  Philipp Rumpf <prumpf@tux.org>
  6  *  Copyright (C) 2002 - 2009  Paul Mundt
  7  *  Copyright (C) 2002  M. R. Brown  <mrbrown@linux-sh.org>
  8  *
  9  * This file is subject to the terms and conditions of the GNU General Public
 10  * License.  See the file "COPYING" in the main directory of this archive
 11  * for more details.
 12  */
 13 #include <linux/kernel.h>
 14 #include <linux/module.h>
 15 #include <linux/init.h>
 16 #include <linux/profile.h>
 17 #include <linux/timex.h>
 18 #include <linux/sched.h>
 19 #include <linux/clockchips.h>
 20 #include <linux/platform_device.h>
 21 #include <linux/smp.h>
 22 #include <linux/rtc.h>
 23 #include <asm/clock.h>
 24 #include <asm/hwblk.h>
 25 #include <asm/rtc.h>
 26 
 27 /* Dummy RTC ops */
 28 static void null_rtc_get_time(struct timespec *tv)
 29 {
 30         tv->tv_sec = mktime(2000, 1, 1, 0, 0, 0);
 31         tv->tv_nsec = 0;
 32 }
 33 
 34 static int null_rtc_set_time(const time_t secs)
 35 {
 36         return 0;
 37 }
 38 
 39 void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time;
 40 int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time;
 41 
 42 #ifdef CONFIG_GENERIC_CMOS_UPDATE
 43 void read_persistent_clock(struct timespec *ts)
 44 {
 45         rtc_sh_get_time(ts);
 46 }
 47 
 48 int update_persistent_clock(struct timespec now)
 49 {
 50         return rtc_sh_set_time(now.tv_sec);
 51 }
 52 #endif
 53 
 54 unsigned int get_rtc_time(struct rtc_time *tm)
 55 {
 56         if (rtc_sh_get_time != null_rtc_get_time) {
 57                 struct timespec tv;
 58 
 59                 rtc_sh_get_time(&tv);
 60                 rtc_time_to_tm(tv.tv_sec, tm);
 61         }
 62 
 63         return RTC_24H;
 64 }
 65 EXPORT_SYMBOL(get_rtc_time);
 66 
 67 int set_rtc_time(struct rtc_time *tm)
 68 {
 69         unsigned long secs;
 70 
 71         rtc_tm_to_time(tm, &secs);
 72         return rtc_sh_set_time(secs);
 73 }
 74 EXPORT_SYMBOL(set_rtc_time);
 75 
 76 static int __init rtc_generic_init(void)
 77 {
 78         struct platform_device *pdev;
 79 
 80         if (rtc_sh_get_time == null_rtc_get_time)
 81                 return -ENODEV;
 82 
 83         pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0);
 84         if (IS_ERR(pdev))
 85                 return PTR_ERR(pdev);
 86 
 87         return 0;
 88 }
 89 module_init(rtc_generic_init);
 90 
 91 void (*board_time_init)(void);
 92 
 93 static void __init sh_late_time_init(void)
 94 {
 95         /*
 96          * Make sure all compiled-in early timers register themselves.
 97          *
 98          * Run probe() for two "earlytimer" devices, these will be the
 99          * clockevents and clocksource devices respectively. In the event
100          * that only a clockevents device is available, we -ENODEV on the
101          * clocksource and the jiffies clocksource is used transparently
102          * instead. No error handling is necessary here.
103          */
104         early_platform_driver_register_all("earlytimer");
105         early_platform_driver_probe("earlytimer", 2, 0);
106 }
107 
108 void __init time_init(void)
109 {
110         if (board_time_init)
111                 board_time_init();
112 
113         hwblk_init();
114         clk_init();
115 
116         rtc_sh_get_time(&xtime);
117         set_normalized_timespec(&wall_to_monotonic,
118                                 -xtime.tv_sec, -xtime.tv_nsec);
119 
120         late_time_init = sh_late_time_init;
121 }
122 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp