[LV] [RFC] RTC/TOY cleanup: move to new RTC API
Jan-Benedict Glaw
jbglaw at lug-owl.de
Sun Apr 9 11:41:02 CEST 2006
Hi!
Some month ago, the new RTC lib went into the upstream kernel. I've
"converted" KA43 to use this (using a standard DS1287A as RTC).
This is still a draft; the Kconfig stuff needs to be cleaned out, and
another RTC driver for the TOY-based VAXen needs to be written.
On the other side, we no longer need to mv->clock_base and
mv->clock_init stuff. This also substitutes arch/vax/kernel/clock.c .
Comments?
MfG, JBG
diff --git a/arch/vax/Kconfig b/arch/vax/Kconfig
index d62323f..45cf6a6 100644
--- a/arch/vax/Kconfig
+++ b/arch/vax/Kconfig
@@ -70,6 +70,14 @@ config CMDLINE
help
This is the command line the booting kernel will get.
+config VAX_RTC
+ bool "VAX RTC support"
+ default y
+ help
+ This enables RTC support. You'll probably want to have this.
+
+source "drivers/rtc/Kconfig"
+
config EARLY_PRINTK
bool
default y
diff --git a/arch/vax/kernel/Makefile b/arch/vax/kernel/Makefile
index 671aab3..aa15883 100644
--- a/arch/vax/kernel/Makefile
+++ b/arch/vax/kernel/Makefile
@@ -29,7 +29,7 @@ obj-$(CONFIG_CPU_KA660) += cpu_ka660.o
obj-$(CONFIG_CPU_VXT) += cpu_vxt.o
obj-$(CONFIG_MODULES) += module.o
+obj-$(CONFIG_VAX_RTC) += rtc-generic.o
obj-$(CONFIG_VAX_DIAG_LED) += diag_led.o
-
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
diff --git a/arch/vax/kernel/cpu_ka43.c b/arch/vax/kernel/cpu_ka43.c
index e06d5de..fb7fbbb 100644
--- a/arch/vax/kernel/cpu_ka43.c
+++ b/arch/vax/kernel/cpu_ka43.c
@@ -26,6 +26,11 @@
#include <asm/clock.h> /* For clock_init routines */
#include <asm/bus/vsbus.h>
+
+
+extern int vax_ds1287_register (unsigned long phys_addr);
+
+
/* Internal CPU register space */
static volatile struct ka43_cpu_regs __iomem *cpu_regs;
@@ -223,7 +228,8 @@ struct vax_mv mv_ka43 = {
.post_vm_getchar = dz11_getchar,
.mcheck = ka43_mcheck,
.cpu_type_str = ka43_cpu_type_str,
- .clock_init = ka4x_clock_init,
+ //.clock_init = ka4x_clock_init,
+ .clock_init = NULL,
};
static struct cpu_match __CPU_MATCH cpumatch_ka43 = {
@@ -251,6 +257,7 @@ static int __init ka43_platform_device_i
return -ENODEV;
platform_device_register(&ka43_diag_led_device);
+ vax_ds1287_register (VSA_CLOCK_BASE);
retval = platform_device_register(&ka43_vsbus_device);
if (!retval) {
diff --git a/arch/vax/kernel/time.c b/arch/vax/kernel/time.c
diff --git a/drivers/rtc/rtc-m48t86.c b/drivers/rtc/rtc-m48t86.c
--- /dev/null 2006-03-21 19:51:06.723350640 +0100
+++ linux-2.6/arch/vax/kernel/rtc-generic.c 2006-04-09 11:18:52.000000000 +0200
@@ -0,0 +1,67 @@
+/*
+ * Support functions for VAX RTC access. Used by all cpu_xxx.c files.
+ */
+
+#include <linux/m48t86.h>
+#include <linux/platform_device.h>
+#include <linux/io.h>
+
+/********************************************************************/
+/* Internal memory access helpers */
+/********************************************************************/
+/*
+ * Normal bus I/O. One byte (in the low byte) per longword. All data starts
+ * at bit #2, so we need to shift out the lower two bits.
+ */
+static volatile uint32_t __iomem *vax_rtc_io_base = NULL;
+
+static unsigned char
+vax_rtc_bus_io_readb (unsigned long addr)
+{
+ unsigned char ret = 0;
+
+ if (vax_rtc_io_base)
+ ret = (vax_rtc_io_base[addr] >> 2) & 0xff;
+
+ printk (KERN_INFO "rtc_read: 0x%08lx --> %02x\n", (unsigned long) &vax_rtc_io_base[addr], ret);
+
+ return ret;
+}
+
+static void
+vax_rtc_bus_io_writeb (unsigned char value, unsigned long addr)
+{
+ printk (KERN_INFO "rtc_write: 0x%02x --> 0x%08lx\n", value, (unsigned long) &vax_rtc_io_base[addr]);
+
+ if (vax_rtc_io_base)
+ vax_rtc_io_base[addr] = value << 2;
+}
+
+static struct m48t86_ops vax_rtc_bus_io_ops = {
+ .readb = vax_rtc_bus_io_readb,
+ .writeb = vax_rtc_bus_io_writeb,
+};
+
+
+/********************************************************************/
+/* RTC-specific registration data */
+/********************************************************************/
+static struct platform_device vax_ds1287_rtc_platform_device = {
+ .name = "rtc-m48t86",
+ .id = -1,
+ .dev = {
+ .platform_data = &vax_rtc_bus_io_ops,
+ },
+ .num_resources = 0,
+};
+
+/********************************************************************/
+/* External interface for use in cpu_xxx.c files */
+/********************************************************************/
+int
+vax_ds1287_register (unsigned long phys_addr)
+{
+ vax_rtc_io_base = ioremap (phys_addr, 60 * 4); /* 60 I/O bytes of RTC, one per longword. */
+ return platform_device_register (&vax_ds1287_rtc_platform_device);
+}
+
--
Jan-Benedict Glaw jbglaw at lug-owl.de . +49-172-7608481 _ O _
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg _ _ O
für einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lug-owl.de/pipermail/vax-linux/attachments/20060409/9afc1dd0/attachment.pgp>
-------------- next part --------------
_______________________________________________
Linux-Vax mailing list
Linux-Vax at pergamentum.com
http://www.pergamentum.com/mailman/listinfo/linux-vax
More information about the Vax-linux
mailing list