aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2009-07-05 17:43:01 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-07-06 07:02:14 -0400
commitbbeddc43e673fb6882cc55efdc3c3002c14f5d08 (patch)
tree42fd2c211b4988eadc9c2c74dcf176f5c0832991
parent28d0325ce6e0a52f53d8af687e6427fee59004d3 (diff)
[ARM] versatile: add PL061 gpiolib support
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/arm/mach-versatile/core.c15
-rw-r--r--arch/arm/mach-versatile/include/mach/gpio.h6
-rw-r--r--arch/arm/mach-versatile/include/mach/irqs.h11
-rw-r--r--arch/arm/mach-versatile/versatile_pb.c15
5 files changed, 43 insertions, 5 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index aef63c8e3d2d..e4971e4fa565 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -229,6 +229,7 @@ config ARCH_VERSATILE
229 select ICST307 229 select ICST307
230 select GENERIC_TIME 230 select GENERIC_TIME
231 select GENERIC_CLOCKEVENTS 231 select GENERIC_CLOCKEVENTS
232 select ARCH_WANT_OPTIONAL_GPIOLIB
232 help 233 help
233 This enables support for ARM Ltd Versatile board. 234 This enables support for ARM Ltd Versatile board.
234 235
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index 69214fc8bd19..92273c95edf5 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -26,6 +26,7 @@
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/amba/bus.h> 27#include <linux/amba/bus.h>
28#include <linux/amba/clcd.h> 28#include <linux/amba/clcd.h>
29#include <linux/amba/pl061.h>
29#include <linux/clocksource.h> 30#include <linux/clocksource.h>
30#include <linux/clockchips.h> 31#include <linux/clockchips.h>
31#include <linux/cnt32_to_63.h> 32#include <linux/cnt32_to_63.h>
@@ -706,6 +707,16 @@ static struct clcd_board clcd_plat_data = {
706 .remove = versatile_clcd_remove, 707 .remove = versatile_clcd_remove,
707}; 708};
708 709
710static struct pl061_platform_data gpio0_plat_data = {
711 .gpio_base = 0,
712 .irq_base = IRQ_GPIO0_START,
713};
714
715static struct pl061_platform_data gpio1_plat_data = {
716 .gpio_base = 8,
717 .irq_base = IRQ_GPIO1_START,
718};
719
709#define AACI_IRQ { IRQ_AACI, NO_IRQ } 720#define AACI_IRQ { IRQ_AACI, NO_IRQ }
710#define AACI_DMA { 0x80, 0x81 } 721#define AACI_DMA { 0x80, 0x81 }
711#define MMCI0_IRQ { IRQ_MMCI0A,IRQ_SIC_MMCI0B } 722#define MMCI0_IRQ { IRQ_MMCI0A,IRQ_SIC_MMCI0B }
@@ -768,8 +779,8 @@ AMBA_DEVICE(clcd, "dev:20", CLCD, &clcd_plat_data);
768AMBA_DEVICE(dmac, "dev:30", DMAC, NULL); 779AMBA_DEVICE(dmac, "dev:30", DMAC, NULL);
769AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 780AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL);
770AMBA_DEVICE(wdog, "dev:e1", WATCHDOG, NULL); 781AMBA_DEVICE(wdog, "dev:e1", WATCHDOG, NULL);
771AMBA_DEVICE(gpio0, "dev:e4", GPIO0, NULL); 782AMBA_DEVICE(gpio0, "dev:e4", GPIO0, &gpio0_plat_data);
772AMBA_DEVICE(gpio1, "dev:e5", GPIO1, NULL); 783AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data);
773AMBA_DEVICE(rtc, "dev:e8", RTC, NULL); 784AMBA_DEVICE(rtc, "dev:e8", RTC, NULL);
774AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 785AMBA_DEVICE(sci0, "dev:f0", SCI, NULL);
775AMBA_DEVICE(uart0, "dev:f1", UART0, NULL); 786AMBA_DEVICE(uart0, "dev:f1", UART0, NULL);
diff --git a/arch/arm/mach-versatile/include/mach/gpio.h b/arch/arm/mach-versatile/include/mach/gpio.h
new file mode 100644
index 000000000000..94ff27678a46
--- /dev/null
+++ b/arch/arm/mach-versatile/include/mach/gpio.h
@@ -0,0 +1,6 @@
1#include <asm-generic/gpio.h>
2
3#define gpio_get_value __gpio_get_value
4#define gpio_set_value __gpio_set_value
5#define gpio_cansleep __gpio_cansleep
6#define gpio_to_irq __gpio_to_irq
diff --git a/arch/arm/mach-versatile/include/mach/irqs.h b/arch/arm/mach-versatile/include/mach/irqs.h
index 9bfdb30e1f3f..bf44c61bd1f6 100644
--- a/arch/arm/mach-versatile/include/mach/irqs.h
+++ b/arch/arm/mach-versatile/include/mach/irqs.h
@@ -122,4 +122,13 @@
122#define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3) 122#define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3)
123#define IRQ_SIC_END 63 123#define IRQ_SIC_END 63
124 124
125#define NR_IRQS 64 125#define IRQ_GPIO0_START (IRQ_SIC_END + 1)
126#define IRQ_GPIO0_END (IRQ_GPIO0_START + 31)
127#define IRQ_GPIO1_START (IRQ_GPIO0_END + 1)
128#define IRQ_GPIO1_END (IRQ_GPIO1_START + 31)
129#define IRQ_GPIO2_START (IRQ_GPIO1_END + 1)
130#define IRQ_GPIO2_END (IRQ_GPIO2_START + 31)
131#define IRQ_GPIO3_START (IRQ_GPIO2_END + 1)
132#define IRQ_GPIO3_END (IRQ_GPIO3_START + 31)
133
134#define NR_IRQS (IRQ_GPIO3_END + 1)
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c
index aa051c0884f8..7419451fdf00 100644
--- a/arch/arm/mach-versatile/versatile_pb.c
+++ b/arch/arm/mach-versatile/versatile_pb.c
@@ -23,6 +23,7 @@
23#include <linux/device.h> 23#include <linux/device.h>
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h>
26#include <linux/io.h> 27#include <linux/io.h>
27 28
28#include <mach/hardware.h> 29#include <mach/hardware.h>
@@ -45,6 +46,16 @@ static struct mmc_platform_data mmc1_plat_data = {
45 .status = mmc_status, 46 .status = mmc_status,
46}; 47};
47 48
49static struct pl061_platform_data gpio2_plat_data = {
50 .gpio_base = 16,
51 .irq_base = IRQ_GPIO2_START,
52};
53
54static struct pl061_platform_data gpio3_plat_data = {
55 .gpio_base = 24,
56 .irq_base = IRQ_GPIO3_START,
57};
58
48#define UART3_IRQ { IRQ_SIC_UART3, NO_IRQ } 59#define UART3_IRQ { IRQ_SIC_UART3, NO_IRQ }
49#define UART3_DMA { 0x86, 0x87 } 60#define UART3_DMA { 0x86, 0x87 }
50#define SCI1_IRQ { IRQ_SIC_SCI3, NO_IRQ } 61#define SCI1_IRQ { IRQ_SIC_SCI3, NO_IRQ }
@@ -70,8 +81,8 @@ AMBA_DEVICE(sci1, "fpga:0a", SCI1, NULL);
70AMBA_DEVICE(mmc1, "fpga:0b", MMCI1, &mmc1_plat_data); 81AMBA_DEVICE(mmc1, "fpga:0b", MMCI1, &mmc1_plat_data);
71 82
72/* DevChip Primecells */ 83/* DevChip Primecells */
73AMBA_DEVICE(gpio2, "dev:e6", GPIO2, NULL); 84AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data);
74AMBA_DEVICE(gpio3, "dev:e7", GPIO3, NULL); 85AMBA_DEVICE(gpio3, "dev:e7", GPIO3, &gpio3_plat_data);
75 86
76static struct amba_device *amba_devs[] __initdata = { 87static struct amba_device *amba_devs[] __initdata = {
77 &uart3_device, 88 &uart3_device,