Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -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
+6 −4
Original line number Original line Diff line number Diff line
@@ -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.


+22 −2
Original line number Original line Diff line number Diff line
@@ -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);
}
}