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: Milo(Woogyom) Kim <milo.kim@ti.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5fa44f8691
commit
92589c986b
3 changed files with 31 additions and 8 deletions
|
@ -119,8 +119,9 @@ three different userspace interfaces:
|
|||
* /sys/class/rtc/rtcN ... sysfs attributes support readonly
|
||||
access to some RTC attributes.
|
||||
|
||||
* /proc/driver/rtc ... the first RTC (rtc0) may expose itself
|
||||
using a procfs interface. More information is (currently) shown
|
||||
* /proc/driver/rtc ... the system clock RTC may expose itself
|
||||
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.
|
||||
|
||||
The RTC Class framework supports a wide variety of RTCs, ranging from those
|
||||
|
|
|
@ -69,13 +69,15 @@ config RTC_INTF_SYSFS
|
|||
If unsure, say Y.
|
||||
|
||||
config RTC_INTF_PROC
|
||||
boolean "/proc/driver/rtc (procfs for rtc0)"
|
||||
boolean "/proc/driver/rtc (procfs for rtcN)"
|
||||
depends on PROC_FS
|
||||
default RTC_CLASS
|
||||
help
|
||||
Say yes here if you want to use your first RTC through the proc
|
||||
interface, /proc/driver/rtc. Other RTCs will not be available
|
||||
through that API.
|
||||
Say yes here if you want to use your system clock RTC through
|
||||
the proc interface, /proc/driver/rtc.
|
||||
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.
|
||||
|
||||
|
|
|
@ -18,6 +18,26 @@
|
|||
|
||||
#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)
|
||||
{
|
||||
|
@ -117,12 +137,12 @@ static const struct file_operations rtc_proc_fops = {
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
void rtc_proc_del_device(struct rtc_device *rtc)
|
||||
{
|
||||
if (rtc->id == 0)
|
||||
if (is_rtc_hctosys(rtc))
|
||||
remove_proc_entry("driver/rtc", NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue