Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
sh
kernel
time.c
Go to the documentation of this file.
1
/*
2
* arch/sh/kernel/time.c
3
*
4
* Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka
5
* Copyright (C) 2000 Philipp Rumpf <
[email protected]
>
6
* Copyright (C) 2002 - 2009 Paul Mundt
7
* Copyright (C) 2002 M. R. Brown <
[email protected]
>
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/rtc.h>
25
26
/* Dummy RTC ops */
27
static
void
null_rtc_get_time(
struct
timespec
*tv)
28
{
29
tv->
tv_sec
=
mktime
(2000, 1, 1, 0, 0, 0);
30
tv->
tv_nsec
= 0;
31
}
32
33
static
int
null_rtc_set_time(
const
time_t
secs)
34
{
35
return
0;
36
}
37
38
void
(*
rtc_sh_get_time
)(
struct
timespec
*) = null_rtc_get_time;
39
int
(*
rtc_sh_set_time
)(
const
time_t
) = null_rtc_set_time;
40
41
void
read_persistent_clock
(
struct
timespec
*
ts
)
42
{
43
rtc_sh_get_time
(ts);
44
}
45
46
#ifdef CONFIG_GENERIC_CMOS_UPDATE
47
int
update_persistent_clock
(
struct
timespec
now)
48
{
49
return
rtc_sh_set_time
(now.
tv_sec
);
50
}
51
#endif
52
53
unsigned
int
get_rtc_time
(
struct
rtc_time
*
tm
)
54
{
55
if
(
rtc_sh_get_time
!= null_rtc_get_time) {
56
struct
timespec
tv;
57
58
rtc_sh_get_time
(&tv);
59
rtc_time_to_tm
(tv.
tv_sec
, tm);
60
}
61
62
return
RTC_24H
;
63
}
64
EXPORT_SYMBOL
(
get_rtc_time
);
65
66
int
set_rtc_time
(
struct
rtc_time
*
tm
)
67
{
68
unsigned
long
secs;
69
70
rtc_tm_to_time
(tm, &secs);
71
return
rtc_sh_set_time
(secs);
72
}
73
EXPORT_SYMBOL
(
set_rtc_time
);
74
75
static
int
__init
rtc_generic_init(
void
)
76
{
77
struct
platform_device
*
pdev
;
78
79
if
(
rtc_sh_get_time
== null_rtc_get_time)
80
return
-
ENODEV
;
81
82
pdev = platform_device_register_simple(
"rtc-generic"
, -1,
NULL
, 0);
83
if
(IS_ERR(pdev))
84
return
PTR_ERR(pdev);
85
86
return
0;
87
}
88
module_init
(rtc_generic_init);
89
90
void
(*
board_time_init
)(
void
);
91
92
static
void
__init
sh_late_time_init(
void
)
93
{
94
/*
95
* Make sure all compiled-in early timers register themselves.
96
*
97
* Run probe() for two "earlytimer" devices, these will be the
98
* clockevents and clocksource devices respectively. In the event
99
* that only a clockevents device is available, we -ENODEV on the
100
* clocksource and the jiffies clocksource is used transparently
101
* instead. No error handling is necessary here.
102
*/
103
early_platform_driver_register_all
(
"earlytimer"
);
104
early_platform_driver_probe
(
"earlytimer"
, 2, 0);
105
}
106
107
void
__init
time_init
(
void
)
108
{
109
if
(
board_time_init
)
110
board_time_init
();
111
112
clk_init
();
113
114
late_time_init
= sh_late_time_init;
115
}
Generated on Thu Jan 10 2013 12:53:37 for Linux Kernel by
1.8.2