[RESEND x 3] A generic RTC driver [2/3]

[RESEND x 3] A generic RTC driver [2/3]

Post by Tom Rin » Wed, 14 Aug 2002 00:20:07



This is part 2 of 3 of the genrtc driver work.  This is the PPC portion
of the patch, which creates include/asm-ppc/rtc.h.  This has been in the
PPC bitkeeper tree for over a month now.  I can have Paul Mackerras send
this to you instead, if you prefer.

--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/

--- /dev/null   1969-12-31 17:00:00.000000000 -0700

+/*
+ * inclue/asm-ppc/rtc.h
+ *
+ * Copyright 2002 MontaVista Software Inc.

+ *
+ * Based on:
+ * include/asm-m68k/rtc.h
+ *
+ * Copyright Richard Zidlicky
+ * implementation details for genrtc/q40rtc driver
+ *
+ * And the old drivers/macintosh/rtc.c which was heavily based on:
+ * Linux/SPARC Real Time Clock Driver

+ *
+ * With additional work by Paul Mackerras and Franz Sirl.
+ */
+/* permission is hereby granted to copy, modify and redistribute this code
+ * in terms of the GNU Library General Public License, Version 2 or later,
+ * at your option.
+ */
+
+#ifndef __ASM_RTC_H__
+#define __ASM_RTC_H__
+
+#ifdef __KERNEL__
+
+#include <linux/rtc.h>
+
+#include <asm/machdep.h>
+#include <asm/time.h>
+
+#define RTC_PIE 0x40           /* periodic interrupt enable */
+#define RTC_AIE 0x20           /* alarm interrupt enable */
+#define RTC_UIE 0x10           /* update-finished interrupt enable */
+
+extern void gen_rtc_interrupt(unsigned long);
+
+/* some dummy definitions */
+#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 */
+
+static inline void get_rtc_time(struct rtc_time *time)
+{
+       if (ppc_md.get_rtc_time) {
+               unsigned long nowtime;
+
+               nowtime = (ppc_md.get_rtc_time)();
+
+               to_tm(nowtime, time);
+
+               time->tm_year -= 1900;
+               time->tm_mon -= 1; /* Make sure userland has a 0-based month */
+       }
+}
+
+/* Set the current date and time in the real time clock. */
+static inline void set_rtc_time(struct rtc_time *time)
+{
+       if (ppc_md.get_rtc_time) {
+               unsigned long nowtime;
+
+               nowtime = mktime(time->tm_year+1900, time->tm_mon+1,
+                               time->tm_mday, time->tm_hour, time->tm_min,
+                               time->tm_sec);
+
+               (ppc_md.set_rtc_time)(nowtime);
+       }
+}
+
+static inline unsigned int get_rtc_ss(void)
+{
+       struct rtc_time h;
+
+       get_rtc_time(&h);
+       return h.tm_sec;
+}
+
+static inline int get_rtc_pll(struct rtc_pll_info *pll)
+{
+       return -EINVAL;
+}
+static inline int set_rtc_pll(struct rtc_pll_info *pll)
+{
+       return -EINVAL;
+}
+
+#endif /* __KERNEL__ */
+#endif /* __ASM_RTC_H__ */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

 
 
 

1. [RESEND] A generic RTC driver [0/3]

This is essentially the same driver I've sent 3 time previously in a
single patch, and unchanged since the last time I sent it in 3 smaller
chunks.

Patch 1 is the current version of the driver (switched to C99-style
initializers, done in the current m68k CVS tree) and needed changes to
select/compile it in general.  I had previously asked the m68k community
if anyone objected to this being submitted by me, and I got Richard
Zidlicky's (who's at the top of the file) approval, as well as Geert
Uytterhoeven's approval.

Patch 2 is the PPC portion of the patch, which creates
include/asm-ppc/rtc.h.  This has been in the PPC bitkeeper tree for over
a month now.  I can have Paul Mackerras send this to you instead, if you
prefer.

Patch 3 is my own slight bit of work.  This changes set_rtc_time(struct
*rtc_time) to return an int instead of void.  This was done so that the
arch-specific code here could do additional checks on the time and
return an error if needed.  This then introduces
include/asm-generic/rtc.h, include/asm-i386/rtc.h and
include/asm-alpha/rtc.h.  include/asm-generic/rtc.h contains the
get_rtc_time and set_rtc_time logic that is in drivers/char/rtc.c and
has been tested on SMP i386.  This also modifies include/asm-ppc/rtc.h
to return -ENODEV if no rtc hardware is present.

And now onto the history of this driver.

This has been in the m68k tree for a number of years now, so the general
code behind it is quite sound.  This has also been abstracted to the
point where it works on other archs (mainly due to m68k/PPC hybrid
machines).  This is quite useful since a number of archs cannot use
drivers/char/rtc.c because they have very different hardware, or other
issues.

This should also be useful on MIPS, who at one point in the past were
about to copy the PPC rtc driver (drivers/macintosh/rtc.c) and quite
probably useful on other archs as well.

Based on some private feedback, the parisc-linux people have been using
the 2.4 version of this driver for a while, so getting it to work on 2.5
for them should be a trivial matter (it's currently in their tree,
untested as other issues need to be resolved first).  I believe with
some additional enhancements, ia64 will make use of this as well.  And
if the MIPS community ever did make an rtc driver similar to
drivers/macintosh/rtc.c, they should be able to use this one rather
trivially.

--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

2. Italics on virtual consoles?

3. [RESEND] A generic RTC driver [2/3]

4. Internet connection lost after x hours (DHCP, aDSL)

5. [RESEND] A generic RTC driver [1/3]

6. kde or gnome - which on is more stable on rh ?

7. [RESEND] A generic RTC driver [3/3]

8. Tcl/tk Init

9. [RESEND x 3] A generic RTC driver [1/3]

10. [RESEND x 3] A generic RTC driver [3/3]

11. [RESEND x 3] A generic RTC driver [0/3]

12. [RESEND x2] A generic RTC driver

13. [RESEND] A generic RTC driver