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

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