aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-ux500/Makefile2
-rw-r--r--arch/arm/mach-ux500/cpu-db5500.c33
-rw-r--r--arch/arm/mach-ux500/cpu-db8500.c32
-rw-r--r--arch/arm/mach-ux500/devices-common.c38
-rw-r--r--arch/arm/mach-ux500/devices-common.h5
-rw-r--r--arch/arm/mach-ux500/devices-db5500.c46
-rw-r--r--arch/arm/mach-ux500/devices-db8500.c36
-rw-r--r--arch/arm/mach-ux500/include/mach/gpio.h38
-rw-r--r--arch/arm/mach-ux500/include/mach/hardware.h2
9 files changed, 93 insertions, 139 deletions
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile
index 9720e4284429..93b0cf162017 100644
--- a/arch/arm/mach-ux500/Makefile
+++ b/arch/arm/mach-ux500/Makefile
@@ -3,7 +3,7 @@
3# 3#
4 4
5obj-y := clock.o cpu.o devices.o devices-common.o 5obj-y := clock.o cpu.o devices.o devices-common.o
6obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o devices-db5500.o dma-db5500.o 6obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o dma-db5500.o
7obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o prcmu.o 7obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o prcmu.o
8obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o board-mop500-sdi.o 8obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o board-mop500-sdi.o
9obj-$(CONFIG_MACH_U5500) += board-u5500.o board-u5500-sdi.o 9obj-$(CONFIG_MACH_U5500) += board-u5500.o board-u5500-sdi.o
diff --git a/arch/arm/mach-ux500/cpu-db5500.c b/arch/arm/mach-ux500/cpu-db5500.c
index 8816844d7e48..acc841e48de4 100644
--- a/arch/arm/mach-ux500/cpu-db5500.c
+++ b/arch/arm/mach-ux500/cpu-db5500.c
@@ -12,6 +12,8 @@
12 12
13#include <asm/mach/map.h> 13#include <asm/mach/map.h>
14 14
15#include <plat/gpio.h>
16
15#include <mach/hardware.h> 17#include <mach/hardware.h>
16#include <mach/devices.h> 18#include <mach/devices.h>
17#include <mach/setup.h> 19#include <mach/setup.h>
@@ -113,19 +115,32 @@ static struct platform_device mbox2_device = {
113}; 115};
114 116
115static struct platform_device *u5500_platform_devs[] __initdata = { 117static struct platform_device *u5500_platform_devs[] __initdata = {
116 &u5500_gpio_devs[0],
117 &u5500_gpio_devs[1],
118 &u5500_gpio_devs[2],
119 &u5500_gpio_devs[3],
120 &u5500_gpio_devs[4],
121 &u5500_gpio_devs[5],
122 &u5500_gpio_devs[6],
123 &u5500_gpio_devs[7],
124 &mbox0_device, 118 &mbox0_device,
125 &mbox1_device, 119 &mbox1_device,
126 &mbox2_device, 120 &mbox2_device,
127}; 121};
128 122
123static resource_size_t __initdata db5500_gpio_base[] = {
124 U5500_GPIOBANK0_BASE,
125 U5500_GPIOBANK1_BASE,
126 U5500_GPIOBANK2_BASE,
127 U5500_GPIOBANK3_BASE,
128 U5500_GPIOBANK4_BASE,
129 U5500_GPIOBANK5_BASE,
130 U5500_GPIOBANK6_BASE,
131 U5500_GPIOBANK7_BASE,
132};
133
134static void __init db5500_add_gpios(void)
135{
136 struct nmk_gpio_platform_data pdata = {
137 /* No custom data yet */
138 };
139
140 dbx500_add_gpios(ARRAY_AND_SIZE(db5500_gpio_base),
141 IRQ_DB5500_GPIO0, &pdata);
142}
143
129void __init u5500_map_io(void) 144void __init u5500_map_io(void)
130{ 145{
131 ux500_map_io(); 146 ux500_map_io();
@@ -135,8 +150,8 @@ void __init u5500_map_io(void)
135 150
136void __init u5500_init_devices(void) 151void __init u5500_init_devices(void)
137{ 152{
153 db5500_add_gpios();
138 db5500_dma_init(); 154 db5500_dma_init();
139
140 db5500_add_rtc(); 155 db5500_add_rtc();
141 156
142 platform_add_devices(u5500_platform_devs, 157 platform_add_devices(u5500_platform_devs,
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
index b78970c08ebc..658384c86933 100644
--- a/arch/arm/mach-ux500/cpu-db8500.c
+++ b/arch/arm/mach-ux500/cpu-db8500.c
@@ -25,15 +25,6 @@
25#include "devices-db8500.h" 25#include "devices-db8500.h"
26 26
27static struct platform_device *platform_devs[] __initdata = { 27static struct platform_device *platform_devs[] __initdata = {
28 &u8500_gpio_devs[0],
29 &u8500_gpio_devs[1],
30 &u8500_gpio_devs[2],
31 &u8500_gpio_devs[3],
32 &u8500_gpio_devs[4],
33 &u8500_gpio_devs[5],
34 &u8500_gpio_devs[6],
35 &u8500_gpio_devs[7],
36 &u8500_gpio_devs[8],
37 &u8500_dma40_device, 28 &u8500_dma40_device,
38}; 29};
39 30
@@ -141,6 +132,28 @@ void __init u8500_map_io(void)
141 get_db8500_asic_id(); 132 get_db8500_asic_id();
142} 133}
143 134
135static resource_size_t __initdata db8500_gpio_base[] = {
136 U8500_GPIOBANK0_BASE,
137 U8500_GPIOBANK1_BASE,
138 U8500_GPIOBANK2_BASE,
139 U8500_GPIOBANK3_BASE,
140 U8500_GPIOBANK4_BASE,
141 U8500_GPIOBANK5_BASE,
142 U8500_GPIOBANK6_BASE,
143 U8500_GPIOBANK7_BASE,
144 U8500_GPIOBANK8_BASE,
145};
146
147static void __init db8500_add_gpios(void)
148{
149 struct nmk_gpio_platform_data pdata = {
150 /* No custom data yet */
151 };
152
153 dbx500_add_gpios(ARRAY_AND_SIZE(db8500_gpio_base),
154 IRQ_DB8500_GPIO0, &pdata);
155}
156
144/* 157/*
145 * This function is called from the board init 158 * This function is called from the board init
146 */ 159 */
@@ -164,6 +177,7 @@ void __init u8500_init_devices(void)
164 dma40_u8500ed_fixup(); 177 dma40_u8500ed_fixup();
165 178
166 db8500_add_rtc(); 179 db8500_add_rtc();
180 db8500_add_gpios();
167 181
168 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); 182 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
169 183
diff --git a/arch/arm/mach-ux500/devices-common.c b/arch/arm/mach-ux500/devices-common.c
index 9376a246f862..fe69f5fac1bb 100644
--- a/arch/arm/mach-ux500/devices-common.c
+++ b/arch/arm/mach-ux500/devices-common.c
@@ -13,6 +13,8 @@
13#include <linux/platform_device.h> 13#include <linux/platform_device.h>
14#include <linux/amba/bus.h> 14#include <linux/amba/bus.h>
15 15
16#include <plat/gpio.h>
17
16#include <mach/hardware.h> 18#include <mach/hardware.h>
17 19
18#include "devices-common.h" 20#include "devices-common.h"
@@ -105,3 +107,39 @@ dbx500_add_platform_device_4k1irq(const char *name, int id,
105 return dbx500_add_platform_device(name, id, pdata, resources, 107 return dbx500_add_platform_device(name, id, pdata, resources,
106 ARRAY_SIZE(resources)); 108 ARRAY_SIZE(resources));
107} 109}
110
111static struct platform_device *
112dbx500_add_gpio(int id, resource_size_t addr, int irq,
113 struct nmk_gpio_platform_data *pdata)
114{
115 struct resource resources[] = {
116 {
117 .start = addr,
118 .end = addr + 127,
119 .flags = IORESOURCE_MEM,
120 },
121 {
122 .start = irq,
123 .end = irq,
124 .flags = IORESOURCE_IRQ,
125 }
126 };
127
128 return platform_device_register_resndata(NULL, "gpio", id,
129 resources, ARRAY_SIZE(resources),
130 pdata, sizeof(*pdata));
131}
132
133void dbx500_add_gpios(resource_size_t *base, int num, int irq,
134 struct nmk_gpio_platform_data *pdata)
135{
136 int first = 0;
137 int i;
138
139 for (i = 0; i < num; i++, first += 32, irq++) {
140 pdata->first_gpio = first;
141 pdata->first_irq = NOMADIK_GPIO_TO_IRQ(first);
142
143 dbx500_add_gpio(i, base[i], irq, pdata);
144 }
145}
diff --git a/arch/arm/mach-ux500/devices-common.h b/arch/arm/mach-ux500/devices-common.h
index 2e1de0e19717..cbadc117d2db 100644
--- a/arch/arm/mach-ux500/devices-common.h
+++ b/arch/arm/mach-ux500/devices-common.h
@@ -74,4 +74,9 @@ dbx500_add_rtc(resource_size_t base, int irq)
74 return dbx500_add_amba_device("rtc-pl031", base, irq, NULL, 0); 74 return dbx500_add_amba_device("rtc-pl031", base, irq, NULL, 0);
75} 75}
76 76
77struct nmk_gpio_platform_data;
78
79void dbx500_add_gpios(resource_size_t *base, int num, int irq,
80 struct nmk_gpio_platform_data *pdata);
81
77#endif 82#endif
diff --git a/arch/arm/mach-ux500/devices-db5500.c b/arch/arm/mach-ux500/devices-db5500.c
deleted file mode 100644
index 33e5b56bebb6..000000000000
--- a/arch/arm/mach-ux500/devices-db5500.c
+++ /dev/null
@@ -1,46 +0,0 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
5 * License terms: GNU General Public License (GPL) version 2
6 */
7
8#include <linux/platform_device.h>
9#include <linux/interrupt.h>
10#include <linux/gpio.h>
11
12#include <mach/hardware.h>
13#include <mach/devices.h>
14
15static struct nmk_gpio_platform_data u5500_gpio_data[] = {
16 GPIO_DATA("GPIO-0-31", 0),
17 GPIO_DATA("GPIO-32-63", 32), /* 36..63 not routed to pin */
18 GPIO_DATA("GPIO-64-95", 64), /* 83..95 not routed to pin */
19 GPIO_DATA("GPIO-96-127", 96), /* 102..127 not routed to pin */
20 GPIO_DATA("GPIO-128-159", 128), /* 149..159 not routed to pin */
21 GPIO_DATA("GPIO-160-191", 160),
22 GPIO_DATA("GPIO-192-223", 192),
23 GPIO_DATA("GPIO-224-255", 224), /* 228..255 not routed to pin */
24};
25
26static struct resource u5500_gpio_resources[] = {
27 GPIO_RESOURCE(0),
28 GPIO_RESOURCE(1),
29 GPIO_RESOURCE(2),
30 GPIO_RESOURCE(3),
31 GPIO_RESOURCE(4),
32 GPIO_RESOURCE(5),
33 GPIO_RESOURCE(6),
34 GPIO_RESOURCE(7),
35};
36
37struct platform_device u5500_gpio_devs[] = {
38 GPIO_DEVICE(0),
39 GPIO_DEVICE(1),
40 GPIO_DEVICE(2),
41 GPIO_DEVICE(3),
42 GPIO_DEVICE(4),
43 GPIO_DEVICE(5),
44 GPIO_DEVICE(6),
45 GPIO_DEVICE(7),
46};
diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c
index 1edcf82299fa..a7b0a183c037 100644
--- a/arch/arm/mach-ux500/devices-db8500.c
+++ b/arch/arm/mach-ux500/devices-db8500.c
@@ -19,42 +19,6 @@
19 19
20#include "ste-dma40-db8500.h" 20#include "ste-dma40-db8500.h"
21 21
22static struct nmk_gpio_platform_data u8500_gpio_data[] = {
23 GPIO_DATA("GPIO-0-31", 0),
24 GPIO_DATA("GPIO-32-63", 32), /* 37..63 not routed to pin */
25 GPIO_DATA("GPIO-64-95", 64),
26 GPIO_DATA("GPIO-96-127", 96), /* 98..127 not routed to pin */
27 GPIO_DATA("GPIO-128-159", 128),
28 GPIO_DATA("GPIO-160-191", 160), /* 172..191 not routed to pin */
29 GPIO_DATA("GPIO-192-223", 192),
30 GPIO_DATA("GPIO-224-255", 224), /* 231..255 not routed to pin */
31 GPIO_DATA("GPIO-256-288", 256), /* 268..288 not routed to pin */
32};
33
34static struct resource u8500_gpio_resources[] = {
35 GPIO_RESOURCE(0),
36 GPIO_RESOURCE(1),
37 GPIO_RESOURCE(2),
38 GPIO_RESOURCE(3),
39 GPIO_RESOURCE(4),
40 GPIO_RESOURCE(5),
41 GPIO_RESOURCE(6),
42 GPIO_RESOURCE(7),
43 GPIO_RESOURCE(8),
44};
45
46struct platform_device u8500_gpio_devs[] = {
47 GPIO_DEVICE(0),
48 GPIO_DEVICE(1),
49 GPIO_DEVICE(2),
50 GPIO_DEVICE(3),
51 GPIO_DEVICE(4),
52 GPIO_DEVICE(5),
53 GPIO_DEVICE(6),
54 GPIO_DEVICE(7),
55 GPIO_DEVICE(8),
56};
57
58static struct resource dma40_resources[] = { 22static struct resource dma40_resources[] = {
59 [0] = { 23 [0] = {
60 .start = U8500_DMA_BASE, 24 .start = U8500_DMA_BASE,
diff --git a/arch/arm/mach-ux500/include/mach/gpio.h b/arch/arm/mach-ux500/include/mach/gpio.h
index d548a622e7d2..3c4cd31ad9f7 100644
--- a/arch/arm/mach-ux500/include/mach/gpio.h
+++ b/arch/arm/mach-ux500/include/mach/gpio.h
@@ -9,42 +9,4 @@
9 9
10#include <plat/gpio.h> 10#include <plat/gpio.h>
11 11
12#define __GPIO_RESOURCE(soc, block) \
13 { \
14 .start = soc##_GPIOBANK##block##_BASE, \
15 .end = soc##_GPIOBANK##block##_BASE + 127, \
16 .flags = IORESOURCE_MEM, \
17 }, \
18 { \
19 .start = IRQ_GPIO##block, \
20 .end = IRQ_GPIO##block, \
21 .flags = IORESOURCE_IRQ, \
22 }
23
24#define __GPIO_DEVICE(soc, block) \
25 { \
26 .name = "gpio", \
27 .id = block, \
28 .num_resources = 2, \
29 .resource = &soc##_gpio_resources[block * 2], \
30 .dev = { \
31 .platform_data = &soc##_gpio_data[block], \
32 }, \
33 }
34
35#define GPIO_DATA(_name, first) \
36 { \
37 .name = _name, \
38 .first_gpio = first, \
39 .first_irq = NOMADIK_GPIO_TO_IRQ(first), \
40 }
41
42#ifdef CONFIG_UX500_SOC_DB8500
43#define GPIO_RESOURCE(block) __GPIO_RESOURCE(U8500, block)
44#define GPIO_DEVICE(block) __GPIO_DEVICE(u8500, block)
45#elif defined(CONFIG_UX500_SOC_DB5500)
46#define GPIO_RESOURCE(block) __GPIO_RESOURCE(U5500, block)
47#define GPIO_DEVICE(block) __GPIO_DEVICE(u5500, block)
48#endif
49
50#endif /* __ASM_ARCH_GPIO_H */ 12#endif /* __ASM_ARCH_GPIO_H */
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h
index 32e883a8f2a2..6295cc581355 100644
--- a/arch/arm/mach-ux500/include/mach/hardware.h
+++ b/arch/arm/mach-ux500/include/mach/hardware.h
@@ -142,6 +142,8 @@ static inline bool cpu_is_u5500(void)
142#endif 142#endif
143} 143}
144 144
145#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
146
145#endif 147#endif
146 148
147#endif /* __MACH_HARDWARE_H */ 149#endif /* __MACH_HARDWARE_H */