forked from luck/tmp_suning_uos_patched
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
|
@ -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
|
||||||
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 @@
|
||||||
|
|
||||||
#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 = {
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user