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

Commit d4db6874 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Alexandre Belloni
Browse files

rtc: sh: provide rtc_class_ops directly



The rtc-generic driver provides an architecture specific
wrapper on top of the generic rtc_class_ops abstraction,
and on sh, that goes through another indirection using
the rtc_sh_get_time/rtc_sh_set_time functions.

This changes the sh rtc-generic device to provide its
rtc_class_ops directly, skipping one of the abstraction
levels.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Acked-by: default avatarRich Felker <dalias@libc.org>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
parent 463a8630
Loading
Loading
Loading
Loading
+0 −11
Original line number Original line Diff line number Diff line
@@ -6,17 +6,6 @@ extern void (*board_time_init)(void);
extern void (*rtc_sh_get_time)(struct timespec *);
extern void (*rtc_sh_get_time)(struct timespec *);
extern int (*rtc_sh_set_time)(const time_t);
extern int (*rtc_sh_set_time)(const time_t);


/* some dummy definitions */
#define RTC_BATT_BAD 0x100	/* battery bad */
#define RTC_SQWE 0x08		/* enable square-wave output */
#define RTC_DM_BINARY 0x04	/* all time/date values are BCD if clear */
#define RTC_24H 0x02		/* 24 hour mode - else hours bit 7 means pm */
#define RTC_DST_EN 0x01	        /* auto switch DST - works f. USA only */

struct rtc_time;
unsigned int get_rtc_time(struct rtc_time *);
int set_rtc_time(struct rtc_time *);

#define RTC_CAP_4_DIGIT_YEAR	(1 << 0)
#define RTC_CAP_4_DIGIT_YEAR	(1 << 0)


struct sh_rtc_platform_info {
struct sh_rtc_platform_info {
+20 −13
Original line number Original line Diff line number Diff line
@@ -50,27 +50,31 @@ int update_persistent_clock(struct timespec now)
}
}
#endif
#endif


unsigned int get_rtc_time(struct rtc_time *tm)
static int rtc_generic_get_time(struct device *dev, struct rtc_time *tm)
{
{
	if (rtc_sh_get_time != null_rtc_get_time) {
	struct timespec tv;
	struct timespec tv;


	rtc_sh_get_time(&tv);
	rtc_sh_get_time(&tv);
	rtc_time_to_tm(tv.tv_sec, tm);
	rtc_time_to_tm(tv.tv_sec, tm);
	return 0;
}
}


	return RTC_24H;
static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm)
}
EXPORT_SYMBOL(get_rtc_time);

int set_rtc_time(struct rtc_time *tm)
{
{
	unsigned long secs;
	unsigned long secs;


	rtc_tm_to_time(tm, &secs);
	rtc_tm_to_time(tm, &secs);
	return rtc_sh_set_time(secs);
	if ((rtc_sh_set_time == null_rtc_set_time) ||
	    (rtc_sh_set_time(secs) < 0))
		return -EOPNOTSUPP;

	return 0;
}
}
EXPORT_SYMBOL(set_rtc_time);

static const struct rtc_class_ops rtc_generic_ops = {
	.read_time = rtc_generic_get_time,
	.set_time = rtc_generic_set_time,
};


static int __init rtc_generic_init(void)
static int __init rtc_generic_init(void)
{
{
@@ -79,7 +83,10 @@ static int __init rtc_generic_init(void)
	if (rtc_sh_get_time == null_rtc_get_time)
	if (rtc_sh_get_time == null_rtc_get_time)
		return -ENODEV;
		return -ENODEV;


	pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0);
	pdev = platform_device_register_data(NULL, "rtc-generic", -1,
					     &rtc_generic_ops,
					     sizeof(rtc_generic_ops));



	return PTR_ERR_OR_ZERO(pdev);
	return PTR_ERR_OR_ZERO(pdev);
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -10,7 +10,7 @@
#include <linux/rtc.h>
#include <linux/rtc.h>


#if defined(CONFIG_M68K) || defined(CONFIG_PARISC) || \
#if defined(CONFIG_M68K) || defined(CONFIG_PARISC) || \
    defined(CONFIG_PPC) || defined(CONFIG_SUPERH32)
    defined(CONFIG_PPC)
#include <asm/rtc.h>
#include <asm/rtc.h>


static int generic_get_time(struct device *dev, struct rtc_time *tm)
static int generic_get_time(struct device *dev, struct rtc_time *tm)