Pull acpica into release branch
[pandora-kernel.git] / arch / arm / mach-ep93xx / ts72xx.c
index 777e75d..e24566b 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_readbyte(unsigned long addr)
+{
+       __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
+       return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE);
+}
+
+static void ts72xx_rtc_writebyte(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 = {
+       .readbyte               = ts72xx_rtc_readbyte,
+       .writebyte              = ts72xx_rtc_writebyte,
+};
+
+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")