diff options
author | Andrew Victor <linux@maxim.org.za> | 2008-04-02 16:58:00 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-04-04 04:52:25 -0400 |
commit | e5f40bfaf309ec4cc27b717d48fb0824313e5ef8 (patch) | |
tree | a35c3051d900708487b5f2ffc6c44304c6f0db61 /arch/arm/mach-at91/at91rm9200_devices.c | |
parent | 4fd9212cb9bad88ec7c8bf5313f53331905f957a (diff) |
[ARM] 4909/1: [AT91] Timer/Counter Block platform_devices
Register platform_devices for the Timer/Counter Block peripherals
found on the AT91RM9200, SAM9 & CAP9 processors.
Original patch from David Brownell.
Signed-off-by: Andrew Victor <linux@maxim.org.za>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-at91/at91rm9200_devices.c')
-rw-r--r-- | arch/arm/mach-at91/at91rm9200_devices.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index ef6aeb86e980..70d3a0018530 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -577,6 +577,90 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
577 | 577 | ||
578 | 578 | ||
579 | /* -------------------------------------------------------------------- | 579 | /* -------------------------------------------------------------------- |
580 | * Timer/Counter blocks | ||
581 | * -------------------------------------------------------------------- */ | ||
582 | |||
583 | #ifdef CONFIG_ATMEL_TCLIB | ||
584 | |||
585 | static struct resource tcb0_resources[] = { | ||
586 | [0] = { | ||
587 | .start = AT91RM9200_BASE_TCB0, | ||
588 | .end = AT91RM9200_BASE_TCB0 + SZ_16K - 1, | ||
589 | .flags = IORESOURCE_MEM, | ||
590 | }, | ||
591 | [1] = { | ||
592 | .start = AT91RM9200_ID_TC0, | ||
593 | .end = AT91RM9200_ID_TC0, | ||
594 | .flags = IORESOURCE_IRQ, | ||
595 | }, | ||
596 | [2] = { | ||
597 | .start = AT91RM9200_ID_TC1, | ||
598 | .end = AT91RM9200_ID_TC1, | ||
599 | .flags = IORESOURCE_IRQ, | ||
600 | }, | ||
601 | [3] = { | ||
602 | .start = AT91RM9200_ID_TC2, | ||
603 | .end = AT91RM9200_ID_TC2, | ||
604 | .flags = IORESOURCE_IRQ, | ||
605 | }, | ||
606 | }; | ||
607 | |||
608 | static struct platform_device at91rm9200_tcb0_device = { | ||
609 | .name = "atmel_tcb", | ||
610 | .id = 0, | ||
611 | .resource = tcb0_resources, | ||
612 | .num_resources = ARRAY_SIZE(tcb0_resources), | ||
613 | }; | ||
614 | |||
615 | static struct resource tcb1_resources[] = { | ||
616 | [0] = { | ||
617 | .start = AT91RM9200_BASE_TCB1, | ||
618 | .end = AT91RM9200_BASE_TCB1 + SZ_16K - 1, | ||
619 | .flags = IORESOURCE_MEM, | ||
620 | }, | ||
621 | [1] = { | ||
622 | .start = AT91RM9200_ID_TC3, | ||
623 | .end = AT91RM9200_ID_TC3, | ||
624 | .flags = IORESOURCE_IRQ, | ||
625 | }, | ||
626 | [2] = { | ||
627 | .start = AT91RM9200_ID_TC4, | ||
628 | .end = AT91RM9200_ID_TC4, | ||
629 | .flags = IORESOURCE_IRQ, | ||
630 | }, | ||
631 | [3] = { | ||
632 | .start = AT91RM9200_ID_TC5, | ||
633 | .end = AT91RM9200_ID_TC5, | ||
634 | .flags = IORESOURCE_IRQ, | ||
635 | }, | ||
636 | }; | ||
637 | |||
638 | static struct platform_device at91rm9200_tcb1_device = { | ||
639 | .name = "atmel_tcb", | ||
640 | .id = 1, | ||
641 | .resource = tcb1_resources, | ||
642 | .num_resources = ARRAY_SIZE(tcb1_resources), | ||
643 | }; | ||
644 | |||
645 | static void __init at91_add_device_tc(void) | ||
646 | { | ||
647 | /* this chip has a separate clock and irq for each TC channel */ | ||
648 | at91_clock_associate("tc0_clk", &at91rm9200_tcb0_device.dev, "t0_clk"); | ||
649 | at91_clock_associate("tc1_clk", &at91rm9200_tcb0_device.dev, "t1_clk"); | ||
650 | at91_clock_associate("tc2_clk", &at91rm9200_tcb0_device.dev, "t2_clk"); | ||
651 | platform_device_register(&at91rm9200_tcb0_device); | ||
652 | |||
653 | at91_clock_associate("tc3_clk", &at91rm9200_tcb1_device.dev, "t0_clk"); | ||
654 | at91_clock_associate("tc4_clk", &at91rm9200_tcb1_device.dev, "t1_clk"); | ||
655 | at91_clock_associate("tc5_clk", &at91rm9200_tcb1_device.dev, "t2_clk"); | ||
656 | platform_device_register(&at91rm9200_tcb1_device); | ||
657 | } | ||
658 | #else | ||
659 | static void __init at91_add_device_tc(void) { } | ||
660 | #endif | ||
661 | |||
662 | |||
663 | /* -------------------------------------------------------------------- | ||
580 | * RTC | 664 | * RTC |
581 | * -------------------------------------------------------------------- */ | 665 | * -------------------------------------------------------------------- */ |
582 | 666 | ||
@@ -1141,6 +1225,7 @@ static int __init at91_add_standard_devices(void) | |||
1141 | { | 1225 | { |
1142 | at91_add_device_rtc(); | 1226 | at91_add_device_rtc(); |
1143 | at91_add_device_watchdog(); | 1227 | at91_add_device_watchdog(); |
1228 | at91_add_device_tc(); | ||
1144 | return 0; | 1229 | return 0; |
1145 | } | 1230 | } |
1146 | 1231 | ||