[ARM] 3451/1: ep93xx: use the m48t86 rtc driver on the ts72xx platform
authorLennert Buytenhek <buytenh@wantstofly.org>
Sun, 2 Apr 2006 15:17:40 +0000 (16:17 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 2 Apr 2006 15:17:40 +0000 (16:17 +0100)
Patch from Lennert Buytenhek

Instantiate the recently merged m48t86 rtc driver in the ts72xx code.

Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-ep93xx/ts72xx.c
include/asm-arm/arch-ep93xx/ts72xx.h

index 777e75daa8a546dc2da62902d2a7f852ca10821d..9be01b0c3f4876f19a0a23c8b093321598658978 100644 (file)
@@ -17,6 +17,8 @@
 #include <linux/sched.h>
 #include <linux/interrupt.h>
 #include <linux/mtd/physmap.h>
+#include <linux/platform_device.h>
+#include <linux/m48t86.h>
 #include <asm/io.h>
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
@@ -39,6 +41,16 @@ static struct map_desc ts72xx_io_desc[] __initdata = {
                .pfn            = __phys_to_pfn(TS72XX_OPTIONS2_PHYS_BASE),
                .length         = TS72XX_OPTIONS2_SIZE,
                .type           = MT_DEVICE,
+       }, {
+               .virtual        = TS72XX_RTC_INDEX_VIRT_BASE,
+               .pfn            = __phys_to_pfn(TS72XX_RTC_INDEX_PHYS_BASE),
+               .length         = TS72XX_RTC_INDEX_SIZE,
+               .type           = MT_DEVICE,
+       }, {
+               .virtual        = TS72XX_RTC_DATA_VIRT_BASE,
+               .pfn            = __phys_to_pfn(TS72XX_RTC_DATA_PHYS_BASE),
+               .length         = TS72XX_RTC_DATA_SIZE,
+               .type           = MT_DEVICE,
        }
 };
 
@@ -99,11 +111,38 @@ static void __init ts72xx_map_io(void)
        }
 }
 
+static unsigned char ts72xx_rtc_readb(unsigned long addr)
+{
+       __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
+       return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE);
+}
+
+static void ts72xx_rtc_writeb(unsigned char value, unsigned long addr)
+{
+       __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
+       __raw_writeb(value, TS72XX_RTC_DATA_VIRT_BASE);
+}
+
+static struct m48t86_ops ts72xx_rtc_ops = {
+       .readb                  = ts72xx_rtc_readb,
+       .writeb                 = ts72xx_rtc_writeb,
+};
+
+static struct platform_device ts72xx_rtc_device = {
+       .name                   = "rtc-m48t86",
+       .id                     = -1,
+       .dev                    = {
+               .platform_data          = &ts72xx_rtc_ops,
+       },
+       .num_resources          = 0,
+};
+
 static void __init ts72xx_init_machine(void)
 {
        ep93xx_init_devices();
        if (board_is_ts7200())
                physmap_configure(TS72XX_NOR_PHYS_BASE, 0x01000000, 1, NULL);
+       platform_device_register(&ts72xx_rtc_device);
 }
 
 MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
index 412215e77f444c7dc9c8a4861a96196280b127da..a94f63ff0535298d401996ee684fa09e97245ee3 100644 (file)
@@ -12,6 +12,8 @@
  * febfc000    [67]0000000     4K      NAND data register
  * febfb000    [67]0400000     4K      NAND control register
  * febfa000    [67]0800000     4K      NAND busy register
+ * febf9000    10800000        4K      TS-5620 RTC index register
+ * febf8000    11700000        4K      TS-5620 RTC data register
  */
 
 #define TS72XX_MODEL_PHYS_BASE         0x22000000
 #define TS72XX_NAND_BUSY_SIZE          0x00001000
 
 
+#define TS72XX_RTC_INDEX_VIRT_BASE     0xfebf9000
+#define TS72XX_RTC_INDEX_PHYS_BASE     0x10800000
+#define TS72XX_RTC_INDEX_SIZE          0x00001000
+
+#define TS72XX_RTC_DATA_VIRT_BASE      0xfebf8000
+#define TS72XX_RTC_DATA_PHYS_BASE      0x11700000
+#define TS72XX_RTC_DATA_SIZE           0x00001000
+
+
 #ifndef __ASSEMBLY__
 #include <asm/io.h>