diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-12-31 07:35:57 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-12-31 07:35:57 -0500 |
commit | 2ca1a615835d9f4990f42102ab1f2ef434e7e89c (patch) | |
tree | 726cf3d5f29a6c66c44e4bd68e7ebed2fd83d059 /arch/arm/mach-at91/board-cap9adk.c | |
parent | e12f0102ac81d660c9f801d0a0e10ccf4537a9de (diff) | |
parent | 6a94cb73064c952255336cc57731904174b2c58f (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
arch/x86/kernel/io_apic.c
Diffstat (limited to 'arch/arm/mach-at91/board-cap9adk.c')
-rw-r--r-- | arch/arm/mach-at91/board-cap9adk.c | 77 |
1 files changed, 59 insertions, 18 deletions
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 201b89392dcc..83a1a0fef47b 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -36,17 +36,16 @@ | |||
36 | #include <mach/hardware.h> | 36 | #include <mach/hardware.h> |
37 | #include <asm/setup.h> | 37 | #include <asm/setup.h> |
38 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
39 | #include <asm/irq.h> | ||
40 | 39 | ||
41 | #include <asm/mach/arch.h> | 40 | #include <asm/mach/arch.h> |
42 | #include <asm/mach/map.h> | 41 | #include <asm/mach/map.h> |
43 | #include <asm/mach/irq.h> | ||
44 | 42 | ||
45 | #include <mach/board.h> | 43 | #include <mach/board.h> |
46 | #include <mach/gpio.h> | 44 | #include <mach/gpio.h> |
47 | #include <mach/at91cap9_matrix.h> | 45 | #include <mach/at91cap9_matrix.h> |
48 | #include <mach/at91sam9_smc.h> | 46 | #include <mach/at91sam9_smc.h> |
49 | 47 | ||
48 | #include "sam9_smc.h" | ||
50 | #include "generic.h" | 49 | #include "generic.h" |
51 | 50 | ||
52 | 51 | ||
@@ -195,6 +194,43 @@ static struct atmel_nand_data __initdata cap9adk_nand_data = { | |||
195 | #endif | 194 | #endif |
196 | }; | 195 | }; |
197 | 196 | ||
197 | static struct sam9_smc_config __initdata cap9adk_nand_smc_config = { | ||
198 | .ncs_read_setup = 1, | ||
199 | .nrd_setup = 2, | ||
200 | .ncs_write_setup = 1, | ||
201 | .nwe_setup = 2, | ||
202 | |||
203 | .ncs_read_pulse = 6, | ||
204 | .nrd_pulse = 4, | ||
205 | .ncs_write_pulse = 6, | ||
206 | .nwe_pulse = 4, | ||
207 | |||
208 | .read_cycle = 8, | ||
209 | .write_cycle = 8, | ||
210 | |||
211 | .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE, | ||
212 | .tdf_cycles = 1, | ||
213 | }; | ||
214 | |||
215 | static void __init cap9adk_add_device_nand(void) | ||
216 | { | ||
217 | unsigned long csa; | ||
218 | |||
219 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | ||
220 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); | ||
221 | |||
222 | /* setup bus-width (8 or 16) */ | ||
223 | if (cap9adk_nand_data.bus_width_16) | ||
224 | cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16; | ||
225 | else | ||
226 | cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_8; | ||
227 | |||
228 | /* configure chip-select 3 (NAND) */ | ||
229 | sam9_smc_configure(3, &cap9adk_nand_smc_config); | ||
230 | |||
231 | at91_add_device_nand(&cap9adk_nand_data); | ||
232 | } | ||
233 | |||
198 | 234 | ||
199 | /* | 235 | /* |
200 | * NOR flash | 236 | * NOR flash |
@@ -234,6 +270,24 @@ static struct platform_device cap9adk_nor_flash = { | |||
234 | .num_resources = ARRAY_SIZE(nor_flash_resources), | 270 | .num_resources = ARRAY_SIZE(nor_flash_resources), |
235 | }; | 271 | }; |
236 | 272 | ||
273 | static struct sam9_smc_config __initdata cap9adk_nor_smc_config = { | ||
274 | .ncs_read_setup = 2, | ||
275 | .nrd_setup = 4, | ||
276 | .ncs_write_setup = 2, | ||
277 | .nwe_setup = 4, | ||
278 | |||
279 | .ncs_read_pulse = 10, | ||
280 | .nrd_pulse = 8, | ||
281 | .ncs_write_pulse = 10, | ||
282 | .nwe_pulse = 8, | ||
283 | |||
284 | .read_cycle = 16, | ||
285 | .write_cycle = 16, | ||
286 | |||
287 | .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16, | ||
288 | .tdf_cycles = 1, | ||
289 | }; | ||
290 | |||
237 | static __init void cap9adk_add_device_nor(void) | 291 | static __init void cap9adk_add_device_nor(void) |
238 | { | 292 | { |
239 | unsigned long csa; | 293 | unsigned long csa; |
@@ -241,18 +295,8 @@ static __init void cap9adk_add_device_nor(void) | |||
241 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 295 | csa = at91_sys_read(AT91_MATRIX_EBICSA); |
242 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); | 296 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); |
243 | 297 | ||
244 | /* set the bus interface characteristics */ | 298 | /* configure chip-select 0 (NOR) */ |
245 | at91_sys_write(AT91_SMC_SETUP(0), AT91_SMC_NWESETUP_(4) | AT91_SMC_NCS_WRSETUP_(2) | 299 | sam9_smc_configure(0, &cap9adk_nor_smc_config); |
246 | | AT91_SMC_NRDSETUP_(4) | AT91_SMC_NCS_RDSETUP_(2)); | ||
247 | |||
248 | at91_sys_write(AT91_SMC_PULSE(0), AT91_SMC_NWEPULSE_(8) | AT91_SMC_NCS_WRPULSE_(10) | ||
249 | | AT91_SMC_NRDPULSE_(8) | AT91_SMC_NCS_RDPULSE_(10)); | ||
250 | |||
251 | at91_sys_write(AT91_SMC_CYCLE(0), AT91_SMC_NWECYCLE_(16) | AT91_SMC_NRDCYCLE_(16)); | ||
252 | |||
253 | at91_sys_write(AT91_SMC_MODE(0), AT91_SMC_READMODE | AT91_SMC_WRITEMODE | ||
254 | | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_WRITE | ||
255 | | AT91_SMC_DBW_16 | AT91_SMC_TDF_(1)); | ||
256 | 300 | ||
257 | platform_device_register(&cap9adk_nor_flash); | 301 | platform_device_register(&cap9adk_nor_flash); |
258 | } | 302 | } |
@@ -330,10 +374,8 @@ static void __init cap9adk_board_init(void) | |||
330 | /* Serial */ | 374 | /* Serial */ |
331 | at91_add_device_serial(); | 375 | at91_add_device_serial(); |
332 | /* USB Host */ | 376 | /* USB Host */ |
333 | set_irq_type(AT91CAP9_ID_UHP, IRQ_TYPE_LEVEL_HIGH); | ||
334 | at91_add_device_usbh(&cap9adk_usbh_data); | 377 | at91_add_device_usbh(&cap9adk_usbh_data); |
335 | /* USB HS */ | 378 | /* USB HS */ |
336 | set_irq_type(AT91CAP9_ID_UDPHS, IRQ_TYPE_LEVEL_HIGH); | ||
337 | at91_add_device_usba(&cap9adk_usba_udc_data); | 379 | at91_add_device_usba(&cap9adk_usba_udc_data); |
338 | /* SPI */ | 380 | /* SPI */ |
339 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); | 381 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); |
@@ -344,13 +386,12 @@ static void __init cap9adk_board_init(void) | |||
344 | /* Ethernet */ | 386 | /* Ethernet */ |
345 | at91_add_device_eth(&cap9adk_macb_data); | 387 | at91_add_device_eth(&cap9adk_macb_data); |
346 | /* NAND */ | 388 | /* NAND */ |
347 | at91_add_device_nand(&cap9adk_nand_data); | 389 | cap9adk_add_device_nand(); |
348 | /* NOR Flash */ | 390 | /* NOR Flash */ |
349 | cap9adk_add_device_nor(); | 391 | cap9adk_add_device_nor(); |
350 | /* I2C */ | 392 | /* I2C */ |
351 | at91_add_device_i2c(NULL, 0); | 393 | at91_add_device_i2c(NULL, 0); |
352 | /* LCD Controller */ | 394 | /* LCD Controller */ |
353 | set_irq_type(AT91CAP9_ID_LCDC, IRQ_TYPE_LEVEL_HIGH); | ||
354 | at91_add_device_lcdc(&cap9adk_lcdc_data); | 395 | at91_add_device_lcdc(&cap9adk_lcdc_data); |
355 | /* AC97 */ | 396 | /* AC97 */ |
356 | at91_add_device_ac97(&cap9adk_ac97_data); | 397 | at91_add_device_ac97(&cap9adk_ac97_data); |