diff options
| -rw-r--r-- | arch/arm/mach-at91rm9200/devices.c | 135 | ||||
| -rw-r--r-- | include/asm-arm/arch-at91rm9200/board.h | 19 |
2 files changed, 146 insertions, 8 deletions
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c index aa36760efbc3..1781b8f342c4 100644 --- a/arch/arm/mach-at91rm9200/devices.c +++ b/arch/arm/mach-at91rm9200/devices.c | |||
| @@ -28,10 +28,10 @@ | |||
| 28 | static u64 ohci_dmamask = 0xffffffffUL; | 28 | static u64 ohci_dmamask = 0xffffffffUL; |
| 29 | static struct at91_usbh_data usbh_data; | 29 | static struct at91_usbh_data usbh_data; |
| 30 | 30 | ||
| 31 | static struct resource at91rm9200_usbh_resource[] = { | 31 | static struct resource at91_usbh_resource[] = { |
| 32 | [0] = { | 32 | [0] = { |
| 33 | .start = AT91_UHP_BASE, | 33 | .start = AT91_UHP_BASE, |
| 34 | .end = AT91_UHP_BASE + SZ_1M -1, | 34 | .end = AT91_UHP_BASE + SZ_1M - 1, |
| 35 | .flags = IORESOURCE_MEM, | 35 | .flags = IORESOURCE_MEM, |
| 36 | }, | 36 | }, |
| 37 | [1] = { | 37 | [1] = { |
| @@ -49,8 +49,8 @@ static struct platform_device at91rm9200_usbh_device = { | |||
| 49 | .coherent_dma_mask = 0xffffffff, | 49 | .coherent_dma_mask = 0xffffffff, |
| 50 | .platform_data = &usbh_data, | 50 | .platform_data = &usbh_data, |
| 51 | }, | 51 | }, |
| 52 | .resource = at91rm9200_usbh_resource, | 52 | .resource = at91_usbh_resource, |
| 53 | .num_resources = ARRAY_SIZE(at91rm9200_usbh_resource), | 53 | .num_resources = ARRAY_SIZE(at91_usbh_resource), |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | void __init at91_add_device_usbh(struct at91_usbh_data *data) | 56 | void __init at91_add_device_usbh(struct at91_usbh_data *data) |
| @@ -121,6 +121,19 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {} | |||
| 121 | static u64 eth_dmamask = 0xffffffffUL; | 121 | static u64 eth_dmamask = 0xffffffffUL; |
| 122 | static struct at91_eth_data eth_data; | 122 | static struct at91_eth_data eth_data; |
| 123 | 123 | ||
| 124 | static struct resource at91_eth_resources[] = { | ||
| 125 | [0] = { | ||
| 126 | .start = AT91_BASE_EMAC, | ||
| 127 | .end = AT91_BASE_EMAC + SZ_16K - 1, | ||
| 128 | .flags = IORESOURCE_MEM, | ||
| 129 | }, | ||
| 130 | [1] = { | ||
| 131 | .start = AT91_ID_EMAC, | ||
| 132 | .end = AT91_ID_EMAC, | ||
| 133 | .flags = IORESOURCE_IRQ, | ||
| 134 | }, | ||
| 135 | }; | ||
| 136 | |||
| 124 | static struct platform_device at91rm9200_eth_device = { | 137 | static struct platform_device at91rm9200_eth_device = { |
| 125 | .name = "at91_ether", | 138 | .name = "at91_ether", |
| 126 | .id = -1, | 139 | .id = -1, |
| @@ -129,7 +142,8 @@ static struct platform_device at91rm9200_eth_device = { | |||
| 129 | .coherent_dma_mask = 0xffffffff, | 142 | .coherent_dma_mask = 0xffffffff, |
| 130 | .platform_data = ð_data, | 143 | .platform_data = ð_data, |
| 131 | }, | 144 | }, |
| 132 | .num_resources = 0, | 145 | .resource = at91_eth_resources, |
| 146 | .num_resources = ARRAY_SIZE(at91_eth_resources), | ||
| 133 | }; | 147 | }; |
| 134 | 148 | ||
| 135 | void __init at91_add_device_eth(struct at91_eth_data *data) | 149 | void __init at91_add_device_eth(struct at91_eth_data *data) |
| @@ -224,15 +238,20 @@ static u64 mmc_dmamask = 0xffffffffUL; | |||
| 224 | static struct at91_mmc_data mmc_data; | 238 | static struct at91_mmc_data mmc_data; |
| 225 | 239 | ||
| 226 | static struct resource at91_mmc_resources[] = { | 240 | static struct resource at91_mmc_resources[] = { |
| 227 | { | 241 | [0] = { |
| 228 | .start = AT91_BASE_MCI, | 242 | .start = AT91_BASE_MCI, |
| 229 | .end = AT91_BASE_MCI + SZ_16K - 1, | 243 | .end = AT91_BASE_MCI + SZ_16K - 1, |
| 230 | .flags = IORESOURCE_MEM, | 244 | .flags = IORESOURCE_MEM, |
| 231 | } | 245 | }, |
| 246 | [1] = { | ||
| 247 | .start = AT91_ID_MCI, | ||
| 248 | .end = AT91_ID_MCI, | ||
| 249 | .flags = IORESOURCE_IRQ, | ||
| 250 | }, | ||
| 232 | }; | 251 | }; |
| 233 | 252 | ||
| 234 | static struct platform_device at91rm9200_mmc_device = { | 253 | static struct platform_device at91rm9200_mmc_device = { |
| 235 | .name = "at91rm9200_mci", | 254 | .name = "at91_mci", |
| 236 | .id = -1, | 255 | .id = -1, |
| 237 | .dev = { | 256 | .dev = { |
| 238 | .dma_mask = &mmc_dmamask, | 257 | .dma_mask = &mmc_dmamask, |
| @@ -291,6 +310,106 @@ void __init at91_add_device_mmc(struct at91_mmc_data *data) {} | |||
| 291 | #endif | 310 | #endif |
| 292 | 311 | ||
| 293 | /* -------------------------------------------------------------------- | 312 | /* -------------------------------------------------------------------- |
| 313 | * NAND / SmartMedia | ||
| 314 | * -------------------------------------------------------------------- */ | ||
| 315 | |||
| 316 | #if defined(CONFIG_MTD_NAND_AT91) || defined(CONFIG_MTD_NAND_AT91_MODULE) | ||
| 317 | static struct at91_nand_data nand_data; | ||
| 318 | |||
| 319 | static struct resource at91_nand_resources[] = { | ||
| 320 | { | ||
| 321 | .start = AT91_SMARTMEDIA_BASE, | ||
| 322 | .end = AT91_SMARTMEDIA_BASE + SZ_8M - 1, | ||
| 323 | .flags = IORESOURCE_MEM, | ||
| 324 | } | ||
| 325 | }; | ||
| 326 | |||
| 327 | static struct platform_device at91_nand_device = { | ||
| 328 | .name = "at91_nand", | ||
| 329 | .id = -1, | ||
| 330 | .dev = { | ||
| 331 | .platform_data = &nand_data, | ||
| 332 | }, | ||
| 333 | .resource = at91_nand_resources, | ||
| 334 | .num_resources = ARRAY_SIZE(at91_nand_resources), | ||
| 335 | }; | ||
| 336 | |||
| 337 | void __init at91_add_device_nand(struct at91_nand_data *data) | ||
| 338 | { | ||
| 339 | if (!data) | ||
| 340 | return; | ||
| 341 | |||
| 342 | /* enable pin */ | ||
| 343 | if (data->enable_pin) | ||
| 344 | at91_set_gpio_output(data->enable_pin, 1); | ||
| 345 | |||
| 346 | /* ready/busy pin */ | ||
| 347 | if (data->rdy_pin) | ||
| 348 | at91_set_gpio_input(data->rdy_pin, 1); | ||
| 349 | |||
| 350 | /* card detect pin */ | ||
| 351 | if (data->det_pin) | ||
| 352 | at91_set_gpio_input(data->det_pin, 1); | ||
| 353 | |||
| 354 | at91_set_A_periph(AT91_PIN_PC1, 0); /* SMOE */ | ||
| 355 | at91_set_A_periph(AT91_PIN_PC3, 0); /* SMWE */ | ||
| 356 | |||
| 357 | nand_data = *data; | ||
| 358 | platform_device_register(&at91_nand_device); | ||
| 359 | } | ||
| 360 | #else | ||
| 361 | void __init at91_add_device_nand(struct at91_nand_data *data) {} | ||
| 362 | #endif | ||
| 363 | |||
| 364 | |||
| 365 | /* -------------------------------------------------------------------- | ||
| 366 | * TWI (i2c) | ||
| 367 | * -------------------------------------------------------------------- */ | ||
| 368 | |||
| 369 | #if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE) | ||
| 370 | static struct platform_device at91rm9200_twi_device = { | ||
| 371 | .name = "at91_i2c", | ||
| 372 | .id = -1, | ||
| 373 | .num_resources = 0, | ||
| 374 | }; | ||
| 375 | |||
| 376 | void __init at91_add_device_i2c(void) | ||
| 377 | { | ||
| 378 | /* pins used for TWI interface */ | ||
| 379 | at91_set_A_periph(AT91_PIN_PA25, 0); /* TWD */ | ||
| 380 | at91_set_multi_drive(AT91_PIN_PA25, 1); | ||
| 381 | |||
| 382 | at91_set_A_periph(AT91_PIN_PA26, 0); /* TWCK */ | ||
| 383 | at91_set_multi_drive(AT91_PIN_PA26, 1); | ||
| 384 | |||
| 385 | platform_device_register(&at91rm9200_twi_device); | ||
| 386 | } | ||
| 387 | #else | ||
| 388 | void __init at91_add_device_i2c(void) {} | ||
| 389 | #endif | ||
| 390 | |||
| 391 | |||
| 392 | /* -------------------------------------------------------------------- | ||
| 393 | * RTC | ||
| 394 | * -------------------------------------------------------------------- */ | ||
| 395 | |||
| 396 | #if defined(CONFIG_AT91_RTC) || defined(CONFIG_AT91_RTC_MODULE) | ||
| 397 | static struct platform_device at91rm9200_rtc_device = { | ||
| 398 | .name = "at91_rtc", | ||
| 399 | .id = -1, | ||
| 400 | .num_resources = 0, | ||
| 401 | }; | ||
| 402 | |||
| 403 | void __init at91_add_device_rtc(void) | ||
| 404 | { | ||
| 405 | platform_device_register(&at91rm9200_rtc_device); | ||
| 406 | } | ||
| 407 | #else | ||
| 408 | void __init at91_add_device_rtc(void) {} | ||
| 409 | #endif | ||
| 410 | |||
| 411 | |||
| 412 | /* -------------------------------------------------------------------- | ||
| 294 | * LEDs | 413 | * LEDs |
| 295 | * -------------------------------------------------------------------- */ | 414 | * -------------------------------------------------------------------- */ |
| 296 | 415 | ||
diff --git a/include/asm-arm/arch-at91rm9200/board.h b/include/asm-arm/arch-at91rm9200/board.h index 834d0ab991ae..4fdef13d01d4 100644 --- a/include/asm-arm/arch-at91rm9200/board.h +++ b/include/asm-arm/arch-at91rm9200/board.h | |||
| @@ -38,6 +38,8 @@ extern unsigned long at91_master_clock; | |||
| 38 | extern int at91_serial_map[AT91_NR_UART]; | 38 | extern int at91_serial_map[AT91_NR_UART]; |
| 39 | extern int at91_console_port; | 39 | extern int at91_console_port; |
| 40 | 40 | ||
| 41 | #include <linux/mtd/partitions.h> | ||
| 42 | |||
| 41 | /* USB Device */ | 43 | /* USB Device */ |
| 42 | struct at91_udc_data { | 44 | struct at91_udc_data { |
| 43 | u8 vbus_pin; /* high == host powering us */ | 45 | u8 vbus_pin; /* high == host powering us */ |
| @@ -77,6 +79,23 @@ struct at91_usbh_data { | |||
| 77 | }; | 79 | }; |
| 78 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | 80 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); |
| 79 | 81 | ||
| 82 | /* NAND / SmartMedia */ | ||
| 83 | struct at91_nand_data { | ||
| 84 | u8 enable_pin; /* chip enable */ | ||
| 85 | u8 det_pin; /* card detect */ | ||
| 86 | u8 rdy_pin; /* ready/busy */ | ||
| 87 | u8 ale; /* address line number connected to ALE */ | ||
| 88 | u8 cle; /* address line number connected to CLE */ | ||
| 89 | struct mtd_partition* (*partition_info)(int, int*); | ||
| 90 | }; | ||
| 91 | extern void __init at91_add_device_nand(struct at91_nand_data *data); | ||
| 92 | |||
| 93 | /* I2C*/ | ||
| 94 | void __init at91_add_device_i2c(void); | ||
| 95 | |||
| 96 | /* RTC */ | ||
| 97 | void __init at91_add_device_rtc(void); | ||
| 98 | |||
| 80 | /* LEDs */ | 99 | /* LEDs */ |
| 81 | extern u8 at91_leds_cpu; | 100 | extern u8 at91_leds_cpu; |
| 82 | extern u8 at91_leds_timer; | 101 | extern u8 at91_leds_timer; |
