diff options
-rw-r--r-- | arch/arm/mach-ep93xx/ts72xx.c | 39 | ||||
-rw-r--r-- | include/asm-arm/arch-ep93xx/ts72xx.h | 11 |
2 files changed, 50 insertions, 0 deletions
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 777e75daa8a5..9be01b0c3f48 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | #include <linux/mtd/physmap.h> | 19 | #include <linux/mtd/physmap.h> |
20 | #include <linux/platform_device.h> | ||
21 | #include <linux/m48t86.h> | ||
20 | #include <asm/io.h> | 22 | #include <asm/io.h> |
21 | #include <asm/hardware.h> | 23 | #include <asm/hardware.h> |
22 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
@@ -39,6 +41,16 @@ static struct map_desc ts72xx_io_desc[] __initdata = { | |||
39 | .pfn = __phys_to_pfn(TS72XX_OPTIONS2_PHYS_BASE), | 41 | .pfn = __phys_to_pfn(TS72XX_OPTIONS2_PHYS_BASE), |
40 | .length = TS72XX_OPTIONS2_SIZE, | 42 | .length = TS72XX_OPTIONS2_SIZE, |
41 | .type = MT_DEVICE, | 43 | .type = MT_DEVICE, |
44 | }, { | ||
45 | .virtual = TS72XX_RTC_INDEX_VIRT_BASE, | ||
46 | .pfn = __phys_to_pfn(TS72XX_RTC_INDEX_PHYS_BASE), | ||
47 | .length = TS72XX_RTC_INDEX_SIZE, | ||
48 | .type = MT_DEVICE, | ||
49 | }, { | ||
50 | .virtual = TS72XX_RTC_DATA_VIRT_BASE, | ||
51 | .pfn = __phys_to_pfn(TS72XX_RTC_DATA_PHYS_BASE), | ||
52 | .length = TS72XX_RTC_DATA_SIZE, | ||
53 | .type = MT_DEVICE, | ||
42 | } | 54 | } |
43 | }; | 55 | }; |
44 | 56 | ||
@@ -99,11 +111,38 @@ static void __init ts72xx_map_io(void) | |||
99 | } | 111 | } |
100 | } | 112 | } |
101 | 113 | ||
114 | static unsigned char ts72xx_rtc_readb(unsigned long addr) | ||
115 | { | ||
116 | __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE); | ||
117 | return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE); | ||
118 | } | ||
119 | |||
120 | static void ts72xx_rtc_writeb(unsigned char value, unsigned long addr) | ||
121 | { | ||
122 | __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE); | ||
123 | __raw_writeb(value, TS72XX_RTC_DATA_VIRT_BASE); | ||
124 | } | ||
125 | |||
126 | static struct m48t86_ops ts72xx_rtc_ops = { | ||
127 | .readb = ts72xx_rtc_readb, | ||
128 | .writeb = ts72xx_rtc_writeb, | ||
129 | }; | ||
130 | |||
131 | static struct platform_device ts72xx_rtc_device = { | ||
132 | .name = "rtc-m48t86", | ||
133 | .id = -1, | ||
134 | .dev = { | ||
135 | .platform_data = &ts72xx_rtc_ops, | ||
136 | }, | ||
137 | .num_resources = 0, | ||
138 | }; | ||
139 | |||
102 | static void __init ts72xx_init_machine(void) | 140 | static void __init ts72xx_init_machine(void) |
103 | { | 141 | { |
104 | ep93xx_init_devices(); | 142 | ep93xx_init_devices(); |
105 | if (board_is_ts7200()) | 143 | if (board_is_ts7200()) |
106 | physmap_configure(TS72XX_NOR_PHYS_BASE, 0x01000000, 1, NULL); | 144 | physmap_configure(TS72XX_NOR_PHYS_BASE, 0x01000000, 1, NULL); |
145 | platform_device_register(&ts72xx_rtc_device); | ||
107 | } | 146 | } |
108 | 147 | ||
109 | MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") | 148 | MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") |
diff --git a/include/asm-arm/arch-ep93xx/ts72xx.h b/include/asm-arm/arch-ep93xx/ts72xx.h index 412215e77f44..a94f63ff0535 100644 --- a/include/asm-arm/arch-ep93xx/ts72xx.h +++ b/include/asm-arm/arch-ep93xx/ts72xx.h | |||
@@ -12,6 +12,8 @@ | |||
12 | * febfc000 [67]0000000 4K NAND data register | 12 | * febfc000 [67]0000000 4K NAND data register |
13 | * febfb000 [67]0400000 4K NAND control register | 13 | * febfb000 [67]0400000 4K NAND control register |
14 | * febfa000 [67]0800000 4K NAND busy register | 14 | * febfa000 [67]0800000 4K NAND busy register |
15 | * febf9000 10800000 4K TS-5620 RTC index register | ||
16 | * febf8000 11700000 4K TS-5620 RTC data register | ||
15 | */ | 17 | */ |
16 | 18 | ||
17 | #define TS72XX_MODEL_PHYS_BASE 0x22000000 | 19 | #define TS72XX_MODEL_PHYS_BASE 0x22000000 |
@@ -58,6 +60,15 @@ | |||
58 | #define TS72XX_NAND_BUSY_SIZE 0x00001000 | 60 | #define TS72XX_NAND_BUSY_SIZE 0x00001000 |
59 | 61 | ||
60 | 62 | ||
63 | #define TS72XX_RTC_INDEX_VIRT_BASE 0xfebf9000 | ||
64 | #define TS72XX_RTC_INDEX_PHYS_BASE 0x10800000 | ||
65 | #define TS72XX_RTC_INDEX_SIZE 0x00001000 | ||
66 | |||
67 | #define TS72XX_RTC_DATA_VIRT_BASE 0xfebf8000 | ||
68 | #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000 | ||
69 | #define TS72XX_RTC_DATA_SIZE 0x00001000 | ||
70 | |||
71 | |||
61 | #ifndef __ASSEMBLY__ | 72 | #ifndef __ASSEMBLY__ |
62 | #include <asm/io.h> | 73 | #include <asm/io.h> |
63 | 74 | ||