]> bbs.cooldavid.org Git - net-next-2.6.git/blame - arch/arm/mach-mx25/devices.c
arm/mx25: add watchdog device
[net-next-2.6.git] / arch / arm / mach-mx25 / devices.c
CommitLineData
de41fddd
SH
1/*
2 * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 * Boston, MA 02110-1301, USA.
17 */
18
8c25c36f 19#include <linux/platform_device.h>
b02019e6 20#include <linux/dma-mapping.h>
8c25c36f
SH
21#include <linux/gpio.h>
22#include <mach/mx25.h>
23#include <mach/irqs.h>
24
25static struct resource uart0[] = {
26 {
27 .start = 0x43f90000,
28 .end = 0x43f93fff,
29 .flags = IORESOURCE_MEM,
30 }, {
31 .start = 45,
32 .end = 45,
33 .flags = IORESOURCE_IRQ,
34 },
35};
36
37struct platform_device mxc_uart_device0 = {
38 .name = "imx-uart",
39 .id = 0,
40 .resource = uart0,
41 .num_resources = ARRAY_SIZE(uart0),
42};
43
44static struct resource uart1[] = {
45 {
46 .start = 0x43f94000,
47 .end = 0x43f97fff,
48 .flags = IORESOURCE_MEM,
49 }, {
50 .start = 32,
51 .end = 32,
52 .flags = IORESOURCE_IRQ,
53 },
54};
55
56struct platform_device mxc_uart_device1 = {
57 .name = "imx-uart",
58 .id = 1,
59 .resource = uart1,
60 .num_resources = ARRAY_SIZE(uart1),
61};
62
63static struct resource uart2[] = {
64 {
65 .start = 0x5000c000,
66 .end = 0x5000ffff,
67 .flags = IORESOURCE_MEM,
68 }, {
69 .start = 18,
70 .end = 18,
71 .flags = IORESOURCE_IRQ,
72 },
73};
74
75struct platform_device mxc_uart_device2 = {
76 .name = "imx-uart",
77 .id = 2,
78 .resource = uart2,
79 .num_resources = ARRAY_SIZE(uart2),
80};
81
82static struct resource uart3[] = {
83 {
84 .start = 0x50008000,
85 .end = 0x5000bfff,
86 .flags = IORESOURCE_MEM,
87 }, {
88 .start = 5,
89 .end = 5,
90 .flags = IORESOURCE_IRQ,
91 },
92};
93
94struct platform_device mxc_uart_device3 = {
95 .name = "imx-uart",
96 .id = 3,
97 .resource = uart3,
98 .num_resources = ARRAY_SIZE(uart3),
99};
100
101static struct resource uart4[] = {
102 {
103 .start = 0x5002c000,
104 .end = 0x5002ffff,
105 .flags = IORESOURCE_MEM,
106 }, {
107 .start = 40,
108 .end = 40,
109 .flags = IORESOURCE_IRQ,
110 },
111};
112
113struct platform_device mxc_uart_device4 = {
114 .name = "imx-uart",
115 .id = 4,
116 .resource = uart4,
117 .num_resources = ARRAY_SIZE(uart4),
118};
119
120#define MX25_OTG_BASE_ADDR 0x53FF4000
121
122static u64 otg_dmamask = DMA_BIT_MASK(32);
123
124static struct resource mxc_otg_resources[] = {
125 {
126 .start = MX25_OTG_BASE_ADDR,
127 .end = MX25_OTG_BASE_ADDR + 0x1ff,
128 .flags = IORESOURCE_MEM,
129 }, {
130 .start = 37,
131 .end = 37,
132 .flags = IORESOURCE_IRQ,
133 },
134};
135
136struct platform_device mxc_otg = {
137 .name = "mxc-ehci",
138 .id = 0,
139 .dev = {
140 .coherent_dma_mask = 0xffffffff,
141 .dma_mask = &otg_dmamask,
142 },
143 .resource = mxc_otg_resources,
144 .num_resources = ARRAY_SIZE(mxc_otg_resources),
145};
146
147/* OTG gadget device */
148struct platform_device otg_udc_device = {
149 .name = "fsl-usb2-udc",
150 .id = -1,
151 .dev = {
152 .dma_mask = &otg_dmamask,
153 .coherent_dma_mask = 0xffffffff,
154 },
155 .resource = mxc_otg_resources,
156 .num_resources = ARRAY_SIZE(mxc_otg_resources),
157};
158
159static u64 usbh2_dmamask = DMA_BIT_MASK(32);
160
161static struct resource mxc_usbh2_resources[] = {
162 {
163 .start = MX25_OTG_BASE_ADDR + 0x400,
164 .end = MX25_OTG_BASE_ADDR + 0x5ff,
165 .flags = IORESOURCE_MEM,
166 }, {
167 .start = 35,
168 .end = 35,
169 .flags = IORESOURCE_IRQ,
170 },
171};
172
173struct platform_device mxc_usbh2 = {
174 .name = "mxc-ehci",
175 .id = 1,
176 .dev = {
177 .coherent_dma_mask = 0xffffffff,
178 .dma_mask = &usbh2_dmamask,
179 },
180 .resource = mxc_usbh2_resources,
181 .num_resources = ARRAY_SIZE(mxc_usbh2_resources),
182};
183
184static struct resource mxc_spi_resources0[] = {
185 {
186 .start = 0x43fa4000,
187 .end = 0x43fa7fff,
188 .flags = IORESOURCE_MEM,
189 }, {
190 .start = 14,
191 .end = 14,
192 .flags = IORESOURCE_IRQ,
193 },
194};
195
196struct platform_device mxc_spi_device0 = {
197 .name = "spi_imx",
198 .id = 0,
199 .num_resources = ARRAY_SIZE(mxc_spi_resources0),
200 .resource = mxc_spi_resources0,
201};
202
203static struct resource mxc_spi_resources1[] = {
204 {
205 .start = 0x50010000,
206 .end = 0x50013fff,
207 .flags = IORESOURCE_MEM,
208 }, {
209 .start = 13,
210 .end = 13,
211 .flags = IORESOURCE_IRQ,
212 },
213};
214
215struct platform_device mxc_spi_device1 = {
216 .name = "spi_imx",
217 .id = 1,
218 .num_resources = ARRAY_SIZE(mxc_spi_resources1),
219 .resource = mxc_spi_resources1,
220};
221
222static struct resource mxc_spi_resources2[] = {
223 {
224 .start = 0x50004000,
225 .end = 0x50007fff,
226 .flags = IORESOURCE_MEM,
227 }, {
228 .start = 0,
229 .end = 0,
230 .flags = IORESOURCE_IRQ,
231 },
232};
233
234struct platform_device mxc_spi_device2 = {
235 .name = "spi_imx",
236 .id = 2,
237 .num_resources = ARRAY_SIZE(mxc_spi_resources2),
238 .resource = mxc_spi_resources2,
239};
240
241static struct resource mxc_pwm_resources0[] = {
242 {
243 .start = 0x53fe0000,
244 .end = 0x53fe3fff,
245 .flags = IORESOURCE_MEM,
246 }, {
247 .start = 26,
248 .end = 26,
249 .flags = IORESOURCE_IRQ,
250 }
251};
252
253struct platform_device mxc_pwm_device0 = {
254 .name = "mxc_pwm",
255 .id = 0,
256 .num_resources = ARRAY_SIZE(mxc_pwm_resources0),
257 .resource = mxc_pwm_resources0,
258};
259
260static struct resource mxc_pwm_resources1[] = {
261 {
262 .start = 0x53fa0000,
263 .end = 0x53fa3fff,
264 .flags = IORESOURCE_MEM,
265 }, {
266 .start = 36,
267 .end = 36,
268 .flags = IORESOURCE_IRQ,
269 }
270};
271
272struct platform_device mxc_pwm_device1 = {
273 .name = "mxc_pwm",
274 .id = 1,
275 .num_resources = ARRAY_SIZE(mxc_pwm_resources1),
276 .resource = mxc_pwm_resources1,
277};
278
279static struct resource mxc_pwm_resources2[] = {
280 {
281 .start = 0x53fa8000,
282 .end = 0x53fabfff,
283 .flags = IORESOURCE_MEM,
284 }, {
285 .start = 41,
286 .end = 41,
287 .flags = IORESOURCE_IRQ,
288 }
289};
290
291struct platform_device mxc_pwm_device2 = {
292 .name = "mxc_pwm",
293 .id = 2,
294 .num_resources = ARRAY_SIZE(mxc_pwm_resources2),
295 .resource = mxc_pwm_resources2,
296};
297
298static struct resource mxc_keypad_resources[] = {
299 {
300 .start = 0x43fa8000,
301 .end = 0x43fabfff,
302 .flags = IORESOURCE_MEM,
303 }, {
304 .start = 24,
305 .end = 24,
306 .flags = IORESOURCE_IRQ,
307 }
308};
309
310struct platform_device mxc_keypad_device = {
311 .name = "mxc-keypad",
312 .id = -1,
313 .num_resources = ARRAY_SIZE(mxc_keypad_resources),
314 .resource = mxc_keypad_resources,
315};
316
317static struct resource mxc_pwm_resources3[] = {
318 {
319 .start = 0x53fc8000,
320 .end = 0x53fcbfff,
321 .flags = IORESOURCE_MEM,
322 }, {
323 .start = 42,
324 .end = 42,
325 .flags = IORESOURCE_IRQ,
326 }
327};
328
329struct platform_device mxc_pwm_device3 = {
330 .name = "mxc_pwm",
331 .id = 3,
332 .num_resources = ARRAY_SIZE(mxc_pwm_resources3),
333 .resource = mxc_pwm_resources3,
334};
335
336static struct resource mxc_i2c_1_resources[] = {
337 {
338 .start = 0x43f80000,
339 .end = 0x43f83fff,
340 .flags = IORESOURCE_MEM,
341 }, {
342 .start = 3,
343 .end = 3,
344 .flags = IORESOURCE_IRQ,
345 }
346};
347
348struct platform_device mxc_i2c_device0 = {
349 .name = "imx-i2c",
350 .id = 0,
351 .num_resources = ARRAY_SIZE(mxc_i2c_1_resources),
352 .resource = mxc_i2c_1_resources,
353};
354
355static struct resource mxc_i2c_2_resources[] = {
356 {
357 .start = 0x43f98000,
358 .end = 0x43f9bfff,
359 .flags = IORESOURCE_MEM,
360 }, {
361 .start = 4,
362 .end = 4,
363 .flags = IORESOURCE_IRQ,
364 }
365};
366
367struct platform_device mxc_i2c_device1 = {
368 .name = "imx-i2c",
369 .id = 1,
370 .num_resources = ARRAY_SIZE(mxc_i2c_2_resources),
371 .resource = mxc_i2c_2_resources,
372};
373
374static struct resource mxc_i2c_3_resources[] = {
375 {
376 .start = 0x43f84000,
377 .end = 0x43f87fff,
378 .flags = IORESOURCE_MEM,
379 }, {
380 .start = 10,
381 .end = 10,
382 .flags = IORESOURCE_IRQ,
383 }
384};
385
386struct platform_device mxc_i2c_device2 = {
387 .name = "imx-i2c",
388 .id = 2,
389 .num_resources = ARRAY_SIZE(mxc_i2c_3_resources),
390 .resource = mxc_i2c_3_resources,
391};
392
393static struct mxc_gpio_port imx_gpio_ports[] = {
394 {
395 .chip.label = "gpio-0",
396 .base = (void __iomem *)MX25_GPIO1_BASE_ADDR_VIRT,
397 .irq = 52,
398 .virtual_irq_start = MXC_GPIO_IRQ_START,
399 }, {
400 .chip.label = "gpio-1",
401 .base = (void __iomem *)MX25_GPIO2_BASE_ADDR_VIRT,
402 .irq = 51,
403 .virtual_irq_start = MXC_GPIO_IRQ_START + 32,
404 }, {
405 .chip.label = "gpio-2",
406 .base = (void __iomem *)MX25_GPIO3_BASE_ADDR_VIRT,
407 .irq = 16,
408 .virtual_irq_start = MXC_GPIO_IRQ_START + 64,
409 }, {
410 .chip.label = "gpio-3",
411 .base = (void __iomem *)MX25_GPIO4_BASE_ADDR_VIRT,
412 .irq = 23,
413 .virtual_irq_start = MXC_GPIO_IRQ_START + 96,
414 }
415};
416
417int __init mxc_register_gpios(void)
418{
419 return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
420}
421
a759544f
BS
422static struct resource mx25_fec_resources[] = {
423 {
424 .start = MX25_FEC_BASE_ADDR,
425 .end = MX25_FEC_BASE_ADDR + 0xfff,
426 .flags = IORESOURCE_MEM,
427 },
428 {
429 .start = MX25_INT_FEC,
430 .end = MX25_INT_FEC,
431 .flags = IORESOURCE_IRQ,
432 },
433};
434
435struct platform_device mx25_fec_device = {
436 .name = "fec",
437 .id = 0,
438 .num_resources = ARRAY_SIZE(mx25_fec_resources),
439 .resource = mx25_fec_resources,
440};
27f59025
BS
441
442static struct resource mxc_nand_resources[] = {
443 {
444 .start = MX25_NFC_BASE_ADDR,
445 .end = MX25_NFC_BASE_ADDR + 0x1fff,
446 .flags = IORESOURCE_MEM,
447 },
448 {
449 .start = MX25_INT_NANDFC,
450 .end = MX25_INT_NANDFC,
451 .flags = IORESOURCE_IRQ,
452 },
453};
454
455struct platform_device mxc_nand_device = {
456 .name = "mxc_nand",
457 .id = 0,
458 .num_resources = ARRAY_SIZE(mxc_nand_resources),
459 .resource = mxc_nand_resources,
460};
dcbabbc1
BS
461
462static struct resource mx25_rtc_resources[] = {
463 {
464 .start = MX25_DRYICE_BASE_ADDR,
465 .end = MX25_DRYICE_BASE_ADDR + 0x40,
466 .flags = IORESOURCE_MEM,
467 },
468 {
469 .start = MX25_INT_DRYICE,
470 .flags = IORESOURCE_IRQ
471 },
472};
473
474struct platform_device mx25_rtc_device = {
475 .name = "imxdi_rtc",
476 .id = 0,
477 .num_resources = ARRAY_SIZE(mx25_rtc_resources),
478 .resource = mx25_rtc_resources,
479};
04a03e5f
BS
480
481static struct resource mx25_fb_resources[] = {
482 {
483 .start = MX25_LCDC_BASE_ADDR,
484 .end = MX25_LCDC_BASE_ADDR + 0xfff,
485 .flags = IORESOURCE_MEM,
486 },
487 {
488 .start = MX25_INT_LCDC,
489 .end = MX25_INT_LCDC,
490 .flags = IORESOURCE_IRQ,
491 },
492};
493
494struct platform_device mx25_fb_device = {
495 .name = "imx-fb",
496 .id = 0,
497 .resource = mx25_fb_resources,
498 .num_resources = ARRAY_SIZE(mx25_fb_resources),
499 .dev = {
500 .coherent_dma_mask = 0xFFFFFFFF,
501 },
502};
5ab0a275
WS
503
504static struct resource mxc_wdt_resources[] = {
505 {
506 .start = MX25_WDOG_BASE_ADDR,
507 .end = MX25_WDOG_BASE_ADDR + SZ_16K - 1,
508 .flags = IORESOURCE_MEM,
509 },
510};
511
512struct platform_device mxc_wdt = {
513 .name = "imx2-wdt",
514 .id = 0,
515 .num_resources = ARRAY_SIZE(mxc_wdt_resources),
516 .resource = mxc_wdt_resources,
517};