23 #include <mach/board.h>
36 #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
40 static struct resource usbh_resources[] = {
57 .dma_mask = &ohci_dmamask,
59 .platform_data = &usbh_data,
61 .resource = usbh_resources,
73 for (i = 0; i < data->
ports; i++) {
74 if (gpio_is_valid(data->
vbus_pin[i]))
80 for (i = 0; i < data->
ports; i++) {
97 #if defined(CONFIG_USB_AT91) || defined(CONFIG_USB_AT91_MODULE)
100 static struct resource udc_resources[] = {
117 .platform_data = &udc_data,
119 .resource = udc_resources,
128 if (gpio_is_valid(data->
vbus_pin)) {
147 #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
151 static struct resource eth_resources[] = {
168 .dma_mask = ð_dmamask,
170 .platform_data = ð_data,
172 .resource = eth_resources,
221 #if IS_ENABLED(CONFIG_MMC_ATMELMCI)
225 static struct resource mmc0_resources[] = {
242 .dma_mask = &mmc_dmamask,
244 .platform_data = &mmc0_data,
246 .resource = mmc0_resources,
250 static struct resource mmc1_resources[] = {
267 .dma_mask = &mmc_dmamask,
269 .platform_data = &mmc1_data,
271 .resource = mmc1_resources,
278 unsigned int slot_count = 0;
285 if (!data->
slot[i].bus_width)
289 if (gpio_is_valid(data->
slot[i].detect_pin)) {
295 if (gpio_is_valid(data->
slot[i].wp_pin))
305 if (data->
slot[i].bus_width == 4) {
317 if (data->
slot[i].bus_width == 4) {
326 "AT91: SD/MMC slot %d not available\n", i);
336 }
else if (mmc_id == 1) {
343 if (data->
slot[i].bus_width == 4) {
355 if (data->
slot[i].bus_width == 4) {
364 "AT91: SD/MMC slot %d not available\n", i);
385 #if defined(CONFIG_PATA_AT91) || defined(CONFIG_PATA_AT91_MODULE) || \
386 defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
390 static struct resource cf0_resources[] = {
401 .platform_data = &cf0_data,
403 .resource = cf0_resources,
409 static struct resource cf1_resources[] = {
420 .platform_data = &cf1_data,
422 .resource = cf1_resources,
428 unsigned long ebi0_csa;
460 if (gpio_is_valid(data->
det_pin)) {
465 if (gpio_is_valid(data->
irq_pin)) {
470 if (gpio_is_valid(data->
vcc_pin))
491 #if defined(CONFIG_MTD_NAND_ATMEL) || defined(CONFIG_MTD_NAND_ATMEL_MODULE)
494 #define NAND_BASE AT91_CHIPSELECT_3
496 static struct resource nand_resources[] = {
499 .end = NAND_BASE +
SZ_256M - 1,
510 .
name =
"atmel_nand",
513 .platform_data = &nand_data,
515 .resource = nand_resources,
534 if (gpio_is_valid(data->
rdy_pin))
538 if (gpio_is_valid(data->
det_pin))
558 #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
562 .sda_is_open_drain = 1,
564 .scl_is_open_drain = 1,
571 .dev.platform_data = &
pdata,
586 #elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
588 static struct resource twi_resources[] = {
602 .
name =
"i2c-at91sam9260",
604 .resource = twi_resources,
629 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
632 static struct resource spi0_resources[] = {
649 .dma_mask = &spi_dmamask,
652 .resource = spi0_resources,
658 static struct resource spi1_resources[] = {
675 .dma_mask = &spi_dmamask,
678 .resource = spi1_resources,
687 unsigned long cs_pin;
688 short enable_spi0 = 0;
689 short enable_spi1 = 0;
692 for (i = 0; i < nr_devices; i++) {
693 if (devices[i].controller_data)
694 cs_pin = (
unsigned long) devices[i].controller_data;
695 else if (devices[i].bus_num == 0)
698 cs_pin = spi1_standard_cs[devices[
i].chip_select];
700 if (!gpio_is_valid(cs_pin))
703 if (devices[i].bus_num == 0)
712 devices[
i].controller_data = (
void *) cs_pin;
742 #if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
746 static struct resource ac97_resources[] = {
760 .
name =
"atmel_ac97c",
763 .dma_mask = &ac97_dmamask,
767 .resource = ac97_resources,
796 #if defined(CONFIG_CAN_AT91) || defined(CONFIG_CAN_AT91_MODULE)
797 static struct resource can_resources[] = {
813 .resource = can_resources,
821 at91sam9263_can_device.
dev.platform_data =
data;
833 #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
837 static struct resource lcdc_resources[] = {
851 .
name =
"atmel_lcdfb",
854 .dma_mask = &lcdc_dmamask,
856 .platform_data = &lcdc_data,
858 .resource = lcdc_resources,
902 #if defined(CONFIG_VIDEO_AT91_ISI) || defined(CONFIG_VIDEO_AT91_ISI_MODULE)
920 .resource = isi_resources,
943 if (use_pck_as_mck) {
951 bool use_pck_as_mck) {}
959 #ifdef CONFIG_ATMEL_TCLIB
961 static struct resource tcb_resources[] = {
977 .resource = tcb_resources,
981 #if defined(CONFIG_OF)
988 static void __init at91_add_device_tc(
void)
990 #if defined(CONFIG_OF)
1003 static void __init at91_add_device_tc(
void) { }
1011 static struct resource rtt0_resources[] = {
1026 .resource = rtt0_resources,
1029 static struct resource rtt1_resources[] = {
1044 .resource = rtt1_resources,
1047 #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9)
1048 static void __init at91_add_device_rtt_rtc(
void)
1053 switch (CONFIG_RTC_DRV_AT91SAM9_RTT) {
1061 pdev = &at91sam9263_rtt0_device;
1067 pdev = &at91sam9263_rtt1_device;
1071 pr_err(
"at91sam9263: only supports 2 RTT (%d)\n",
1072 CONFIG_RTC_DRV_AT91SAM9_RTT);
1076 pdev->
name =
"rtc-at91sam9";
1083 static void __init at91_add_device_rtt_rtc(
void)
1091 static void __init at91_add_device_rtt(
void)
1093 at91_add_device_rtt_rtc();
1103 #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
1104 static struct resource wdt_resources[] = {
1115 .resource = wdt_resources,
1119 static void __init at91_add_device_watchdog(
void)
1124 static void __init at91_add_device_watchdog(
void) {}
1132 #if defined(CONFIG_ATMEL_PWM)
1133 static u32 pwm_mask;
1135 static struct resource pwm_resources[] = {
1149 .
name =
"atmel_pwm",
1152 .platform_data = &pwm_mask,
1154 .resource = pwm_resources,
1185 #if defined(CONFIG_ATMEL_SSC) || defined(CONFIG_ATMEL_SSC_MODULE)
1188 static struct resource ssc0_resources[] = {
1205 .dma_mask = &ssc0_dmamask,
1208 .resource = ssc0_resources,
1212 static inline void configure_ssc0_pins(
unsigned pins)
1230 static struct resource ssc1_resources[] = {
1247 .dma_mask = &ssc1_dmamask,
1250 .resource = ssc1_resources,
1254 static inline void configure_ssc1_pins(
unsigned pins)
1256 if (pins & ATMEL_SSC_TF)
1258 if (pins & ATMEL_SSC_TK)
1260 if (pins & ATMEL_SSC_TD)
1262 if (pins & ATMEL_SSC_RD)
1264 if (pins & ATMEL_SSC_RK)
1286 pdev = &at91sam9263_ssc0_device;
1287 configure_ssc0_pins(pins);
1290 pdev = &at91sam9263_ssc1_device;
1291 configure_ssc1_pins(pins);
1309 #if defined(CONFIG_SERIAL_ATMEL)
1311 static struct resource dbgu_resources[] = {
1332 .
name =
"atmel_usart",
1335 .dma_mask = &dbgu_dmamask,
1337 .platform_data = &dbgu_data,
1339 .resource = dbgu_resources,
1343 static inline void configure_dbgu_pins(
void)
1349 static struct resource uart0_resources[] = {
1370 .
name =
"atmel_usart",
1373 .dma_mask = &uart0_dmamask,
1375 .platform_data = &uart0_data,
1377 .resource = uart0_resources,
1378 .num_resources =
ARRAY_SIZE(uart0_resources),
1381 static inline void configure_usart0_pins(
unsigned pins)
1392 static struct resource uart1_resources[] = {
1413 .
name =
"atmel_usart",
1416 .dma_mask = &uart1_dmamask,
1418 .platform_data = &uart1_data,
1420 .resource = uart1_resources,
1421 .num_resources =
ARRAY_SIZE(uart1_resources),
1424 static inline void configure_usart1_pins(
unsigned pins)
1429 if (pins & ATMEL_UART_RTS)
1435 static struct resource uart2_resources[] = {
1456 .
name =
"atmel_usart",
1459 .dma_mask = &uart2_dmamask,
1461 .platform_data = &uart2_data,
1463 .resource = uart2_resources,
1464 .num_resources =
ARRAY_SIZE(uart2_resources),
1467 static inline void configure_usart2_pins(
unsigned pins)
1472 if (pins & ATMEL_UART_RTS)
1487 pdev = &at91sam9263_dbgu_device;
1488 configure_dbgu_pins();
1491 pdev = &at91sam9263_uart0_device;
1492 configure_usart0_pins(pins);
1495 pdev = &at91sam9263_uart1_device;
1496 configure_usart1_pins(pins);
1499 pdev = &at91sam9263_uart2_device;
1500 configure_usart2_pins(pins);
1505 pdata = pdev->
dev.platform_data;
1506 pdata->
num = portnr;
1509 at91_uarts[portnr] = pdev;
1532 static int __init at91_add_standard_devices(
void)
1534 if (of_have_populated_dt())
1537 at91_add_device_rtt();
1538 at91_add_device_watchdog();
1539 at91_add_device_tc();