Commit 7ba01f9728a9f1cd1a3e1e2d5206f76061182675
Committed by
Russell King
1 parent
41658132e6
[ARM] 3451/1: ep93xx: use the m48t86 rtc driver on the ts72xx platform
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>
Showing 2 changed files with 50 additions and 0 deletions Side-by-side Diff
arch/arm/mach-ep93xx/ts72xx.c
... | ... | @@ -17,6 +17,8 @@ |
17 | 17 | #include <linux/sched.h> |
18 | 18 | #include <linux/interrupt.h> |
19 | 19 | #include <linux/mtd/physmap.h> |
20 | +#include <linux/platform_device.h> | |
21 | +#include <linux/m48t86.h> | |
20 | 22 | #include <asm/io.h> |
21 | 23 | #include <asm/hardware.h> |
22 | 24 | #include <asm/mach-types.h> |
... | ... | @@ -39,6 +41,16 @@ |
39 | 41 | .pfn = __phys_to_pfn(TS72XX_OPTIONS2_PHYS_BASE), |
40 | 42 | .length = TS72XX_OPTIONS2_SIZE, |
41 | 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 | |
45 | 57 | |
... | ... | @@ -99,11 +111,38 @@ |
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 | 140 | static void __init ts72xx_init_machine(void) |
103 | 141 | { |
104 | 142 | ep93xx_init_devices(); |
105 | 143 | if (board_is_ts7200()) |
106 | 144 | physmap_configure(TS72XX_NOR_PHYS_BASE, 0x01000000, 1, NULL); |
145 | + platform_device_register(&ts72xx_rtc_device); | |
107 | 146 | } |
108 | 147 | |
109 | 148 | MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") |
include/asm-arm/arch-ep93xx/ts72xx.h
... | ... | @@ -12,6 +12,8 @@ |
12 | 12 | * febfc000 [67]0000000 4K NAND data register |
13 | 13 | * febfb000 [67]0400000 4K NAND control register |
14 | 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 | 19 | #define TS72XX_MODEL_PHYS_BASE 0x22000000 |
... | ... | @@ -56,6 +58,15 @@ |
56 | 58 | #define TS72XX_NAND2_BUSY_PHYS_BASE 0x70800000 |
57 | 59 | #define TS72XX_NAND_BUSY_VIRT_BASE 0xfebfa000 |
58 | 60 | #define TS72XX_NAND_BUSY_SIZE 0x00001000 |
61 | + | |
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 | |
59 | 70 | |
60 | 71 | |
61 | 72 | #ifndef __ASSEMBLY__ |