| 
					
				 | 
			
			
				@@ -1092,3 +1092,130 @@ static void __init at91_add_device_rtt(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	at91_add_device_rtt_rtc(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	platform_device_register(&at91sam9263_rtt0_device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	platform_device_register(&at91sam9263_rtt1_device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  Watchdog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * -------------------------------------------------------------------- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource wdt_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91SAM9263_BASE_WDT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91SAM9263_BASE_WDT + SZ_16 - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device at91sam9263_wdt_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "at91_wdt", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id		= -1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= wdt_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(wdt_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void __init at91_add_device_watchdog(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	platform_device_register(&at91sam9263_wdt_device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void __init at91_add_device_watchdog(void) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  PWM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * --------------------------------------------------------------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_ATMEL_PWM) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static u32 pwm_mask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource pwm_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91SAM9263_BASE_PWMC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91SAM9263_BASE_PWMC + SZ_16K - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_PWMC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_PWMC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device at91sam9263_pwm0_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name	= "atmel_pwm", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id	= -1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev	= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.platform_data		= &pwm_mask, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= pwm_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(pwm_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_add_device_pwm(u32 mask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (mask & (1 << AT91_PWM0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB7, 1);	/* enable PWM0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (mask & (1 << AT91_PWM1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB8, 1);	/* enable PWM1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (mask & (1 << AT91_PWM2)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PC29, 1);	/* enable PWM2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (mask & (1 << AT91_PWM3)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB29, 1);	/* enable PWM3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pwm_mask = mask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	platform_device_register(&at91sam9263_pwm0_device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_add_device_pwm(u32 mask) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* -------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  SSC -- Synchronous Serial Controller 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * -------------------------------------------------------------------- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_ATMEL_SSC) || defined(CONFIG_ATMEL_SSC_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static u64 ssc0_dmamask = DMA_BIT_MASK(32); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct resource ssc0_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[0] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= AT91SAM9263_BASE_SSC0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= AT91SAM9263_BASE_SSC0 + SZ_16K - 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_MEM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	[1] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.flags	= IORESOURCE_IRQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device at91sam9263_ssc0_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name	= "at91rm9200_ssc", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id	= 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev	= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.dma_mask		= &ssc0_dmamask, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.coherent_dma_mask	= DMA_BIT_MASK(32), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= ssc0_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(ssc0_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static inline void configure_ssc0_pins(unsigned pins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (pins & ATMEL_SSC_TF) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (pins & ATMEL_SSC_TK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (pins & ATMEL_SSC_TD) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB2, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (pins & ATMEL_SSC_RD) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_B_periph(AT91_PIN_PB3, 1); 
			 |