• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * linux/arch/arm/mach-at91/board-sam9261ek.c
3  *
4  *  Copyright (C) 2005 SAN People
5  *  Copyright (C) 2006 Atmel
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21 
22 #include <linux/types.h>
23 #include <linux/gpio.h>
24 #include <linux/init.h>
25 #include <linux/mm.h>
26 #include <linux/module.h>
27 #include <linux/platform_device.h>
28 #include <linux/spi/spi.h>
29 #include <linux/spi/ads7846.h>
30 #include <linux/spi/at73c213.h>
31 #include <linux/clk.h>
32 #include <linux/dm9000.h>
33 #include <linux/fb.h>
34 #include <linux/gpio_keys.h>
35 #include <linux/input.h>
36 
37 #include <video/atmel_lcdc.h>
38 
39 #include <asm/setup.h>
40 #include <asm/mach-types.h>
41 #include <asm/irq.h>
42 
43 #include <asm/mach/arch.h>
44 #include <asm/mach/map.h>
45 #include <asm/mach/irq.h>
46 
47 #include <mach/hardware.h>
48 #include <mach/at91sam9_smc.h>
49 #include <mach/system_rev.h>
50 
51 #include "at91_aic.h"
52 #include "board.h"
53 #include "sam9_smc.h"
54 #include "generic.h"
55 #include "gpio.h"
56 
57 
ek_init_early(void)58 static void __init ek_init_early(void)
59 {
60 	/* Initialize processor: 18.432 MHz crystal */
61 	at91_initialize(18432000);
62 }
63 
64 /*
65  * DM9000 ethernet device
66  */
67 #if defined(CONFIG_DM9000)
68 static struct resource dm9000_resource[] = {
69 	[0] = {
70 		.start	= AT91_CHIPSELECT_2,
71 		.end	= AT91_CHIPSELECT_2 + 3,
72 		.flags	= IORESOURCE_MEM
73 	},
74 	[1] = {
75 		.start	= AT91_CHIPSELECT_2 + 0x44,
76 		.end	= AT91_CHIPSELECT_2 + 0xFF,
77 		.flags	= IORESOURCE_MEM
78 	},
79 	[2] = {
80 		.flags	= IORESOURCE_IRQ
81 			| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
82 	}
83 };
84 
85 static struct dm9000_plat_data dm9000_platdata = {
86 	.flags		= DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
87 };
88 
89 static struct platform_device dm9000_device = {
90 	.name		= "dm9000",
91 	.id		= 0,
92 	.num_resources	= ARRAY_SIZE(dm9000_resource),
93 	.resource	= dm9000_resource,
94 	.dev		= {
95 		.platform_data	= &dm9000_platdata,
96 	}
97 };
98 
99 /*
100  * SMC timings for the DM9000.
101  * Note: These timings were calculated for MASTER_CLOCK = 100000000 according to the DM9000 timings.
102  */
103 static struct sam9_smc_config __initdata dm9000_smc_config = {
104 	.ncs_read_setup		= 0,
105 	.nrd_setup		= 2,
106 	.ncs_write_setup	= 0,
107 	.nwe_setup		= 2,
108 
109 	.ncs_read_pulse		= 8,
110 	.nrd_pulse		= 4,
111 	.ncs_write_pulse	= 8,
112 	.nwe_pulse		= 4,
113 
114 	.read_cycle		= 16,
115 	.write_cycle		= 16,
116 
117 	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16,
118 	.tdf_cycles		= 1,
119 };
120 
ek_add_device_dm9000(void)121 static void __init ek_add_device_dm9000(void)
122 {
123 	struct resource *r = &dm9000_resource[2];
124 
125 	/* Configure chip-select 2 (DM9000) */
126 	sam9_smc_configure(0, 2, &dm9000_smc_config);
127 
128 	/* Configure Reset signal as output */
129 	at91_set_gpio_output(AT91_PIN_PC10, 0);
130 
131 	/* Configure Interrupt pin as input, no pull-up */
132 	at91_set_gpio_input(AT91_PIN_PC11, 0);
133 
134 	r->start = r->end = gpio_to_irq(AT91_PIN_PC11);
135 	platform_device_register(&dm9000_device);
136 }
137 #else
ek_add_device_dm9000(void)138 static void __init ek_add_device_dm9000(void) {}
139 #endif /* CONFIG_DM9000 */
140 
141 
142 /*
143  * USB Host Port
144  */
145 static struct at91_usbh_data __initdata ek_usbh_data = {
146 	.ports		= 2,
147 	.vbus_pin	= {-EINVAL, -EINVAL},
148 	.overcurrent_pin= {-EINVAL, -EINVAL},
149 };
150 
151 
152 /*
153  * USB Device Port
154  */
155 static struct at91_udc_data __initdata ek_udc_data = {
156 	.vbus_pin	= AT91_PIN_PB29,
157 	.pullup_pin	= -EINVAL,		/* pull-up driven by UDC */
158 };
159 
160 
161 /*
162  * NAND flash
163  */
164 static struct mtd_partition __initdata ek_nand_partition[] = {
165 	{
166 		.name	= "Partition 1",
167 		.offset	= 0,
168 		.size	= SZ_256K,
169 	},
170 	{
171 		.name	= "Partition 2",
172 		.offset	= MTDPART_OFS_NXTBLK,
173 		.size	= MTDPART_SIZ_FULL,
174 	},
175 };
176 
177 static struct atmel_nand_data __initdata ek_nand_data = {
178 	.ale		= 22,
179 	.cle		= 21,
180 	.det_pin	= -EINVAL,
181 	.rdy_pin	= AT91_PIN_PC15,
182 	.enable_pin	= AT91_PIN_PC14,
183 	.ecc_mode	= NAND_ECC_SOFT,
184 	.on_flash_bbt	= 1,
185 	.parts		= ek_nand_partition,
186 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
187 };
188 
189 static struct sam9_smc_config __initdata ek_nand_smc_config = {
190 	.ncs_read_setup		= 0,
191 	.nrd_setup		= 1,
192 	.ncs_write_setup	= 0,
193 	.nwe_setup		= 1,
194 
195 	.ncs_read_pulse		= 3,
196 	.nrd_pulse		= 3,
197 	.ncs_write_pulse	= 3,
198 	.nwe_pulse		= 3,
199 
200 	.read_cycle		= 5,
201 	.write_cycle		= 5,
202 
203 	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
204 	.tdf_cycles		= 2,
205 };
206 
ek_add_device_nand(void)207 static void __init ek_add_device_nand(void)
208 {
209 	ek_nand_data.bus_width_16 = board_have_nand_16bit();
210 	/* setup bus-width (8 or 16) */
211 	if (ek_nand_data.bus_width_16)
212 		ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
213 	else
214 		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
215 
216 	/* configure chip-select 3 (NAND) */
217 	sam9_smc_configure(0, 3, &ek_nand_smc_config);
218 
219 	at91_add_device_nand(&ek_nand_data);
220 }
221 
222 /*
223  * SPI related devices
224  */
225 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
226 
227 /*
228  * ADS7846 Touchscreen
229  */
230 #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
231 
ads7843_pendown_state(void)232 static int ads7843_pendown_state(void)
233 {
234 	return !at91_get_gpio_value(AT91_PIN_PC2);	/* Touchscreen PENIRQ */
235 }
236 
237 static struct ads7846_platform_data ads_info = {
238 	.model			= 7843,
239 	.x_min			= 150,
240 	.x_max			= 3830,
241 	.y_min			= 190,
242 	.y_max			= 3830,
243 	.vref_delay_usecs	= 100,
244 	.x_plate_ohms		= 450,
245 	.y_plate_ohms		= 250,
246 	.pressure_max		= 15000,
247 	.debounce_max		= 1,
248 	.debounce_rep		= 0,
249 	.debounce_tol		= (~0),
250 	.get_pendown_state	= ads7843_pendown_state,
251 };
252 
ek_add_device_ts(void)253 static void __init ek_add_device_ts(void)
254 {
255 	at91_set_B_periph(AT91_PIN_PC2, 1);	/* External IRQ0, with pullup */
256 	at91_set_gpio_input(AT91_PIN_PA11, 1);	/* Touchscreen BUSY signal */
257 }
258 #else
ek_add_device_ts(void)259 static void __init ek_add_device_ts(void) {}
260 #endif
261 
262 /*
263  * Audio
264  */
265 static struct at73c213_board_info at73c213_data = {
266 	.ssc_id		= 1,
267 	.shortname	= "AT91SAM9261/9G10-EK external DAC",
268 };
269 
270 #if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
at73c213_set_clk(struct at73c213_board_info * info)271 static void __init at73c213_set_clk(struct at73c213_board_info *info)
272 {
273 	struct clk *pck2;
274 	struct clk *plla;
275 
276 	pck2 = clk_get(NULL, "pck2");
277 	plla = clk_get(NULL, "plla");
278 
279 	/* AT73C213 MCK Clock */
280 	at91_set_B_periph(AT91_PIN_PB31, 0);	/* PCK2 */
281 
282 	clk_set_parent(pck2, plla);
283 	clk_put(plla);
284 
285 	info->dac_clk = pck2;
286 }
287 #else
at73c213_set_clk(struct at73c213_board_info * info)288 static void __init at73c213_set_clk(struct at73c213_board_info *info) {}
289 #endif
290 
291 /*
292  * SPI devices
293  */
294 static struct spi_board_info ek_spi_devices[] = {
295 	{	/* DataFlash chip */
296 		.modalias	= "mtd_dataflash",
297 		.chip_select	= 0,
298 		.max_speed_hz	= 15 * 1000 * 1000,
299 		.bus_num	= 0,
300 	},
301 #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
302 	{
303 		.modalias	= "ads7846",
304 		.chip_select	= 2,
305 		.max_speed_hz	= 125000 * 26,	/* (max sample rate @ 3V) * (cmd + data + overhead) */
306 		.bus_num	= 0,
307 		.platform_data	= &ads_info,
308 		.irq		= NR_IRQS_LEGACY + AT91SAM9261_ID_IRQ0,
309 		.controller_data = (void *) AT91_PIN_PA28,	/* CS pin */
310 	},
311 #endif
312 #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
313 	{	/* DataFlash card - jumper (J12) configurable to CS3 or CS0 */
314 		.modalias	= "mtd_dataflash",
315 		.chip_select	= 3,
316 		.max_speed_hz	= 15 * 1000 * 1000,
317 		.bus_num	= 0,
318 	},
319 #elif defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
320 	{	/* AT73C213 DAC */
321 		.modalias	= "at73c213",
322 		.chip_select	= 3,
323 		.max_speed_hz	= 10 * 1000 * 1000,
324 		.bus_num	= 0,
325 		.mode		= SPI_MODE_1,
326 		.platform_data	= &at73c213_data,
327 		.controller_data = (void*) AT91_PIN_PA29,	/* default for CS3 is PA6, but it must be PA29 */
328 	},
329 #endif
330 };
331 
332 #else /* CONFIG_SPI_ATMEL_* */
333 /* spi0 and mmc/sd share the same PIO pins: cannot be used at the same time */
334 
335 /*
336  * MCI (SD/MMC)
337  * det_pin, wp_pin and vcc_pin are not connected
338  */
339 static struct mci_platform_data __initdata mci0_data = {
340 	.slot[0] = {
341 		.bus_width	= 4,
342 		.detect_pin	= -EINVAL,
343 		.wp_pin		= -EINVAL,
344 	},
345 };
346 
347 #endif /* CONFIG_SPI_ATMEL_* */
348 
349 
350 /*
351  * LCD Controller
352  */
353 #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
354 
355 #if defined(CONFIG_FB_ATMEL_STN)
356 
357 /* STN */
358 static struct fb_videomode at91_stn_modes[] = {
359         {
360 		.name           = "SP06Q002 @ 75",
361 		.refresh        = 75,
362 		.xres           = 320,          .yres           = 240,
363 		.pixclock       = KHZ2PICOS(1440),
364 
365 		.left_margin    = 1,            .right_margin   = 1,
366 		.upper_margin   = 0,            .lower_margin   = 0,
367 		.hsync_len      = 1,            .vsync_len      = 1,
368 
369 		.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
370 		.vmode          = FB_VMODE_NONINTERLACED,
371         },
372 };
373 
374 static struct fb_monspecs at91fb_default_stn_monspecs = {
375         .manufacturer   = "HIT",
376         .monitor        = "SP06Q002",
377 
378         .modedb         = at91_stn_modes,
379         .modedb_len     = ARRAY_SIZE(at91_stn_modes),
380         .hfmin          = 15000,
381         .hfmax          = 64000,
382         .vfmin          = 50,
383         .vfmax          = 150,
384 };
385 
386 #define AT91SAM9261_DEFAULT_STN_LCDCON2	(ATMEL_LCDC_MEMOR_LITTLE \
387 					| ATMEL_LCDC_DISTYPE_STNMONO \
388 					| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE \
389 					| ATMEL_LCDC_IFWIDTH_4 \
390 					| ATMEL_LCDC_SCANMOD_SINGLE)
391 
at91_lcdc_stn_power_control(struct atmel_lcdfb_pdata * pdata,int on)392 static void at91_lcdc_stn_power_control(struct atmel_lcdfb_pdata *pdata, int on)
393 {
394 	/* backlight */
395 	if (on) {	/* power up */
396 		at91_set_gpio_value(AT91_PIN_PC14, 0);
397 		at91_set_gpio_value(AT91_PIN_PC15, 0);
398 	} else {	/* power down */
399 		at91_set_gpio_value(AT91_PIN_PC14, 1);
400 		at91_set_gpio_value(AT91_PIN_PC15, 1);
401 	}
402 }
403 
404 static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
405 	.default_bpp			= 1,
406 	.default_dmacon			= ATMEL_LCDC_DMAEN,
407 	.default_lcdcon2		= AT91SAM9261_DEFAULT_STN_LCDCON2,
408 	.default_monspecs		= &at91fb_default_stn_monspecs,
409 	.atmel_lcdfb_power_control	= at91_lcdc_stn_power_control,
410 	.guard_time			= 1,
411 };
412 
413 #else
414 
415 /* TFT */
416 static struct fb_videomode at91_tft_vga_modes[] = {
417 	{
418 	        .name           = "TX09D50VM1CCA @ 60",
419 		.refresh	= 60,
420 		.xres		= 240,		.yres		= 320,
421 		.pixclock	= KHZ2PICOS(4965),
422 
423 		.left_margin	= 1,		.right_margin	= 33,
424 		.upper_margin	= 1,		.lower_margin	= 0,
425 		.hsync_len	= 5,		.vsync_len	= 1,
426 
427 		.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
428 		.vmode		= FB_VMODE_NONINTERLACED,
429 	},
430 };
431 
432 static struct fb_monspecs at91fb_default_tft_monspecs = {
433 	.manufacturer	= "HIT",
434 	.monitor        = "TX09D50VM1CCA",
435 
436 	.modedb		= at91_tft_vga_modes,
437 	.modedb_len	= ARRAY_SIZE(at91_tft_vga_modes),
438 	.hfmin		= 15000,
439 	.hfmax		= 64000,
440 	.vfmin		= 50,
441 	.vfmax		= 150,
442 };
443 
444 #define AT91SAM9261_DEFAULT_TFT_LCDCON2	(ATMEL_LCDC_MEMOR_LITTLE \
445 					| ATMEL_LCDC_DISTYPE_TFT    \
446 					| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
447 
at91_lcdc_tft_power_control(struct atmel_lcdfb_pdata * pdata,int on)448 static void at91_lcdc_tft_power_control(struct atmel_lcdfb_pdata *pdata, int on)
449 {
450 	if (on)
451 		at91_set_gpio_value(AT91_PIN_PA12, 0);	/* power up */
452 	else
453 		at91_set_gpio_value(AT91_PIN_PA12, 1);	/* power down */
454 }
455 
456 static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
457 	.lcdcon_is_backlight		= true,
458 	.default_bpp			= 16,
459 	.default_dmacon			= ATMEL_LCDC_DMAEN,
460 	.default_lcdcon2		= AT91SAM9261_DEFAULT_TFT_LCDCON2,
461 	.default_monspecs		= &at91fb_default_tft_monspecs,
462 	.atmel_lcdfb_power_control	= at91_lcdc_tft_power_control,
463 	.guard_time			= 1,
464 };
465 #endif
466 
467 #else
468 static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
469 #endif
470 
471 
472 /*
473  * GPIO Buttons
474  */
475 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
476 static struct gpio_keys_button ek_buttons[] = {
477 	{
478 		.gpio		= AT91_PIN_PA27,
479 		.code		= BTN_0,
480 		.desc		= "Button 0",
481 		.active_low	= 1,
482 		.wakeup		= 1,
483 	},
484 	{
485 		.gpio		= AT91_PIN_PA26,
486 		.code		= BTN_1,
487 		.desc		= "Button 1",
488 		.active_low	= 1,
489 		.wakeup		= 1,
490 	},
491 	{
492 		.gpio		= AT91_PIN_PA25,
493 		.code		= BTN_2,
494 		.desc		= "Button 2",
495 		.active_low	= 1,
496 		.wakeup		= 1,
497 	},
498 	{
499 		.gpio		= AT91_PIN_PA24,
500 		.code		= BTN_3,
501 		.desc		= "Button 3",
502 		.active_low	= 1,
503 		.wakeup		= 1,
504 	}
505 };
506 
507 static struct gpio_keys_platform_data ek_button_data = {
508 	.buttons	= ek_buttons,
509 	.nbuttons	= ARRAY_SIZE(ek_buttons),
510 };
511 
512 static struct platform_device ek_button_device = {
513 	.name		= "gpio-keys",
514 	.id		= -1,
515 	.num_resources	= 0,
516 	.dev		= {
517 		.platform_data	= &ek_button_data,
518 	}
519 };
520 
ek_add_device_buttons(void)521 static void __init ek_add_device_buttons(void)
522 {
523 	at91_set_gpio_input(AT91_PIN_PA27, 1);	/* btn0 */
524 	at91_set_deglitch(AT91_PIN_PA27, 1);
525 	at91_set_gpio_input(AT91_PIN_PA26, 1);	/* btn1 */
526 	at91_set_deglitch(AT91_PIN_PA26, 1);
527 	at91_set_gpio_input(AT91_PIN_PA25, 1);	/* btn2 */
528 	at91_set_deglitch(AT91_PIN_PA25, 1);
529 	at91_set_gpio_input(AT91_PIN_PA24, 1);	/* btn3 */
530 	at91_set_deglitch(AT91_PIN_PA24, 1);
531 
532 	platform_device_register(&ek_button_device);
533 }
534 #else
ek_add_device_buttons(void)535 static void __init ek_add_device_buttons(void) {}
536 #endif
537 
538 /*
539  * LEDs
540  */
541 static struct gpio_led ek_leds[] = {
542 	{	/* "bottom" led, green, userled1 to be defined */
543 		.name			= "ds7",
544 		.gpio			= AT91_PIN_PA14,
545 		.active_low		= 1,
546 		.default_trigger	= "none",
547 	},
548 	{	/* "top" led, green, userled2 to be defined */
549 		.name			= "ds8",
550 		.gpio			= AT91_PIN_PA13,
551 		.active_low		= 1,
552 		.default_trigger	= "none",
553 	},
554 	{	/* "power" led, yellow */
555 		.name			= "ds1",
556 		.gpio			= AT91_PIN_PA23,
557 		.default_trigger	= "heartbeat",
558 	}
559 };
560 
ek_board_init(void)561 static void __init ek_board_init(void)
562 {
563 	at91_register_devices();
564 
565 	/* Serial */
566 	/* DBGU on ttyS0. (Rx & Tx only) */
567 	at91_register_uart(0, 0, 0);
568 	at91_add_device_serial();
569 
570 	if (cpu_is_at91sam9g10())
571 		ek_lcdc_data.lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB;
572 
573 	/* USB Host */
574 	at91_add_device_usbh(&ek_usbh_data);
575 	/* USB Device */
576 	at91_add_device_udc(&ek_udc_data);
577 	/* I2C */
578 	at91_add_device_i2c(NULL, 0);
579 	/* NAND */
580 	ek_add_device_nand();
581 	/* DM9000 ethernet */
582 	ek_add_device_dm9000();
583 
584 	/* spi0 and mmc/sd share the same PIO pins */
585 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
586 	/* SPI */
587 	at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
588 	/* Touchscreen */
589 	ek_add_device_ts();
590 	/* SSC (to AT73C213) */
591 	at73c213_set_clk(&at73c213_data);
592 	at91_add_device_ssc(AT91SAM9261_ID_SSC1, ATMEL_SSC_TX);
593 #else
594 	/* MMC */
595 	at91_add_device_mci(0, &mci0_data);
596 #endif
597 	/* LCD Controller */
598 	at91_add_device_lcdc(&ek_lcdc_data);
599 	/* Push Buttons */
600 	ek_add_device_buttons();
601 	/* LEDs */
602 	at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
603 }
604 
605 MACHINE_START(AT91SAM9261EK, "Atmel AT91SAM9261-EK")
606 	/* Maintainer: Atmel */
607 	.init_time	= at91_init_time,
608 	.map_io		= at91_map_io,
609 	.handle_irq	= at91_aic_handle_irq,
610 	.init_early	= ek_init_early,
611 	.init_irq	= at91_init_irq_default,
612 	.init_machine	= ek_board_init,
613 MACHINE_END
614 
615 MACHINE_START(AT91SAM9G10EK, "Atmel AT91SAM9G10-EK")
616 	/* Maintainer: Atmel */
617 	.init_time	= at91_init_time,
618 	.map_io		= at91_map_io,
619 	.handle_irq	= at91_aic_handle_irq,
620 	.init_early	= ek_init_early,
621 	.init_irq	= at91_init_irq_default,
622 	.init_machine	= ek_board_init,
623 MACHINE_END
624