| 
					
				 | 
			
			
				@@ -414,3 +414,54 @@ static struct resource cf1_resources[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct platform_device cf1_device = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.id		= 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.dev		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.platform_data	= &cf1_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.resource	= cf1_resources, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.num_resources	= ARRAY_SIZE(cf1_resources), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void __init at91_add_device_cf(struct at91_cf_data *data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned long ebi0_csa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct platform_device *pdev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (!data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * assign CS4 or CS5 to SMC with Compact Flash logic support, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * we assume SMC timings are configured by board code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * except True IDE where timings are controlled by driver 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ebi0_csa = at91_matrix_read(AT91_MATRIX_EBI0CSA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (data->chipselect) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 4: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_A_periph(AT91_PIN_PD6, 0);  /* EBI0_NCS4/CFCS0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ebi0_csa |= AT91_MATRIX_EBI0_CS4A_SMC_CF1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		cf0_data = *data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pdev = &cf0_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 5: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_A_periph(AT91_PIN_PD7, 0);  /* EBI0_NCS5/CFCS1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ebi0_csa |= AT91_MATRIX_EBI0_CS5A_SMC_CF2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		cf1_data = *data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pdev = &cf1_device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printk(KERN_ERR "AT91 CF: bad chip-select requested (%u)\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       data->chipselect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	at91_matrix_write(AT91_MATRIX_EBI0CSA, ebi0_csa); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (gpio_is_valid(data->det_pin)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_gpio_input(data->det_pin, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_deglitch(data->det_pin, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (gpio_is_valid(data->irq_pin)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_gpio_input(data->irq_pin, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at91_set_deglitch(data->irq_pin, 1); 
			 |