2 * arch/arm/mach-at91/at91cap9_devices.c
4 * Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
5 * Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
6 * Copyright (C) 2007 Atmel Corporation.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
14 #include <asm/mach/arch.h>
15 #include <asm/mach/map.h>
17 #include <linux/dma-mapping.h>
18 #include <linux/platform_device.h>
19 #include <linux/i2c-gpio.h>
21 #include <video/atmel_lcdc.h>
23 #include <mach/board.h>
24 #include <mach/gpio.h>
25 #include <mach/at91cap9.h>
26 #include <mach/at91cap9_matrix.h>
27 #include <mach/at91sam9_smc.h>
32 /* --------------------------------------------------------------------
34 * -------------------------------------------------------------------- */
36 #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
37 static u64 ohci_dmamask = DMA_BIT_MASK(32);
38 static struct at91_usbh_data usbh_data;
40 static struct resource usbh_resources[] = {
42 .start = AT91CAP9_UHP_BASE,
43 .end = AT91CAP9_UHP_BASE + SZ_1M - 1,
44 .flags = IORESOURCE_MEM,
47 .start = AT91CAP9_ID_UHP,
48 .end = AT91CAP9_ID_UHP,
49 .flags = IORESOURCE_IRQ,
53 static struct platform_device at91_usbh_device = {
57 .dma_mask = &ohci_dmamask,
58 .coherent_dma_mask = DMA_BIT_MASK(32),
59 .platform_data = &usbh_data,
61 .resource = usbh_resources,
62 .num_resources = ARRAY_SIZE(usbh_resources),
65 void __init at91_add_device_usbh(struct at91_usbh_data *data)
72 /* Enable VBus control for UHP ports */
73 for (i = 0; i < data->ports; i++) {
74 if (data->vbus_pin[i])
75 at91_set_gpio_output(data->vbus_pin[i], 0);
79 platform_device_register(&at91_usbh_device);
82 void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
86 /* --------------------------------------------------------------------
87 * USB HS Device (Gadget)
88 * -------------------------------------------------------------------- */
90 #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
92 static struct resource usba_udc_resources[] = {
94 .start = AT91CAP9_UDPHS_FIFO,
95 .end = AT91CAP9_UDPHS_FIFO + SZ_512K - 1,
96 .flags = IORESOURCE_MEM,
99 .start = AT91CAP9_BASE_UDPHS,
100 .end = AT91CAP9_BASE_UDPHS + SZ_1K - 1,
101 .flags = IORESOURCE_MEM,
104 .start = AT91CAP9_ID_UDPHS,
105 .end = AT91CAP9_ID_UDPHS,
106 .flags = IORESOURCE_IRQ,
110 #define EP(nam, idx, maxpkt, maxbk, dma, isoc) \
114 .fifo_size = maxpkt, \
120 static struct usba_ep_data usba_udc_ep[] = {
121 EP("ep0", 0, 64, 1, 0, 0),
122 EP("ep1", 1, 1024, 3, 1, 1),
123 EP("ep2", 2, 1024, 3, 1, 1),
124 EP("ep3", 3, 1024, 2, 1, 1),
125 EP("ep4", 4, 1024, 2, 1, 1),
126 EP("ep5", 5, 1024, 2, 1, 0),
127 EP("ep6", 6, 1024, 2, 1, 0),
128 EP("ep7", 7, 1024, 2, 0, 0),
134 * pdata doesn't have room for any endpoints, so we need to
135 * append room for the ones we need right after it.
138 struct usba_platform_data pdata;
139 struct usba_ep_data ep[8];
142 static struct platform_device at91_usba_udc_device = {
143 .name = "atmel_usba_udc",
146 .platform_data = &usba_udc_data.pdata,
148 .resource = usba_udc_resources,
149 .num_resources = ARRAY_SIZE(usba_udc_resources),
152 void __init at91_add_device_usba(struct usba_platform_data *data)
154 at91_sys_write(AT91_MATRIX_UDPHS, AT91_MATRIX_SELECT_UDPHS |
155 AT91_MATRIX_UDPHS_BYPASS_LOCK);
158 * Invalid pins are 0 on AT91, but the usba driver is shared
159 * with AVR32, which use negative values instead. Once/if
160 * gpio_is_valid() is ported to AT91, revisit this code.
162 usba_udc_data.pdata.vbus_pin = -EINVAL;
163 usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep);
164 memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));;
166 if (data && data->vbus_pin > 0) {
167 at91_set_gpio_input(data->vbus_pin, 0);
168 at91_set_deglitch(data->vbus_pin, 1);
169 usba_udc_data.pdata.vbus_pin = data->vbus_pin;
172 /* Pullup pin is handled internally by USB device peripheral */
175 at91_clock_associate("utmi_clk", &at91_usba_udc_device.dev, "hclk");
176 at91_clock_associate("udphs_clk", &at91_usba_udc_device.dev, "pclk");
178 platform_device_register(&at91_usba_udc_device);
181 void __init at91_add_device_usba(struct usba_platform_data *data) {}
185 /* --------------------------------------------------------------------
187 * -------------------------------------------------------------------- */
189 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
190 static u64 eth_dmamask = DMA_BIT_MASK(32);
191 static struct at91_eth_data eth_data;
193 static struct resource eth_resources[] = {
195 .start = AT91CAP9_BASE_EMAC,
196 .end = AT91CAP9_BASE_EMAC + SZ_16K - 1,
197 .flags = IORESOURCE_MEM,
200 .start = AT91CAP9_ID_EMAC,
201 .end = AT91CAP9_ID_EMAC,
202 .flags = IORESOURCE_IRQ,
206 static struct platform_device at91cap9_eth_device = {
210 .dma_mask = ð_dmamask,
211 .coherent_dma_mask = DMA_BIT_MASK(32),
212 .platform_data = ð_data,
214 .resource = eth_resources,
215 .num_resources = ARRAY_SIZE(eth_resources),
218 void __init at91_add_device_eth(struct at91_eth_data *data)
223 if (data->phy_irq_pin) {
224 at91_set_gpio_input(data->phy_irq_pin, 0);
225 at91_set_deglitch(data->phy_irq_pin, 1);
228 /* Pins used for MII and RMII */
229 at91_set_A_periph(AT91_PIN_PB21, 0); /* ETXCK_EREFCK */
230 at91_set_A_periph(AT91_PIN_PB22, 0); /* ERXDV */
231 at91_set_A_periph(AT91_PIN_PB25, 0); /* ERX0 */
232 at91_set_A_periph(AT91_PIN_PB26, 0); /* ERX1 */
233 at91_set_A_periph(AT91_PIN_PB27, 0); /* ERXER */
234 at91_set_A_periph(AT91_PIN_PB28, 0); /* ETXEN */
235 at91_set_A_periph(AT91_PIN_PB23, 0); /* ETX0 */
236 at91_set_A_periph(AT91_PIN_PB24, 0); /* ETX1 */
237 at91_set_A_periph(AT91_PIN_PB30, 0); /* EMDIO */
238 at91_set_A_periph(AT91_PIN_PB29, 0); /* EMDC */
240 if (!data->is_rmii) {
241 at91_set_B_periph(AT91_PIN_PC25, 0); /* ECRS */
242 at91_set_B_periph(AT91_PIN_PC26, 0); /* ECOL */
243 at91_set_B_periph(AT91_PIN_PC22, 0); /* ERX2 */
244 at91_set_B_periph(AT91_PIN_PC23, 0); /* ERX3 */
245 at91_set_B_periph(AT91_PIN_PC27, 0); /* ERXCK */
246 at91_set_B_periph(AT91_PIN_PC20, 0); /* ETX2 */
247 at91_set_B_periph(AT91_PIN_PC21, 0); /* ETX3 */
248 at91_set_B_periph(AT91_PIN_PC24, 0); /* ETXER */
252 platform_device_register(&at91cap9_eth_device);
255 void __init at91_add_device_eth(struct at91_eth_data *data) {}
259 /* --------------------------------------------------------------------
261 * -------------------------------------------------------------------- */
263 #if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
264 static u64 mmc_dmamask = DMA_BIT_MASK(32);
265 static struct at91_mmc_data mmc0_data, mmc1_data;
267 static struct resource mmc0_resources[] = {
269 .start = AT91CAP9_BASE_MCI0,
270 .end = AT91CAP9_BASE_MCI0 + SZ_16K - 1,
271 .flags = IORESOURCE_MEM,
274 .start = AT91CAP9_ID_MCI0,
275 .end = AT91CAP9_ID_MCI0,
276 .flags = IORESOURCE_IRQ,
280 static struct platform_device at91cap9_mmc0_device = {
284 .dma_mask = &mmc_dmamask,
285 .coherent_dma_mask = DMA_BIT_MASK(32),
286 .platform_data = &mmc0_data,
288 .resource = mmc0_resources,
289 .num_resources = ARRAY_SIZE(mmc0_resources),
292 static struct resource mmc1_resources[] = {
294 .start = AT91CAP9_BASE_MCI1,
295 .end = AT91CAP9_BASE_MCI1 + SZ_16K - 1,
296 .flags = IORESOURCE_MEM,
299 .start = AT91CAP9_ID_MCI1,
300 .end = AT91CAP9_ID_MCI1,
301 .flags = IORESOURCE_IRQ,
305 static struct platform_device at91cap9_mmc1_device = {
309 .dma_mask = &mmc_dmamask,
310 .coherent_dma_mask = DMA_BIT_MASK(32),
311 .platform_data = &mmc1_data,
313 .resource = mmc1_resources,
314 .num_resources = ARRAY_SIZE(mmc1_resources),
317 void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
324 at91_set_gpio_input(data->det_pin, 1);
325 at91_set_deglitch(data->det_pin, 1);
328 at91_set_gpio_input(data->wp_pin, 1);
330 at91_set_gpio_output(data->vcc_pin, 0);
332 if (mmc_id == 0) { /* MCI0 */
334 at91_set_A_periph(AT91_PIN_PA2, 0);
337 at91_set_A_periph(AT91_PIN_PA1, 1);
339 /* DAT0, maybe DAT1..DAT3 */
340 at91_set_A_periph(AT91_PIN_PA0, 1);
342 at91_set_A_periph(AT91_PIN_PA3, 1);
343 at91_set_A_periph(AT91_PIN_PA4, 1);
344 at91_set_A_periph(AT91_PIN_PA5, 1);
348 at91_clock_associate("mci0_clk", &at91cap9_mmc0_device.dev, "mci_clk");
349 platform_device_register(&at91cap9_mmc0_device);
352 at91_set_A_periph(AT91_PIN_PA16, 0);
355 at91_set_A_periph(AT91_PIN_PA17, 1);
357 /* DAT0, maybe DAT1..DAT3 */
358 at91_set_A_periph(AT91_PIN_PA18, 1);
360 at91_set_A_periph(AT91_PIN_PA19, 1);
361 at91_set_A_periph(AT91_PIN_PA20, 1);
362 at91_set_A_periph(AT91_PIN_PA21, 1);
366 at91_clock_associate("mci1_clk", &at91cap9_mmc1_device.dev, "mci_clk");
367 platform_device_register(&at91cap9_mmc1_device);
371 void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
375 /* --------------------------------------------------------------------
377 * -------------------------------------------------------------------- */
379 #if defined(CONFIG_MTD_NAND_ATMEL) || defined(CONFIG_MTD_NAND_ATMEL_MODULE)
380 static struct atmel_nand_data nand_data;
382 #define NAND_BASE AT91_CHIPSELECT_3
384 static struct resource nand_resources[] = {
387 .end = NAND_BASE + SZ_256M - 1,
388 .flags = IORESOURCE_MEM,
391 .start = AT91_BASE_SYS + AT91_ECC,
392 .end = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
393 .flags = IORESOURCE_MEM,
397 static struct platform_device at91cap9_nand_device = {
398 .name = "atmel_nand",
401 .platform_data = &nand_data,
403 .resource = nand_resources,
404 .num_resources = ARRAY_SIZE(nand_resources),
407 void __init at91_add_device_nand(struct atmel_nand_data *data)
409 unsigned long csa, mode;
414 csa = at91_sys_read(AT91_MATRIX_EBICSA);
415 at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA | AT91_MATRIX_EBI_VDDIOMSEL_3_3V);
417 /* set the bus interface characteristics */
418 at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(1)
419 | AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(1));
421 at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(6)
422 | AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_(6));
424 at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(8) | AT91_SMC_NRDCYCLE_(8));
426 if (data->bus_width_16)
427 mode = AT91_SMC_DBW_16;
429 mode = AT91_SMC_DBW_8;
430 at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1));
433 if (data->enable_pin)
434 at91_set_gpio_output(data->enable_pin, 1);
438 at91_set_gpio_input(data->rdy_pin, 1);
440 /* card detect pin */
442 at91_set_gpio_input(data->det_pin, 1);
445 platform_device_register(&at91cap9_nand_device);
448 void __init at91_add_device_nand(struct atmel_nand_data *data) {}
452 /* --------------------------------------------------------------------
454 * -------------------------------------------------------------------- */
457 * Prefer the GPIO code since the TWI controller isn't robust
458 * (gets overruns and underruns under load) and can only issue
459 * repeated STARTs in one scenario (the driver doesn't yet handle them).
461 #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
463 static struct i2c_gpio_platform_data pdata = {
464 .sda_pin = AT91_PIN_PB4,
465 .sda_is_open_drain = 1,
466 .scl_pin = AT91_PIN_PB5,
467 .scl_is_open_drain = 1,
468 .udelay = 2, /* ~100 kHz */
471 static struct platform_device at91cap9_twi_device = {
474 .dev.platform_data = &pdata,
477 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
479 at91_set_GPIO_periph(AT91_PIN_PB4, 1); /* TWD (SDA) */
480 at91_set_multi_drive(AT91_PIN_PB4, 1);
482 at91_set_GPIO_periph(AT91_PIN_PB5, 1); /* TWCK (SCL) */
483 at91_set_multi_drive(AT91_PIN_PB5, 1);
485 i2c_register_board_info(0, devices, nr_devices);
486 platform_device_register(&at91cap9_twi_device);
489 #elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
491 static struct resource twi_resources[] = {
493 .start = AT91CAP9_BASE_TWI,
494 .end = AT91CAP9_BASE_TWI + SZ_16K - 1,
495 .flags = IORESOURCE_MEM,
498 .start = AT91CAP9_ID_TWI,
499 .end = AT91CAP9_ID_TWI,
500 .flags = IORESOURCE_IRQ,
504 static struct platform_device at91cap9_twi_device = {
507 .resource = twi_resources,
508 .num_resources = ARRAY_SIZE(twi_resources),
511 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
513 /* pins used for TWI interface */
514 at91_set_B_periph(AT91_PIN_PB4, 0); /* TWD */
515 at91_set_multi_drive(AT91_PIN_PB4, 1);
517 at91_set_B_periph(AT91_PIN_PB5, 0); /* TWCK */
518 at91_set_multi_drive(AT91_PIN_PB5, 1);
520 i2c_register_board_info(0, devices, nr_devices);
521 platform_device_register(&at91cap9_twi_device);
524 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
527 /* --------------------------------------------------------------------
529 * -------------------------------------------------------------------- */
531 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
532 static u64 spi_dmamask = DMA_BIT_MASK(32);
534 static struct resource spi0_resources[] = {
536 .start = AT91CAP9_BASE_SPI0,
537 .end = AT91CAP9_BASE_SPI0 + SZ_16K - 1,
538 .flags = IORESOURCE_MEM,
541 .start = AT91CAP9_ID_SPI0,
542 .end = AT91CAP9_ID_SPI0,
543 .flags = IORESOURCE_IRQ,
547 static struct platform_device at91cap9_spi0_device = {
551 .dma_mask = &spi_dmamask,
552 .coherent_dma_mask = DMA_BIT_MASK(32),
554 .resource = spi0_resources,
555 .num_resources = ARRAY_SIZE(spi0_resources),
558 static const unsigned spi0_standard_cs[4] = { AT91_PIN_PA5, AT91_PIN_PA3, AT91_PIN_PD0, AT91_PIN_PD1 };
560 static struct resource spi1_resources[] = {
562 .start = AT91CAP9_BASE_SPI1,
563 .end = AT91CAP9_BASE_SPI1 + SZ_16K - 1,
564 .flags = IORESOURCE_MEM,
567 .start = AT91CAP9_ID_SPI1,
568 .end = AT91CAP9_ID_SPI1,
569 .flags = IORESOURCE_IRQ,
573 static struct platform_device at91cap9_spi1_device = {
577 .dma_mask = &spi_dmamask,
578 .coherent_dma_mask = DMA_BIT_MASK(32),
580 .resource = spi1_resources,
581 .num_resources = ARRAY_SIZE(spi1_resources),
584 static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB15, AT91_PIN_PB16, AT91_PIN_PB17, AT91_PIN_PB18 };
586 void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
589 unsigned long cs_pin;
590 short enable_spi0 = 0;
591 short enable_spi1 = 0;
593 /* Choose SPI chip-selects */
594 for (i = 0; i < nr_devices; i++) {
595 if (devices[i].controller_data)
596 cs_pin = (unsigned long) devices[i].controller_data;
597 else if (devices[i].bus_num == 0)
598 cs_pin = spi0_standard_cs[devices[i].chip_select];
600 cs_pin = spi1_standard_cs[devices[i].chip_select];
602 if (devices[i].bus_num == 0)
607 /* enable chip-select pin */
608 at91_set_gpio_output(cs_pin, 1);
610 /* pass chip-select pin to driver */
611 devices[i].controller_data = (void *) cs_pin;
614 spi_register_board_info(devices, nr_devices);
616 /* Configure SPI bus(es) */
618 at91_set_B_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */
619 at91_set_B_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */
620 at91_set_B_periph(AT91_PIN_PA2, 0); /* SPI0_SPCK */
622 at91_clock_associate("spi0_clk", &at91cap9_spi0_device.dev, "spi_clk");
623 platform_device_register(&at91cap9_spi0_device);
626 at91_set_A_periph(AT91_PIN_PB12, 0); /* SPI1_MISO */
627 at91_set_A_periph(AT91_PIN_PB13, 0); /* SPI1_MOSI */
628 at91_set_A_periph(AT91_PIN_PB14, 0); /* SPI1_SPCK */
630 at91_clock_associate("spi1_clk", &at91cap9_spi1_device.dev, "spi_clk");
631 platform_device_register(&at91cap9_spi1_device);
635 void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}
639 /* --------------------------------------------------------------------
640 * Timer/Counter block
641 * -------------------------------------------------------------------- */
643 #ifdef CONFIG_ATMEL_TCLIB
645 static struct resource tcb_resources[] = {
647 .start = AT91CAP9_BASE_TCB0,
648 .end = AT91CAP9_BASE_TCB0 + SZ_16K - 1,
649 .flags = IORESOURCE_MEM,
652 .start = AT91CAP9_ID_TCB,
653 .end = AT91CAP9_ID_TCB,
654 .flags = IORESOURCE_IRQ,
658 static struct platform_device at91cap9_tcb_device = {
661 .resource = tcb_resources,
662 .num_resources = ARRAY_SIZE(tcb_resources),
665 static void __init at91_add_device_tc(void)
667 /* this chip has one clock and irq for all three TC channels */
668 at91_clock_associate("tcb_clk", &at91cap9_tcb_device.dev, "t0_clk");
669 platform_device_register(&at91cap9_tcb_device);
672 static void __init at91_add_device_tc(void) { }
676 /* --------------------------------------------------------------------
678 * -------------------------------------------------------------------- */
680 static struct resource rtt_resources[] = {
682 .start = AT91_BASE_SYS + AT91_RTT,
683 .end = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
684 .flags = IORESOURCE_MEM,
688 static struct platform_device at91cap9_rtt_device = {
691 .resource = rtt_resources,
692 .num_resources = ARRAY_SIZE(rtt_resources),
695 static void __init at91_add_device_rtt(void)
697 platform_device_register(&at91cap9_rtt_device);
701 /* --------------------------------------------------------------------
703 * -------------------------------------------------------------------- */
705 #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
706 static struct platform_device at91cap9_wdt_device = {
712 static void __init at91_add_device_watchdog(void)
714 platform_device_register(&at91cap9_wdt_device);
717 static void __init at91_add_device_watchdog(void) {}
721 /* --------------------------------------------------------------------
723 * --------------------------------------------------------------------*/
725 #if defined(CONFIG_ATMEL_PWM)
728 static struct resource pwm_resources[] = {
730 .start = AT91CAP9_BASE_PWMC,
731 .end = AT91CAP9_BASE_PWMC + SZ_16K - 1,
732 .flags = IORESOURCE_MEM,
735 .start = AT91CAP9_ID_PWMC,
736 .end = AT91CAP9_ID_PWMC,
737 .flags = IORESOURCE_IRQ,
741 static struct platform_device at91cap9_pwm0_device = {
745 .platform_data = &pwm_mask,
747 .resource = pwm_resources,
748 .num_resources = ARRAY_SIZE(pwm_resources),
751 void __init at91_add_device_pwm(u32 mask)
753 if (mask & (1 << AT91_PWM0))
754 at91_set_A_periph(AT91_PIN_PB19, 1); /* enable PWM0 */
756 if (mask & (1 << AT91_PWM1))
757 at91_set_B_periph(AT91_PIN_PB8, 1); /* enable PWM1 */
759 if (mask & (1 << AT91_PWM2))
760 at91_set_B_periph(AT91_PIN_PC29, 1); /* enable PWM2 */
762 if (mask & (1 << AT91_PWM3))
763 at91_set_B_periph(AT91_PIN_PA11, 1); /* enable PWM3 */
767 platform_device_register(&at91cap9_pwm0_device);
770 void __init at91_add_device_pwm(u32 mask) {}
775 /* --------------------------------------------------------------------
777 * -------------------------------------------------------------------- */
779 #if defined(CONFIG_SND_AT91_AC97) || defined(CONFIG_SND_AT91_AC97_MODULE)
780 static u64 ac97_dmamask = DMA_BIT_MASK(32);
781 static struct atmel_ac97_data ac97_data;
783 static struct resource ac97_resources[] = {
785 .start = AT91CAP9_BASE_AC97C,
786 .end = AT91CAP9_BASE_AC97C + SZ_16K - 1,
787 .flags = IORESOURCE_MEM,
790 .start = AT91CAP9_ID_AC97C,
791 .end = AT91CAP9_ID_AC97C,
792 .flags = IORESOURCE_IRQ,
796 static struct platform_device at91cap9_ac97_device = {
800 .dma_mask = &ac97_dmamask,
801 .coherent_dma_mask = DMA_BIT_MASK(32),
802 .platform_data = &ac97_data,
804 .resource = ac97_resources,
805 .num_resources = ARRAY_SIZE(ac97_resources),
808 void __init at91_add_device_ac97(struct atmel_ac97_data *data)
813 at91_set_A_periph(AT91_PIN_PA6, 0); /* AC97FS */
814 at91_set_A_periph(AT91_PIN_PA7, 0); /* AC97CK */
815 at91_set_A_periph(AT91_PIN_PA8, 0); /* AC97TX */
816 at91_set_A_periph(AT91_PIN_PA9, 0); /* AC97RX */
820 at91_set_gpio_output(data->reset_pin, 0);
823 platform_device_register(&at91cap9_ac97_device);
826 void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
830 /* --------------------------------------------------------------------
832 * -------------------------------------------------------------------- */
834 #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
835 static u64 lcdc_dmamask = DMA_BIT_MASK(32);
836 static struct atmel_lcdfb_info lcdc_data;
838 static struct resource lcdc_resources[] = {
840 .start = AT91CAP9_LCDC_BASE,
841 .end = AT91CAP9_LCDC_BASE + SZ_4K - 1,
842 .flags = IORESOURCE_MEM,
845 .start = AT91CAP9_ID_LCDC,
846 .end = AT91CAP9_ID_LCDC,
847 .flags = IORESOURCE_IRQ,
851 static struct platform_device at91_lcdc_device = {
852 .name = "atmel_lcdfb",
855 .dma_mask = &lcdc_dmamask,
856 .coherent_dma_mask = DMA_BIT_MASK(32),
857 .platform_data = &lcdc_data,
859 .resource = lcdc_resources,
860 .num_resources = ARRAY_SIZE(lcdc_resources),
863 void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
868 at91_set_A_periph(AT91_PIN_PC1, 0); /* LCDHSYNC */
869 at91_set_A_periph(AT91_PIN_PC2, 0); /* LCDDOTCK */
870 at91_set_A_periph(AT91_PIN_PC3, 0); /* LCDDEN */
871 at91_set_B_periph(AT91_PIN_PB9, 0); /* LCDCC */
872 at91_set_A_periph(AT91_PIN_PC6, 0); /* LCDD2 */
873 at91_set_A_periph(AT91_PIN_PC7, 0); /* LCDD3 */
874 at91_set_A_periph(AT91_PIN_PC8, 0); /* LCDD4 */
875 at91_set_A_periph(AT91_PIN_PC9, 0); /* LCDD5 */
876 at91_set_A_periph(AT91_PIN_PC10, 0); /* LCDD6 */
877 at91_set_A_periph(AT91_PIN_PC11, 0); /* LCDD7 */
878 at91_set_A_periph(AT91_PIN_PC14, 0); /* LCDD10 */
879 at91_set_A_periph(AT91_PIN_PC15, 0); /* LCDD11 */
880 at91_set_A_periph(AT91_PIN_PC16, 0); /* LCDD12 */
881 at91_set_A_periph(AT91_PIN_PC17, 0); /* LCDD13 */
882 at91_set_A_periph(AT91_PIN_PC18, 0); /* LCDD14 */
883 at91_set_A_periph(AT91_PIN_PC19, 0); /* LCDD15 */
884 at91_set_A_periph(AT91_PIN_PC22, 0); /* LCDD18 */
885 at91_set_A_periph(AT91_PIN_PC23, 0); /* LCDD19 */
886 at91_set_A_periph(AT91_PIN_PC24, 0); /* LCDD20 */
887 at91_set_A_periph(AT91_PIN_PC25, 0); /* LCDD21 */
888 at91_set_A_periph(AT91_PIN_PC26, 0); /* LCDD22 */
889 at91_set_A_periph(AT91_PIN_PC27, 0); /* LCDD23 */
892 platform_device_register(&at91_lcdc_device);
895 void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
899 /* --------------------------------------------------------------------
900 * SSC -- Synchronous Serial Controller
901 * -------------------------------------------------------------------- */
903 #if defined(CONFIG_ATMEL_SSC) || defined(CONFIG_ATMEL_SSC_MODULE)
904 static u64 ssc0_dmamask = DMA_BIT_MASK(32);
906 static struct resource ssc0_resources[] = {
908 .start = AT91CAP9_BASE_SSC0,
909 .end = AT91CAP9_BASE_SSC0 + SZ_16K - 1,
910 .flags = IORESOURCE_MEM,
913 .start = AT91CAP9_ID_SSC0,
914 .end = AT91CAP9_ID_SSC0,
915 .flags = IORESOURCE_IRQ,
919 static struct platform_device at91cap9_ssc0_device = {
923 .dma_mask = &ssc0_dmamask,
924 .coherent_dma_mask = DMA_BIT_MASK(32),
926 .resource = ssc0_resources,
927 .num_resources = ARRAY_SIZE(ssc0_resources),
930 static inline void configure_ssc0_pins(unsigned pins)
932 if (pins & ATMEL_SSC_TF)
933 at91_set_A_periph(AT91_PIN_PB0, 1);
934 if (pins & ATMEL_SSC_TK)
935 at91_set_A_periph(AT91_PIN_PB1, 1);
936 if (pins & ATMEL_SSC_TD)
937 at91_set_A_periph(AT91_PIN_PB2, 1);
938 if (pins & ATMEL_SSC_RD)
939 at91_set_A_periph(AT91_PIN_PB3, 1);
940 if (pins & ATMEL_SSC_RK)
941 at91_set_A_periph(AT91_PIN_PB4, 1);
942 if (pins & ATMEL_SSC_RF)
943 at91_set_A_periph(AT91_PIN_PB5, 1);
946 static u64 ssc1_dmamask = DMA_BIT_MASK(32);
948 static struct resource ssc1_resources[] = {
950 .start = AT91CAP9_BASE_SSC1,
951 .end = AT91CAP9_BASE_SSC1 + SZ_16K - 1,
952 .flags = IORESOURCE_MEM,
955 .start = AT91CAP9_ID_SSC1,
956 .end = AT91CAP9_ID_SSC1,
957 .flags = IORESOURCE_IRQ,
961 static struct platform_device at91cap9_ssc1_device = {
965 .dma_mask = &ssc1_dmamask,
966 .coherent_dma_mask = DMA_BIT_MASK(32),
968 .resource = ssc1_resources,
969 .num_resources = ARRAY_SIZE(ssc1_resources),
972 static inline void configure_ssc1_pins(unsigned pins)
974 if (pins & ATMEL_SSC_TF)
975 at91_set_A_periph(AT91_PIN_PB6, 1);
976 if (pins & ATMEL_SSC_TK)
977 at91_set_A_periph(AT91_PIN_PB7, 1);
978 if (pins & ATMEL_SSC_TD)
979 at91_set_A_periph(AT91_PIN_PB8, 1);
980 if (pins & ATMEL_SSC_RD)
981 at91_set_A_periph(AT91_PIN_PB9, 1);
982 if (pins & ATMEL_SSC_RK)
983 at91_set_A_periph(AT91_PIN_PB10, 1);
984 if (pins & ATMEL_SSC_RF)
985 at91_set_A_periph(AT91_PIN_PB11, 1);
989 * SSC controllers are accessed through library code, instead of any
990 * kind of all-singing/all-dancing driver. For example one could be
991 * used by a particular I2S audio codec's driver, while another one
992 * on the same system might be used by a custom data capture driver.
994 void __init at91_add_device_ssc(unsigned id, unsigned pins)
996 struct platform_device *pdev;
999 * NOTE: caller is responsible for passing information matching
1000 * "pins" to whatever will be using each particular controller.
1003 case AT91CAP9_ID_SSC0:
1004 pdev = &at91cap9_ssc0_device;
1005 configure_ssc0_pins(pins);
1006 at91_clock_associate("ssc0_clk", &pdev->dev, "ssc");
1008 case AT91CAP9_ID_SSC1:
1009 pdev = &at91cap9_ssc1_device;
1010 configure_ssc1_pins(pins);
1011 at91_clock_associate("ssc1_clk", &pdev->dev, "ssc");
1017 platform_device_register(pdev);
1021 void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
1025 /* --------------------------------------------------------------------
1027 * -------------------------------------------------------------------- */
1029 #if defined(CONFIG_SERIAL_ATMEL)
1030 static struct resource dbgu_resources[] = {
1032 .start = AT91_VA_BASE_SYS + AT91_DBGU,
1033 .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
1034 .flags = IORESOURCE_MEM,
1037 .start = AT91_ID_SYS,
1039 .flags = IORESOURCE_IRQ,
1043 static struct atmel_uart_data dbgu_data = {
1045 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
1046 .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
1049 static u64 dbgu_dmamask = DMA_BIT_MASK(32);
1051 static struct platform_device at91cap9_dbgu_device = {
1052 .name = "atmel_usart",
1055 .dma_mask = &dbgu_dmamask,
1056 .coherent_dma_mask = DMA_BIT_MASK(32),
1057 .platform_data = &dbgu_data,
1059 .resource = dbgu_resources,
1060 .num_resources = ARRAY_SIZE(dbgu_resources),
1063 static inline void configure_dbgu_pins(void)
1065 at91_set_A_periph(AT91_PIN_PC30, 0); /* DRXD */
1066 at91_set_A_periph(AT91_PIN_PC31, 1); /* DTXD */
1069 static struct resource uart0_resources[] = {
1071 .start = AT91CAP9_BASE_US0,
1072 .end = AT91CAP9_BASE_US0 + SZ_16K - 1,
1073 .flags = IORESOURCE_MEM,
1076 .start = AT91CAP9_ID_US0,
1077 .end = AT91CAP9_ID_US0,
1078 .flags = IORESOURCE_IRQ,
1082 static struct atmel_uart_data uart0_data = {
1087 static u64 uart0_dmamask = DMA_BIT_MASK(32);
1089 static struct platform_device at91cap9_uart0_device = {
1090 .name = "atmel_usart",
1093 .dma_mask = &uart0_dmamask,
1094 .coherent_dma_mask = DMA_BIT_MASK(32),
1095 .platform_data = &uart0_data,
1097 .resource = uart0_resources,
1098 .num_resources = ARRAY_SIZE(uart0_resources),
1101 static inline void configure_usart0_pins(unsigned pins)
1103 at91_set_A_periph(AT91_PIN_PA22, 1); /* TXD0 */
1104 at91_set_A_periph(AT91_PIN_PA23, 0); /* RXD0 */
1106 if (pins & ATMEL_UART_RTS)
1107 at91_set_A_periph(AT91_PIN_PA24, 0); /* RTS0 */
1108 if (pins & ATMEL_UART_CTS)
1109 at91_set_A_periph(AT91_PIN_PA25, 0); /* CTS0 */
1112 static struct resource uart1_resources[] = {
1114 .start = AT91CAP9_BASE_US1,
1115 .end = AT91CAP9_BASE_US1 + SZ_16K - 1,
1116 .flags = IORESOURCE_MEM,
1119 .start = AT91CAP9_ID_US1,
1120 .end = AT91CAP9_ID_US1,
1121 .flags = IORESOURCE_IRQ,
1125 static struct atmel_uart_data uart1_data = {
1130 static u64 uart1_dmamask = DMA_BIT_MASK(32);
1132 static struct platform_device at91cap9_uart1_device = {
1133 .name = "atmel_usart",
1136 .dma_mask = &uart1_dmamask,
1137 .coherent_dma_mask = DMA_BIT_MASK(32),
1138 .platform_data = &uart1_data,
1140 .resource = uart1_resources,
1141 .num_resources = ARRAY_SIZE(uart1_resources),
1144 static inline void configure_usart1_pins(unsigned pins)
1146 at91_set_A_periph(AT91_PIN_PD0, 1); /* TXD1 */
1147 at91_set_A_periph(AT91_PIN_PD1, 0); /* RXD1 */
1149 if (pins & ATMEL_UART_RTS)
1150 at91_set_B_periph(AT91_PIN_PD7, 0); /* RTS1 */
1151 if (pins & ATMEL_UART_CTS)
1152 at91_set_B_periph(AT91_PIN_PD8, 0); /* CTS1 */
1155 static struct resource uart2_resources[] = {
1157 .start = AT91CAP9_BASE_US2,
1158 .end = AT91CAP9_BASE_US2 + SZ_16K - 1,
1159 .flags = IORESOURCE_MEM,
1162 .start = AT91CAP9_ID_US2,
1163 .end = AT91CAP9_ID_US2,
1164 .flags = IORESOURCE_IRQ,
1168 static struct atmel_uart_data uart2_data = {
1173 static u64 uart2_dmamask = DMA_BIT_MASK(32);
1175 static struct platform_device at91cap9_uart2_device = {
1176 .name = "atmel_usart",
1179 .dma_mask = &uart2_dmamask,
1180 .coherent_dma_mask = DMA_BIT_MASK(32),
1181 .platform_data = &uart2_data,
1183 .resource = uart2_resources,
1184 .num_resources = ARRAY_SIZE(uart2_resources),
1187 static inline void configure_usart2_pins(unsigned pins)
1189 at91_set_A_periph(AT91_PIN_PD2, 1); /* TXD2 */
1190 at91_set_A_periph(AT91_PIN_PD3, 0); /* RXD2 */
1192 if (pins & ATMEL_UART_RTS)
1193 at91_set_B_periph(AT91_PIN_PD5, 0); /* RTS2 */
1194 if (pins & ATMEL_UART_CTS)
1195 at91_set_B_periph(AT91_PIN_PD6, 0); /* CTS2 */
1198 static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */
1199 struct platform_device *atmel_default_console_device; /* the serial console device */
1201 void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)
1203 struct platform_device *pdev;
1207 pdev = &at91cap9_dbgu_device;
1208 configure_dbgu_pins();
1209 at91_clock_associate("mck", &pdev->dev, "usart");
1211 case AT91CAP9_ID_US0:
1212 pdev = &at91cap9_uart0_device;
1213 configure_usart0_pins(pins);
1214 at91_clock_associate("usart0_clk", &pdev->dev, "usart");
1216 case AT91CAP9_ID_US1:
1217 pdev = &at91cap9_uart1_device;
1218 configure_usart1_pins(pins);
1219 at91_clock_associate("usart1_clk", &pdev->dev, "usart");
1221 case AT91CAP9_ID_US2:
1222 pdev = &at91cap9_uart2_device;
1223 configure_usart2_pins(pins);
1224 at91_clock_associate("usart2_clk", &pdev->dev, "usart");
1229 pdev->id = portnr; /* update to mapped ID */
1231 if (portnr < ATMEL_MAX_UART)
1232 at91_uarts[portnr] = pdev;
1235 void __init at91_set_serial_console(unsigned portnr)
1237 if (portnr < ATMEL_MAX_UART)
1238 atmel_default_console_device = at91_uarts[portnr];
1241 void __init at91_add_device_serial(void)
1245 for (i = 0; i < ATMEL_MAX_UART; i++) {
1247 platform_device_register(at91_uarts[i]);
1250 if (!atmel_default_console_device)
1251 printk(KERN_INFO "AT91: No default serial console defined.\n");
1254 void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {}
1255 void __init at91_set_serial_console(unsigned portnr) {}
1256 void __init at91_add_device_serial(void) {}
1260 /* -------------------------------------------------------------------- */
1262 * These devices are always present and don't need any board-specific
1265 static int __init at91_add_standard_devices(void)
1267 at91_add_device_rtt();
1268 at91_add_device_watchdog();
1269 at91_add_device_tc();
1273 arch_initcall(at91_add_standard_devices);