Commit 92589c98 authored by Kim, Milo's avatar Kim, Milo Committed by Linus Torvalds

rtc-proc: permit the /proc/driver/rtc device to use other devices

To get time information via /proc/driver/rtc, only the first device (rtc0)
is used.  If the rtcN (eg.  rtc1 or rtc2) is used for the system clock,
there is no way to get information of rtcN via /proc/driver/rtc.  With
this patch, the time data can be retrieved from the system clock RTC.

If the RTC_HCTOSYS_DEVICE is not defined, then rtc0 is used by default.
Signed-off-by: default avatarMilo(Woogyom) Kim <milo.kim@ti.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5fa44f86
...@@ -119,8 +119,9 @@ three different userspace interfaces: ...@@ -119,8 +119,9 @@ three different userspace interfaces:
* /sys/class/rtc/rtcN ... sysfs attributes support readonly * /sys/class/rtc/rtcN ... sysfs attributes support readonly
access to some RTC attributes. access to some RTC attributes.
* /proc/driver/rtc ... the first RTC (rtc0) may expose itself * /proc/driver/rtc ... the system clock RTC may expose itself
using a procfs interface. More information is (currently) shown using a procfs interface. If there is no RTC for the system clock,
rtc0 is used by default. More information is (currently) shown
here than through sysfs. here than through sysfs.
The RTC Class framework supports a wide variety of RTCs, ranging from those The RTC Class framework supports a wide variety of RTCs, ranging from those
......
...@@ -69,13 +69,15 @@ config RTC_INTF_SYSFS ...@@ -69,13 +69,15 @@ config RTC_INTF_SYSFS
If unsure, say Y. If unsure, say Y.
config RTC_INTF_PROC config RTC_INTF_PROC
boolean "/proc/driver/rtc (procfs for rtc0)" boolean "/proc/driver/rtc (procfs for rtcN)"
depends on PROC_FS depends on PROC_FS
default RTC_CLASS default RTC_CLASS
help help
Say yes here if you want to use your first RTC through the proc Say yes here if you want to use your system clock RTC through
interface, /proc/driver/rtc. Other RTCs will not be available the proc interface, /proc/driver/rtc.
through that API. Other RTCs will not be available through that API.
If there is no RTC for the system clock, then the first RTC(rtc0)
is used by default.
If unsure, say Y. If unsure, say Y.
......
...@@ -18,6 +18,26 @@ ...@@ -18,6 +18,26 @@
#include "rtc-core.h" #include "rtc-core.h"
#define NAME_SIZE 10
#if defined(CONFIG_RTC_HCTOSYS_DEVICE)
static bool is_rtc_hctosys(struct rtc_device *rtc)
{
int size;
char name[NAME_SIZE];
size = scnprintf(name, NAME_SIZE, "rtc%d", rtc->id);
if (size > NAME_SIZE)
return false;
return !strncmp(name, CONFIG_RTC_HCTOSYS_DEVICE, NAME_SIZE);
}
#else
static bool is_rtc_hctosys(struct rtc_device *rtc)
{
return (rtc->id == 0);
}
#endif
static int rtc_proc_show(struct seq_file *seq, void *offset) static int rtc_proc_show(struct seq_file *seq, void *offset)
{ {
...@@ -117,12 +137,12 @@ static const struct file_operations rtc_proc_fops = { ...@@ -117,12 +137,12 @@ static const struct file_operations rtc_proc_fops = {
void rtc_proc_add_device(struct rtc_device *rtc) void rtc_proc_add_device(struct rtc_device *rtc)
{ {
if (rtc->id == 0) if (is_rtc_hctosys(rtc))
proc_create_data("driver/rtc", 0, NULL, &rtc_proc_fops, rtc); proc_create_data("driver/rtc", 0, NULL, &rtc_proc_fops, rtc);
} }
void rtc_proc_del_device(struct rtc_device *rtc) void rtc_proc_del_device(struct rtc_device *rtc)
{ {
if (rtc->id == 0) if (is_rtc_hctosys(rtc))
remove_proc_entry("driver/rtc", NULL); remove_proc_entry("driver/rtc", NULL);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment