diff options
-rw-r--r-- | arch/arm/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/Kconfig | 10 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/Makefile | 6 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/board-nhk8815.c | 322 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/cpu-8815.c | 112 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/cpu-8815.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-nomadik/i2c-8815nhk.c | 82 |
7 files changed, 6 insertions, 533 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 67874b82a4ed..bef46edbe830 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -899,10 +899,12 @@ config ARCH_NOMADIK | |||
899 | select ARCH_REQUIRE_GPIOLIB | 899 | select ARCH_REQUIRE_GPIOLIB |
900 | select ARM_AMBA | 900 | select ARM_AMBA |
901 | select ARM_VIC | 901 | select ARM_VIC |
902 | select CLKSRC_NOMADIK_MTU | ||
902 | select COMMON_CLK | 903 | select COMMON_CLK |
903 | select CPU_ARM926T | 904 | select CPU_ARM926T |
904 | select GENERIC_CLOCKEVENTS | 905 | select GENERIC_CLOCKEVENTS |
905 | select MIGHT_HAVE_CACHE_L2X0 | 906 | select MIGHT_HAVE_CACHE_L2X0 |
907 | select OF | ||
906 | select PINCTRL | 908 | select PINCTRL |
907 | select PINCTRL_STN8815 | 909 | select PINCTRL_STN8815 |
908 | select SPARSE_IRQ | 910 | select SPARSE_IRQ |
diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig index 706dc5727bbe..82226a5d60ef 100644 --- a/arch/arm/mach-nomadik/Kconfig +++ b/arch/arm/mach-nomadik/Kconfig | |||
@@ -4,19 +4,13 @@ menu "Nomadik boards" | |||
4 | 4 | ||
5 | config MACH_NOMADIK_8815NHK | 5 | config MACH_NOMADIK_8815NHK |
6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | 6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" |
7 | select CLKSRC_NOMADIK_MTU | ||
8 | select NOMADIK_8815 | 7 | select NOMADIK_8815 |
8 | select I2C | ||
9 | select I2C_ALGOBIT | ||
9 | 10 | ||
10 | endmenu | 11 | endmenu |
11 | 12 | ||
12 | config NOMADIK_8815 | 13 | config NOMADIK_8815 |
13 | bool | 14 | bool |
14 | 15 | ||
15 | config I2C_BITBANG_8815NHK | ||
16 | tristate "Driver for bit-bang busses found on the 8815 NHK" | ||
17 | depends on I2C && MACH_NOMADIK_8815NHK | ||
18 | depends on PINCTRL_NOMADIK | ||
19 | default y | ||
20 | select I2C_ALGOBIT | ||
21 | |||
22 | endif | 16 | endif |
diff --git a/arch/arm/mach-nomadik/Makefile b/arch/arm/mach-nomadik/Makefile index a42c9a33d3bf..1071c3b04d1a 100644 --- a/arch/arm/mach-nomadik/Makefile +++ b/arch/arm/mach-nomadik/Makefile | |||
@@ -9,9 +9,3 @@ | |||
9 | 9 | ||
10 | # Cpu revision | 10 | # Cpu revision |
11 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | 11 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o |
12 | |||
13 | # Specific board support | ||
14 | obj-$(CONFIG_MACH_NOMADIK_8815NHK) += board-nhk8815.o | ||
15 | |||
16 | # Nomadik extra devices | ||
17 | obj-$(CONFIG_I2C_BITBANG_8815NHK) += i2c-8815nhk.o | ||
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c deleted file mode 100644 index e7b216cb6802..000000000000 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ /dev/null | |||
@@ -1,322 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nomadik/board-8815nhk.c | ||
3 | * | ||
4 | * Copyright (C) STMicroelectronics | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * NHK15 board specifc driver definition | ||
11 | */ | ||
12 | #include <linux/types.h> | ||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/platform_device.h> | ||
16 | #include <linux/amba/bus.h> | ||
17 | #include <linux/amba/mmci.h> | ||
18 | #include <linux/interrupt.h> | ||
19 | #include <linux/gpio.h> | ||
20 | #include <linux/mtd/mtd.h> | ||
21 | #include <linux/mtd/nand.h> | ||
22 | #include <linux/mtd/fsmc.h> | ||
23 | #include <linux/mtd/onenand.h> | ||
24 | #include <linux/mtd/partitions.h> | ||
25 | #include <linux/i2c.h> | ||
26 | #include <linux/io.h> | ||
27 | #include <linux/platform_data/clocksource-nomadik-mtu.h> | ||
28 | #include <asm/sizes.h> | ||
29 | #include <asm/mach-types.h> | ||
30 | #include <asm/mach/arch.h> | ||
31 | #include <asm/mach/flash.h> | ||
32 | #include <asm/mach/time.h> | ||
33 | #include <mach/irqs.h> | ||
34 | |||
35 | #include "cpu-8815.h" | ||
36 | |||
37 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
38 | #define SRC_CR_INIT_MASK 0x00007fff | ||
39 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
40 | |||
41 | #define ALE_OFF 0x1000000 | ||
42 | #define CLE_OFF 0x800000 | ||
43 | |||
44 | /* These addresses span 16MB, so use three individual pages */ | ||
45 | static struct resource nhk8815_nand_resources[] = { | ||
46 | { | ||
47 | .name = "nand_data", | ||
48 | .start = 0x40000000, | ||
49 | .end = 0x40000000 + SZ_16K - 1, | ||
50 | .flags = IORESOURCE_MEM, | ||
51 | }, { | ||
52 | .name = "nand_addr", | ||
53 | .start = 0x40000000 + ALE_OFF, | ||
54 | .end = 0x40000000 +ALE_OFF + SZ_16K - 1, | ||
55 | .flags = IORESOURCE_MEM, | ||
56 | }, { | ||
57 | .name = "nand_cmd", | ||
58 | .start = 0x40000000 + CLE_OFF, | ||
59 | .end = 0x40000000 + CLE_OFF + SZ_16K - 1, | ||
60 | .flags = IORESOURCE_MEM, | ||
61 | }, { | ||
62 | .name = "fsmc_regs", | ||
63 | .start = NOMADIK_FSMC_BASE, | ||
64 | .end = NOMADIK_FSMC_BASE + SZ_4K - 1, | ||
65 | .flags = IORESOURCE_MEM, | ||
66 | }, | ||
67 | }; | ||
68 | |||
69 | /* | ||
70 | * These partitions are the same as those used in the 2.6.20 release | ||
71 | * shipped by the vendor; the first two partitions are mandated | ||
72 | * by the boot ROM, and the bootloader area is somehow oversized... | ||
73 | */ | ||
74 | static struct mtd_partition nhk8815_partitions[] = { | ||
75 | { | ||
76 | .name = "X-Loader(NAND)", | ||
77 | .offset = 0, | ||
78 | .size = SZ_256K, | ||
79 | }, { | ||
80 | .name = "MemInit(NAND)", | ||
81 | .offset = MTDPART_OFS_APPEND, | ||
82 | .size = SZ_256K, | ||
83 | }, { | ||
84 | .name = "BootLoader(NAND)", | ||
85 | .offset = MTDPART_OFS_APPEND, | ||
86 | .size = SZ_2M, | ||
87 | }, { | ||
88 | .name = "Kernel zImage(NAND)", | ||
89 | .offset = MTDPART_OFS_APPEND, | ||
90 | .size = 3 * SZ_1M, | ||
91 | }, { | ||
92 | .name = "Root Filesystem(NAND)", | ||
93 | .offset = MTDPART_OFS_APPEND, | ||
94 | .size = 22 * SZ_1M, | ||
95 | }, { | ||
96 | .name = "User Filesystem(NAND)", | ||
97 | .offset = MTDPART_OFS_APPEND, | ||
98 | .size = MTDPART_SIZ_FULL, | ||
99 | } | ||
100 | }; | ||
101 | |||
102 | static struct fsmc_nand_timings nhk8815_nand_timings = { | ||
103 | .thiz = 0, | ||
104 | .thold = 0x10, | ||
105 | .twait = 0x0A, | ||
106 | .tset = 0, | ||
107 | }; | ||
108 | |||
109 | static struct fsmc_nand_platform_data nhk8815_nand_platform_data = { | ||
110 | .nand_timings = &nhk8815_nand_timings, | ||
111 | .partitions = nhk8815_partitions, | ||
112 | .nr_partitions = ARRAY_SIZE(nhk8815_partitions), | ||
113 | .width = FSMC_NAND_BW8, | ||
114 | }; | ||
115 | |||
116 | static struct platform_device nhk8815_nand_device = { | ||
117 | .name = "fsmc-nand", | ||
118 | .id = -1, | ||
119 | .resource = nhk8815_nand_resources, | ||
120 | .num_resources = ARRAY_SIZE(nhk8815_nand_resources), | ||
121 | .dev = { | ||
122 | .platform_data = &nhk8815_nand_platform_data, | ||
123 | }, | ||
124 | }; | ||
125 | |||
126 | /* These are the partitions for the OneNand device, different from above */ | ||
127 | static struct mtd_partition nhk8815_onenand_partitions[] = { | ||
128 | { | ||
129 | .name = "X-Loader(OneNAND)", | ||
130 | .offset = 0, | ||
131 | .size = SZ_256K, | ||
132 | }, { | ||
133 | .name = "MemInit(OneNAND)", | ||
134 | .offset = MTDPART_OFS_APPEND, | ||
135 | .size = SZ_256K, | ||
136 | }, { | ||
137 | .name = "BootLoader(OneNAND)", | ||
138 | .offset = MTDPART_OFS_APPEND, | ||
139 | .size = SZ_2M-SZ_256K, | ||
140 | }, { | ||
141 | .name = "SysImage(OneNAND)", | ||
142 | .offset = MTDPART_OFS_APPEND, | ||
143 | .size = 4 * SZ_1M, | ||
144 | }, { | ||
145 | .name = "Root Filesystem(OneNAND)", | ||
146 | .offset = MTDPART_OFS_APPEND, | ||
147 | .size = 22 * SZ_1M, | ||
148 | }, { | ||
149 | .name = "User Filesystem(OneNAND)", | ||
150 | .offset = MTDPART_OFS_APPEND, | ||
151 | .size = MTDPART_SIZ_FULL, | ||
152 | } | ||
153 | }; | ||
154 | |||
155 | static struct onenand_platform_data nhk8815_onenand_data = { | ||
156 | .parts = nhk8815_onenand_partitions, | ||
157 | .nr_parts = ARRAY_SIZE(nhk8815_onenand_partitions), | ||
158 | }; | ||
159 | |||
160 | static struct resource nhk8815_onenand_resource[] = { | ||
161 | { | ||
162 | .start = 0x30000000, | ||
163 | .end = 0x30000000 + SZ_128K - 1, | ||
164 | .flags = IORESOURCE_MEM, | ||
165 | }, | ||
166 | }; | ||
167 | |||
168 | static struct platform_device nhk8815_onenand_device = { | ||
169 | .name = "onenand-flash", | ||
170 | .id = -1, | ||
171 | .dev = { | ||
172 | .platform_data = &nhk8815_onenand_data, | ||
173 | }, | ||
174 | .resource = nhk8815_onenand_resource, | ||
175 | .num_resources = ARRAY_SIZE(nhk8815_onenand_resource), | ||
176 | }; | ||
177 | |||
178 | /* bus control reg. and bus timing reg. for CS0..CS3 */ | ||
179 | #define FSMC_BCR(x) (NOMADIK_FSMC_VA + (x << 3)) | ||
180 | #define FSMC_BTR(x) (NOMADIK_FSMC_VA + (x << 3) + 0x04) | ||
181 | |||
182 | static void __init nhk8815_onenand_init(void) | ||
183 | { | ||
184 | #ifdef CONFIG_MTD_ONENAND | ||
185 | /* Set up SMCS0 for OneNand */ | ||
186 | writel(0x000030db, FSMC_BCR(0)); | ||
187 | writel(0x02100551, FSMC_BTR(0)); | ||
188 | #endif | ||
189 | } | ||
190 | |||
191 | static struct mmci_platform_data mmcsd_plat_data = { | ||
192 | .ocr_mask = MMC_VDD_29_30, | ||
193 | .f_max = 48000000, | ||
194 | .gpio_wp = -1, | ||
195 | .gpio_cd = 111, | ||
196 | .cd_invert = true, | ||
197 | .capabilities = MMC_CAP_MMC_HIGHSPEED | | ||
198 | MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA, | ||
199 | }; | ||
200 | |||
201 | static int __init nhk8815_mmcsd_init(void) | ||
202 | { | ||
203 | int ret; | ||
204 | |||
205 | /* For e.g. devicetree boot */ | ||
206 | if (!machine_is_nomadik()) | ||
207 | return 0; | ||
208 | |||
209 | ret = gpio_request(112, "card detect bias"); | ||
210 | if (ret) | ||
211 | return ret; | ||
212 | gpio_direction_output(112, 0); | ||
213 | amba_apb_device_add(NULL, "mmci", NOMADIK_SDI_BASE, SZ_4K, IRQ_SDMMC, 0, &mmcsd_plat_data, 0x10180180); | ||
214 | return 0; | ||
215 | } | ||
216 | module_init(nhk8815_mmcsd_init); | ||
217 | |||
218 | static struct resource nhk8815_eth_resources[] = { | ||
219 | { | ||
220 | .name = "smc91x-regs", | ||
221 | .start = 0x34000000 + 0x300, | ||
222 | .end = 0x34000000 + SZ_64K - 1, | ||
223 | .flags = IORESOURCE_MEM, | ||
224 | }, { | ||
225 | .start = NOMADIK_GPIO_TO_IRQ(115), | ||
226 | .end = NOMADIK_GPIO_TO_IRQ(115), | ||
227 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING, | ||
228 | } | ||
229 | }; | ||
230 | |||
231 | static struct platform_device nhk8815_eth_device = { | ||
232 | .name = "smc91x", | ||
233 | .resource = nhk8815_eth_resources, | ||
234 | .num_resources = ARRAY_SIZE(nhk8815_eth_resources), | ||
235 | }; | ||
236 | |||
237 | static int __init nhk8815_eth_init(void) | ||
238 | { | ||
239 | int gpio_nr = 115; /* hardwired in the board */ | ||
240 | int err; | ||
241 | |||
242 | if (!machine_is_nomadik()) | ||
243 | return 0; | ||
244 | err = gpio_request(gpio_nr, "eth_irq"); | ||
245 | if (!err) err = gpio_direction_input(gpio_nr); | ||
246 | if (err) | ||
247 | pr_err("Error %i in %s\n", err, __func__); | ||
248 | return err; | ||
249 | } | ||
250 | device_initcall(nhk8815_eth_init); | ||
251 | |||
252 | static struct platform_device *nhk8815_platform_devices[] __initdata = { | ||
253 | &nhk8815_nand_device, | ||
254 | &nhk8815_onenand_device, | ||
255 | &nhk8815_eth_device, | ||
256 | /* will add more devices */ | ||
257 | }; | ||
258 | |||
259 | static void __init nomadik_timer_init(void) | ||
260 | { | ||
261 | u32 src_cr; | ||
262 | |||
263 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
264 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
265 | src_cr &= SRC_CR_INIT_MASK; | ||
266 | src_cr |= SRC_CR_INIT_VAL; | ||
267 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
268 | |||
269 | nmdk_timer_init(io_p2v(NOMADIK_MTU0_BASE), IRQ_MTU0); | ||
270 | } | ||
271 | |||
272 | static struct i2c_board_info __initdata nhk8815_i2c0_devices[] = { | ||
273 | { | ||
274 | I2C_BOARD_INFO("stw4811", 0x2d), | ||
275 | }, | ||
276 | }; | ||
277 | |||
278 | static struct i2c_board_info __initdata nhk8815_i2c1_devices[] = { | ||
279 | { | ||
280 | I2C_BOARD_INFO("camera", 0x10), | ||
281 | }, | ||
282 | { | ||
283 | I2C_BOARD_INFO("stw5095", 0x1a), | ||
284 | }, | ||
285 | { | ||
286 | I2C_BOARD_INFO("lis3lv02dl", 0x1d), | ||
287 | }, | ||
288 | }; | ||
289 | |||
290 | static struct i2c_board_info __initdata nhk8815_i2c2_devices[] = { | ||
291 | { | ||
292 | I2C_BOARD_INFO("stw4811-usb", 0x2d), | ||
293 | }, | ||
294 | }; | ||
295 | |||
296 | static void __init nhk8815_platform_init(void) | ||
297 | { | ||
298 | cpu8815_platform_init(); | ||
299 | nhk8815_onenand_init(); | ||
300 | platform_add_devices(nhk8815_platform_devices, | ||
301 | ARRAY_SIZE(nhk8815_platform_devices)); | ||
302 | |||
303 | amba_apb_device_add(NULL, "uart0", NOMADIK_UART0_BASE, SZ_4K, IRQ_UART0, 0, NULL, 0); | ||
304 | amba_apb_device_add(NULL, "uart1", NOMADIK_UART1_BASE, SZ_4K, IRQ_UART1, 0, NULL, 0); | ||
305 | |||
306 | i2c_register_board_info(0, nhk8815_i2c0_devices, | ||
307 | ARRAY_SIZE(nhk8815_i2c0_devices)); | ||
308 | i2c_register_board_info(1, nhk8815_i2c1_devices, | ||
309 | ARRAY_SIZE(nhk8815_i2c1_devices)); | ||
310 | i2c_register_board_info(2, nhk8815_i2c2_devices, | ||
311 | ARRAY_SIZE(nhk8815_i2c2_devices)); | ||
312 | } | ||
313 | |||
314 | MACHINE_START(NOMADIK, "NHK8815") | ||
315 | /* Maintainer: ST MicroElectronics */ | ||
316 | .atag_offset = 0x100, | ||
317 | .map_io = cpu8815_map_io, | ||
318 | .init_irq = cpu8815_init_irq, | ||
319 | .init_time = nomadik_timer_init, | ||
320 | .init_machine = nhk8815_platform_init, | ||
321 | .restart = cpu8815_restart, | ||
322 | MACHINE_END | ||
diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index 5ad301e4eb2f..60a18e12e6ce 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c | |||
@@ -48,53 +48,6 @@ | |||
48 | #include <asm/cacheflush.h> | 48 | #include <asm/cacheflush.h> |
49 | #include <asm/hardware/cache-l2x0.h> | 49 | #include <asm/hardware/cache-l2x0.h> |
50 | 50 | ||
51 | #include "cpu-8815.h" | ||
52 | |||
53 | /* The 8815 has 4 GPIO blocks, let's register them immediately */ | ||
54 | static resource_size_t __initdata cpu8815_gpio_base[] = { | ||
55 | NOMADIK_GPIO0_BASE, | ||
56 | NOMADIK_GPIO1_BASE, | ||
57 | NOMADIK_GPIO2_BASE, | ||
58 | NOMADIK_GPIO3_BASE, | ||
59 | }; | ||
60 | |||
61 | static struct platform_device * | ||
62 | cpu8815_add_gpio(int id, resource_size_t addr, int irq, | ||
63 | struct nmk_gpio_platform_data *pdata) | ||
64 | { | ||
65 | struct resource resources[] = { | ||
66 | { | ||
67 | .start = addr, | ||
68 | .end = addr + 127, | ||
69 | .flags = IORESOURCE_MEM, | ||
70 | }, | ||
71 | { | ||
72 | .start = irq, | ||
73 | .end = irq, | ||
74 | .flags = IORESOURCE_IRQ, | ||
75 | } | ||
76 | }; | ||
77 | |||
78 | return platform_device_register_resndata(NULL, "gpio", id, | ||
79 | resources, ARRAY_SIZE(resources), | ||
80 | pdata, sizeof(*pdata)); | ||
81 | } | ||
82 | |||
83 | void cpu8815_add_gpios(resource_size_t *base, int num, int irq, | ||
84 | struct nmk_gpio_platform_data *pdata) | ||
85 | { | ||
86 | int first = 0; | ||
87 | int i; | ||
88 | |||
89 | for (i = 0; i < num; i++, first += 32, irq++) { | ||
90 | pdata->first_gpio = first; | ||
91 | pdata->first_irq = NOMADIK_GPIO_TO_IRQ(first); | ||
92 | pdata->num_gpio = 32; | ||
93 | |||
94 | cpu8815_add_gpio(i, base[i], irq, pdata); | ||
95 | } | ||
96 | } | ||
97 | |||
98 | static unsigned long out_low[] = { PIN_OUTPUT_LOW }; | 51 | static unsigned long out_low[] = { PIN_OUTPUT_LOW }; |
99 | static unsigned long out_high[] = { PIN_OUTPUT_HIGH }; | 52 | static unsigned long out_high[] = { PIN_OUTPUT_HIGH }; |
100 | static unsigned long in_nopull[] = { PIN_INPUT_NOPULL }; | 53 | static unsigned long in_nopull[] = { PIN_INPUT_NOPULL }; |
@@ -137,38 +90,6 @@ static struct pinctrl_map __initdata nhk8815_pinmap[] = { | |||
137 | PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-stn8815", "GPIO74_C20", in_pullup), | 90 | PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-stn8815", "GPIO74_C20", in_pullup), |
138 | }; | 91 | }; |
139 | 92 | ||
140 | static inline void | ||
141 | cpu8815_add_pinctrl(struct device *parent, const char *name) | ||
142 | { | ||
143 | struct platform_device_info pdevinfo = { | ||
144 | .parent = parent, | ||
145 | .name = name, | ||
146 | .id = -1, | ||
147 | }; | ||
148 | |||
149 | pinctrl_register_mappings(nhk8815_pinmap, ARRAY_SIZE(nhk8815_pinmap)); | ||
150 | platform_device_register_full(&pdevinfo); | ||
151 | } | ||
152 | |||
153 | static int __init cpu8815_init(void) | ||
154 | { | ||
155 | struct nmk_gpio_platform_data pdata = { | ||
156 | /* No custom data yet */ | ||
157 | }; | ||
158 | |||
159 | /* For e.g. device tree boots */ | ||
160 | if (!machine_is_nomadik()) | ||
161 | return 0; | ||
162 | |||
163 | cpu8815_add_gpios(cpu8815_gpio_base, ARRAY_SIZE(cpu8815_gpio_base), | ||
164 | IRQ_GPIO0, &pdata); | ||
165 | cpu8815_add_pinctrl(NULL, "pinctrl-stn8815"); | ||
166 | amba_apb_device_add(NULL, "rng", NOMADIK_RNG_BASE, SZ_4K, 0, 0, NULL, 0); | ||
167 | amba_apb_device_add(NULL, "rtc-pl031", NOMADIK_RTC_BASE, SZ_4K, IRQ_RTC_RTT, 0, NULL, 0); | ||
168 | return 0; | ||
169 | } | ||
170 | arch_initcall(cpu8815_init); | ||
171 | |||
172 | /* All SoC devices live in the same area (see hardware.h) */ | 93 | /* All SoC devices live in the same area (see hardware.h) */ |
173 | static struct map_desc nomadik_io_desc[] __initdata = { | 94 | static struct map_desc nomadik_io_desc[] __initdata = { |
174 | { | 95 | { |
@@ -180,37 +101,12 @@ static struct map_desc nomadik_io_desc[] __initdata = { | |||
180 | /* static ram and secured ram may be added later */ | 101 | /* static ram and secured ram may be added later */ |
181 | }; | 102 | }; |
182 | 103 | ||
183 | void __init cpu8815_map_io(void) | 104 | static void __init cpu8815_map_io(void) |
184 | { | 105 | { |
185 | iotable_init(nomadik_io_desc, ARRAY_SIZE(nomadik_io_desc)); | 106 | iotable_init(nomadik_io_desc, ARRAY_SIZE(nomadik_io_desc)); |
186 | } | 107 | } |
187 | 108 | ||
188 | void __init cpu8815_init_irq(void) | 109 | static void cpu8815_restart(char mode, const char *cmd) |
189 | { | ||
190 | /* This modified VIC cell has two register blocks, at 0 and 0x20 */ | ||
191 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); | ||
192 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); | ||
193 | |||
194 | /* | ||
195 | * Init clocks here so that they are available for system timer | ||
196 | * initialization. | ||
197 | */ | ||
198 | nomadik_clk_init(); | ||
199 | } | ||
200 | |||
201 | /* | ||
202 | * This function is called from the board init ("init_machine"). | ||
203 | */ | ||
204 | void __init cpu8815_platform_init(void) | ||
205 | { | ||
206 | #ifdef CONFIG_CACHE_L2X0 | ||
207 | /* At full speed latency must be >=2, so 0x249 in low bits */ | ||
208 | l2x0_init(io_p2v(NOMADIK_L2CC_BASE), 0x00730249, 0xfe000fff); | ||
209 | #endif | ||
210 | return; | ||
211 | } | ||
212 | |||
213 | void cpu8815_restart(char mode, const char *cmd) | ||
214 | { | 110 | { |
215 | void __iomem *src_rstsr = io_p2v(NOMADIK_SRC_BASE + 0x18); | 111 | void __iomem *src_rstsr = io_p2v(NOMADIK_SRC_BASE + 0x18); |
216 | 112 | ||
@@ -220,8 +116,6 @@ void cpu8815_restart(char mode, const char *cmd) | |||
220 | writel(1, src_rstsr); | 116 | writel(1, src_rstsr); |
221 | } | 117 | } |
222 | 118 | ||
223 | #ifdef CONFIG_OF | ||
224 | |||
225 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | 119 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ |
226 | #define SRC_CR_INIT_MASK 0x00007fff | 120 | #define SRC_CR_INIT_MASK 0x00007fff |
227 | #define SRC_CR_INIT_VAL 0x2aaa8000 | 121 | #define SRC_CR_INIT_VAL 0x2aaa8000 |
@@ -393,5 +287,3 @@ DT_MACHINE_START(NOMADIK_DT, "Nomadik STn8815") | |||
393 | .restart = cpu8815_restart, | 287 | .restart = cpu8815_restart, |
394 | .dt_compat = cpu8815_board_compat, | 288 | .dt_compat = cpu8815_board_compat, |
395 | MACHINE_END | 289 | MACHINE_END |
396 | |||
397 | #endif | ||
diff --git a/arch/arm/mach-nomadik/cpu-8815.h b/arch/arm/mach-nomadik/cpu-8815.h deleted file mode 100644 index d6c7830e4799..000000000000 --- a/arch/arm/mach-nomadik/cpu-8815.h +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | extern void cpu8815_map_io(void); | ||
2 | extern void cpu8815_platform_init(void); | ||
3 | extern void cpu8815_init_irq(void); | ||
4 | extern void cpu8815_restart(char, const char *); | ||
5 | extern struct sys_timer cpu8815_timer; | ||
diff --git a/arch/arm/mach-nomadik/i2c-8815nhk.c b/arch/arm/mach-nomadik/i2c-8815nhk.c deleted file mode 100644 index 299ff5a687bc..000000000000 --- a/arch/arm/mach-nomadik/i2c-8815nhk.c +++ /dev/null | |||
@@ -1,82 +0,0 @@ | |||
1 | #include <linux/module.h> | ||
2 | #include <linux/init.h> | ||
3 | #include <linux/i2c.h> | ||
4 | #include <linux/i2c-algo-bit.h> | ||
5 | #include <linux/i2c-gpio.h> | ||
6 | #include <linux/platform_device.h> | ||
7 | #include <asm/mach-types.h> | ||
8 | |||
9 | /* | ||
10 | * There are two busses in the 8815NHK. | ||
11 | * They could, in theory, be driven by the hardware component, but we | ||
12 | * use bit-bang through GPIO by now, to keep things simple | ||
13 | */ | ||
14 | |||
15 | /* I2C0 connected to the STw4811 power management chip */ | ||
16 | static struct i2c_gpio_platform_data nhk8815_i2c_data0 = { | ||
17 | /* keep defaults for timeouts; pins are push-pull bidirectional */ | ||
18 | .scl_pin = 62, | ||
19 | .sda_pin = 63, | ||
20 | }; | ||
21 | |||
22 | /* I2C1 connected to various sensors */ | ||
23 | static struct i2c_gpio_platform_data nhk8815_i2c_data1 = { | ||
24 | /* keep defaults for timeouts; pins are push-pull bidirectional */ | ||
25 | .scl_pin = 53, | ||
26 | .sda_pin = 54, | ||
27 | }; | ||
28 | |||
29 | /* I2C2 connected to the USB portions of the STw4811 only */ | ||
30 | static struct i2c_gpio_platform_data nhk8815_i2c_data2 = { | ||
31 | /* keep defaults for timeouts; pins are push-pull bidirectional */ | ||
32 | .scl_pin = 73, | ||
33 | .sda_pin = 74, | ||
34 | }; | ||
35 | |||
36 | static struct platform_device nhk8815_i2c_dev0 = { | ||
37 | .name = "i2c-gpio", | ||
38 | .id = 0, | ||
39 | .dev = { | ||
40 | .platform_data = &nhk8815_i2c_data0, | ||
41 | }, | ||
42 | }; | ||
43 | |||
44 | static struct platform_device nhk8815_i2c_dev1 = { | ||
45 | .name = "i2c-gpio", | ||
46 | .id = 1, | ||
47 | .dev = { | ||
48 | .platform_data = &nhk8815_i2c_data1, | ||
49 | }, | ||
50 | }; | ||
51 | |||
52 | static struct platform_device nhk8815_i2c_dev2 = { | ||
53 | .name = "i2c-gpio", | ||
54 | .id = 2, | ||
55 | .dev = { | ||
56 | .platform_data = &nhk8815_i2c_data2, | ||
57 | }, | ||
58 | }; | ||
59 | |||
60 | static int __init nhk8815_i2c_init(void) | ||
61 | { | ||
62 | /* For e.g. devicetree boot */ | ||
63 | if (!machine_is_nomadik()) | ||
64 | return 0; | ||
65 | |||
66 | platform_device_register(&nhk8815_i2c_dev0); | ||
67 | platform_device_register(&nhk8815_i2c_dev1); | ||
68 | platform_device_register(&nhk8815_i2c_dev2); | ||
69 | |||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | static void __exit nhk8815_i2c_exit(void) | ||
74 | { | ||
75 | platform_device_unregister(&nhk8815_i2c_dev0); | ||
76 | platform_device_unregister(&nhk8815_i2c_dev1); | ||
77 | platform_device_unregister(&nhk8815_i2c_dev2); | ||
78 | return; | ||
79 | } | ||
80 | |||
81 | module_init(nhk8815_i2c_init); | ||
82 | module_exit(nhk8815_i2c_exit); | ||