diff options
author | Ben Dooks <ben-linux@fluff.org> | 2006-06-18 18:04:05 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-06-18 18:04:05 -0400 |
commit | 66a9b49a370baac75d90b7da9a2445997a8a9438 (patch) | |
tree | 62b22d1559c1c1d1e02428f27c08dca0fb66aa83 /arch/arm/mach-s3c2410/s3c2410.c | |
parent | 810c894f2b27b634883723f9fee10a7cf1d0bcb4 (diff) |
[ARM] 3557/1: S3C24XX: centralise and cleanup uart registration
Patch from Ben Dooks
All the S3C24XX based devices currently have similar
uart blocks, in the same location. Make the process
of adding new uart blocks easier by commonising the
device definitions and adding a new init function
for the cpu code.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-s3c2410/s3c2410.c')
-rw-r--r-- | arch/arm/mach-s3c2410/s3c2410.c | 85 |
1 files changed, 3 insertions, 82 deletions
diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c index 0a2013a76549..0852e87a79c4 100644 --- a/arch/arm/mach-s3c2410/s3c2410.c +++ b/arch/arm/mach-s3c2410/s3c2410.c | |||
@@ -42,6 +42,7 @@ | |||
42 | 42 | ||
43 | #include "s3c2410.h" | 43 | #include "s3c2410.h" |
44 | #include "cpu.h" | 44 | #include "cpu.h" |
45 | #include "devs.h" | ||
45 | #include "clock.h" | 46 | #include "clock.h" |
46 | 47 | ||
47 | /* Initial IO mappings */ | 48 | /* Initial IO mappings */ |
@@ -55,93 +56,13 @@ static struct map_desc s3c2410_iodesc[] __initdata = { | |||
55 | IODESC_ENT(WATCHDOG), | 56 | IODESC_ENT(WATCHDOG), |
56 | }; | 57 | }; |
57 | 58 | ||
58 | static struct resource s3c_uart0_resource[] = { | ||
59 | [0] = { | ||
60 | .start = S3C2410_PA_UART0, | ||
61 | .end = S3C2410_PA_UART0 + 0x3fff, | ||
62 | .flags = IORESOURCE_MEM, | ||
63 | }, | ||
64 | [1] = { | ||
65 | .start = IRQ_S3CUART_RX0, | ||
66 | .end = IRQ_S3CUART_ERR0, | ||
67 | .flags = IORESOURCE_IRQ, | ||
68 | } | ||
69 | |||
70 | }; | ||
71 | |||
72 | static struct resource s3c_uart1_resource[] = { | ||
73 | [0] = { | ||
74 | .start = S3C2410_PA_UART1, | ||
75 | .end = S3C2410_PA_UART1 + 0x3fff, | ||
76 | .flags = IORESOURCE_MEM, | ||
77 | }, | ||
78 | [1] = { | ||
79 | .start = IRQ_S3CUART_RX1, | ||
80 | .end = IRQ_S3CUART_ERR1, | ||
81 | .flags = IORESOURCE_IRQ, | ||
82 | } | ||
83 | }; | ||
84 | |||
85 | static struct resource s3c_uart2_resource[] = { | ||
86 | [0] = { | ||
87 | .start = S3C2410_PA_UART2, | ||
88 | .end = S3C2410_PA_UART2 + 0x3fff, | ||
89 | .flags = IORESOURCE_MEM, | ||
90 | }, | ||
91 | [1] = { | ||
92 | .start = IRQ_S3CUART_RX2, | ||
93 | .end = IRQ_S3CUART_ERR2, | ||
94 | .flags = IORESOURCE_IRQ, | ||
95 | } | ||
96 | }; | ||
97 | |||
98 | /* our uart devices */ | 59 | /* our uart devices */ |
99 | 60 | ||
100 | static struct platform_device s3c_uart0 = { | ||
101 | .name = "s3c2410-uart", | ||
102 | .id = 0, | ||
103 | .num_resources = ARRAY_SIZE(s3c_uart0_resource), | ||
104 | .resource = s3c_uart0_resource, | ||
105 | }; | ||
106 | |||
107 | |||
108 | static struct platform_device s3c_uart1 = { | ||
109 | .name = "s3c2410-uart", | ||
110 | .id = 1, | ||
111 | .num_resources = ARRAY_SIZE(s3c_uart1_resource), | ||
112 | .resource = s3c_uart1_resource, | ||
113 | }; | ||
114 | |||
115 | static struct platform_device s3c_uart2 = { | ||
116 | .name = "s3c2410-uart", | ||
117 | .id = 2, | ||
118 | .num_resources = ARRAY_SIZE(s3c_uart2_resource), | ||
119 | .resource = s3c_uart2_resource, | ||
120 | }; | ||
121 | |||
122 | static struct platform_device *uart_devices[] __initdata = { | ||
123 | &s3c_uart0, | ||
124 | &s3c_uart1, | ||
125 | &s3c_uart2 | ||
126 | }; | ||
127 | |||
128 | static int s3c2410_uart_count = 0; | ||
129 | |||
130 | /* uart registration process */ | 61 | /* uart registration process */ |
131 | 62 | ||
132 | void __init s3c2410_init_uarts(struct s3c2410_uartcfg *cfg, int no) | 63 | void __init s3c2410_init_uarts(struct s3c2410_uartcfg *cfg, int no) |
133 | { | 64 | { |
134 | struct platform_device *platdev; | 65 | s3c24xx_init_uartdevs("s3c2410-uart", s3c2410_uart_resources, cfg, no); |
135 | int uart; | ||
136 | |||
137 | for (uart = 0; uart < no; uart++, cfg++) { | ||
138 | platdev = uart_devices[cfg->hwport]; | ||
139 | |||
140 | s3c24xx_uart_devs[uart] = platdev; | ||
141 | platdev->dev.platform_data = cfg; | ||
142 | } | ||
143 | |||
144 | s3c2410_uart_count = uart; | ||
145 | } | 66 | } |
146 | 67 | ||
147 | /* s3c2410_map_io | 68 | /* s3c2410_map_io |
@@ -193,5 +114,5 @@ int __init s3c2410_init(void) | |||
193 | { | 114 | { |
194 | printk("S3C2410: Initialising architecture\n"); | 115 | printk("S3C2410: Initialising architecture\n"); |
195 | 116 | ||
196 | return platform_add_devices(s3c24xx_uart_devs, s3c2410_uart_count); | 117 | return 0; |
197 | } | 118 | } |