| 
					
				 | 
			
			
				@@ -1024,3 +1024,173 @@ static inline void configure_usart3_pins(unsigned pins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static struct resource uart4_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		.start	= AT91SAM9260_BASE_US4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91SAM9260_BASE_US4 + SZ_16K - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct atmel_uart_data uart4_data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.use_dma_tx	= 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.use_dma_rx	= 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static u64 uart4_dmamask = DMA_BIT_MASK(32); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device at91sam9260_uart4_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "atmel_usart", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id		= 5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.dma_mask		= &uart4_dmamask, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.coherent_dma_mask	= DMA_BIT_MASK(32), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.platform_data		= &uart4_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= uart4_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(uart4_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static inline void configure_usart4_pins(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	at91_set_B_periph(AT91_PIN_PA31, 1);		/* TXD4 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	at91_set_B_periph(AT91_PIN_PA30, 0);		/* RXD4 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource uart5_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91SAM9260_BASE_US5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91SAM9260_BASE_US5 + SZ_16K - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct atmel_uart_data uart5_data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.use_dma_tx	= 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.use_dma_rx	= 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static u64 uart5_dmamask = DMA_BIT_MASK(32); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device at91sam9260_uart5_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "atmel_usart", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id		= 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.dma_mask		= &uart5_dmamask, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.coherent_dma_mask	= DMA_BIT_MASK(32), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.platform_data		= &uart5_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= uart5_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(uart5_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static inline void configure_usart5_pins(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	at91_set_A_periph(AT91_PIN_PB12, 1);		/* TXD5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	at91_set_A_periph(AT91_PIN_PB13, 0);		/* RXD5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART];	/* the UARTs to use */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct platform_device *pdev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct atmel_uart_data *pdata; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case 0:		/* DBGU */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_dbgu_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_dbgu_pins(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart0_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart0_pins(pins); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart1_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart1_pins(pins); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart2_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart2_pins(pins); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart3_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart3_pins(pins); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US4: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart4_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart4_pins(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case AT91SAM9260_ID_US5: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pdev = &at91sam9260_uart5_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			configure_usart5_pins(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pdata = pdev->dev.platform_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pdata->num = portnr;		/* update to mapped ID */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (portnr < ATMEL_MAX_UART) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_uarts[portnr] = pdev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_add_device_serial(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (i = 0; i < ATMEL_MAX_UART; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (at91_uarts[i]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			platform_device_register(at91_uarts[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_add_device_serial(void) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  CF/IDE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * -------------------------------------------------------------------- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_PATA_AT91) || defined(CONFIG_PATA_AT91_MODULE) || \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct at91_cf_data cf0_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource cf0_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91_CHIPSELECT_4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91_CHIPSELECT_4 + SZ_256M - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device cf0_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id		= 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.platform_data	= &cf0_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= cf0_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(cf0_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct at91_cf_data cf1_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource cf1_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91_CHIPSELECT_5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91_CHIPSELECT_5 + SZ_256M - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device cf1_device = { 
			 |