diff options
Diffstat (limited to 'arch/arm/mach-ep93xx')
-rw-r--r-- | arch/arm/mach-ep93xx/ts72xx.c | 39 |
1 files changed, 39 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") |