Commit | Line | Data |
---|---|---|
728a2947 AZ |
1 | /* |
2 | * RTC subsystem, proc interface | |
3 | * | |
4 | * Copyright (C) 2005-06 Tower Technologies | |
5 | * Author: Alessandro Zummo <a.zummo@towertech.it> | |
6 | * | |
7 | * based on arch/arm/common/rtctime.c | |
8 | * | |
9 | * This program is free software; you can redistribute it and/or modify | |
10 | * it under the terms of the GNU General Public License version 2 as | |
11 | * published by the Free Software Foundation. | |
12 | */ | |
13 | ||
14 | #include <linux/module.h> | |
15 | #include <linux/rtc.h> | |
16 | #include <linux/proc_fs.h> | |
17 | #include <linux/seq_file.h> | |
18 | ||
ab6a2d70 DB |
19 | #include "rtc-core.h" |
20 | ||
92589c98 KM |
21 | #define NAME_SIZE 10 |
22 | ||
23 | #if defined(CONFIG_RTC_HCTOSYS_DEVICE) | |
24 | static bool is_rtc_hctosys(struct rtc_device *rtc) | |
25 | { | |
26 | int size; | |
27 | char name[NAME_SIZE]; | |
28 | ||
29 | size = scnprintf(name, NAME_SIZE, "rtc%d", rtc->id); | |
30 | if (size > NAME_SIZE) | |
31 | return false; | |
32 | ||
33 | return !strncmp(name, CONFIG_RTC_HCTOSYS_DEVICE, NAME_SIZE); | |
34 | } | |
35 | #else | |
36 | static bool is_rtc_hctosys(struct rtc_device *rtc) | |
37 | { | |
38 | return (rtc->id == 0); | |
39 | } | |
40 | #endif | |
ab6a2d70 | 41 | |
728a2947 AZ |
42 | static int rtc_proc_show(struct seq_file *seq, void *offset) |
43 | { | |
44 | int err; | |
ab6a2d70 DB |
45 | struct rtc_device *rtc = seq->private; |
46 | const struct rtc_class_ops *ops = rtc->ops; | |
728a2947 AZ |
47 | struct rtc_wkalrm alrm; |
48 | struct rtc_time tm; | |
49 | ||
ab6a2d70 | 50 | err = rtc_read_time(rtc, &tm); |
728a2947 AZ |
51 | if (err == 0) { |
52 | seq_printf(seq, | |
5548cbf7 AS |
53 | "rtc_time\t: %ptRt\n" |
54 | "rtc_date\t: %ptRd\n", | |
55 | &tm, &tm); | |
728a2947 AZ |
56 | } |
57 | ||
ab6a2d70 | 58 | err = rtc_read_alarm(rtc, &alrm); |
728a2947 | 59 | if (err == 0) { |
5548cbf7 AS |
60 | seq_printf(seq, "alrm_time\t: %ptRt\n", &alrm.time); |
61 | seq_printf(seq, "alrm_date\t: %ptRd\n", &alrm.time); | |
a2db8dfc | 62 | seq_printf(seq, "alarm_IRQ\t: %s\n", |
728a2947 AZ |
63 | alrm.enabled ? "yes" : "no"); |
64 | seq_printf(seq, "alrm_pending\t: %s\n", | |
65 | alrm.pending ? "yes" : "no"); | |
bca8521c MRJ |
66 | seq_printf(seq, "update IRQ enabled\t: %s\n", |
67 | (rtc->uie_rtctimer.enabled) ? "yes" : "no"); | |
68 | seq_printf(seq, "periodic IRQ enabled\t: %s\n", | |
69 | (rtc->pie_enabled) ? "yes" : "no"); | |
70 | seq_printf(seq, "periodic IRQ frequency\t: %d\n", | |
71 | rtc->irq_freq); | |
72 | seq_printf(seq, "max user IRQ frequency\t: %d\n", | |
73 | rtc->max_user_freq); | |
728a2947 AZ |
74 | } |
75 | ||
adfb4341 AZ |
76 | seq_printf(seq, "24hr\t\t: yes\n"); |
77 | ||
728a2947 | 78 | if (ops->proc) |
cd966209 | 79 | ops->proc(rtc->dev.parent, seq); |
728a2947 AZ |
80 | |
81 | return 0; | |
82 | } | |
83 | ||
7d9f99ec | 84 | void rtc_proc_add_device(struct rtc_device *rtc) |
728a2947 | 85 | { |
92589c98 | 86 | if (is_rtc_hctosys(rtc)) |
59cacb8d CH |
87 | proc_create_single_data("driver/rtc", 0, NULL, rtc_proc_show, |
88 | rtc); | |
728a2947 AZ |
89 | } |
90 | ||
7d9f99ec | 91 | void rtc_proc_del_device(struct rtc_device *rtc) |
728a2947 | 92 | { |
92589c98 | 93 | if (is_rtc_hctosys(rtc)) |
728a2947 | 94 | remove_proc_entry("driver/rtc", NULL); |
728a2947 | 95 | } |