Root/
1 | /* rtc-generic: RTC driver using the generic RTC abstraction |
2 | * |
3 | * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> |
4 | */ |
5 | |
6 | #include <linux/kernel.h> |
7 | #include <linux/module.h> |
8 | #include <linux/time.h> |
9 | #include <linux/platform_device.h> |
10 | #include <linux/rtc.h> |
11 | |
12 | #include <asm/rtc.h> |
13 | |
14 | static int generic_get_time(struct device *dev, struct rtc_time *tm) |
15 | { |
16 | unsigned int ret = get_rtc_time(tm); |
17 | |
18 | if (ret & RTC_BATT_BAD) |
19 | return -EOPNOTSUPP; |
20 | |
21 | return rtc_valid_tm(tm); |
22 | } |
23 | |
24 | static int generic_set_time(struct device *dev, struct rtc_time *tm) |
25 | { |
26 | if (set_rtc_time(tm) < 0) |
27 | return -EOPNOTSUPP; |
28 | |
29 | return 0; |
30 | } |
31 | |
32 | static const struct rtc_class_ops generic_rtc_ops = { |
33 | .read_time = generic_get_time, |
34 | .set_time = generic_set_time, |
35 | }; |
36 | |
37 | static int __init generic_rtc_probe(struct platform_device *dev) |
38 | { |
39 | struct rtc_device *rtc; |
40 | |
41 | rtc = rtc_device_register("rtc-generic", &dev->dev, &generic_rtc_ops, |
42 | THIS_MODULE); |
43 | if (IS_ERR(rtc)) |
44 | return PTR_ERR(rtc); |
45 | |
46 | platform_set_drvdata(dev, rtc); |
47 | |
48 | return 0; |
49 | } |
50 | |
51 | static int __exit generic_rtc_remove(struct platform_device *dev) |
52 | { |
53 | struct rtc_device *rtc = platform_get_drvdata(dev); |
54 | |
55 | rtc_device_unregister(rtc); |
56 | |
57 | return 0; |
58 | } |
59 | |
60 | static struct platform_driver generic_rtc_driver = { |
61 | .driver = { |
62 | .name = "rtc-generic", |
63 | .owner = THIS_MODULE, |
64 | }, |
65 | .remove = __exit_p(generic_rtc_remove), |
66 | }; |
67 | |
68 | static int __init generic_rtc_init(void) |
69 | { |
70 | return platform_driver_probe(&generic_rtc_driver, generic_rtc_probe); |
71 | } |
72 | |
73 | static void __exit generic_rtc_fini(void) |
74 | { |
75 | platform_driver_unregister(&generic_rtc_driver); |
76 | } |
77 | |
78 | module_init(generic_rtc_init); |
79 | module_exit(generic_rtc_fini); |
80 | |
81 | MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); |
82 | MODULE_LICENSE("GPL"); |
83 | MODULE_DESCRIPTION("Generic RTC driver"); |
84 | MODULE_ALIAS("platform:rtc-generic"); |
85 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9