| 
					
				 | 
			
			
				@@ -391,3 +391,71 @@ static int n8x0_mmc_get_cover_state(struct device *dev, int slot) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void n8x0_mmc_callback(void *data, u8 card_mask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	int bit, *openp, index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (machine_is_nokia_n800()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bit = 1 << 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		openp = &slot2_cover_open; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		index = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bit = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		openp = &slot1_cover_open; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		index = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (card_mask & bit) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		*openp = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		*openp = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef CONFIG_MMC_OMAP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	omap_mmc_notify_cover_event(mmc_device, index, *openp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pr_warn("MMC: notify cover event not available\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static int n8x0_mmc_late_init(struct device *dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int r, bit, *openp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int vs2sel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mmc_device = dev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	r = menelaus_set_slot_sel(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (machine_is_nokia_n800()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		vs2sel = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		vs2sel = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	r = menelaus_set_mmc_slot(2, 0, vs2sel, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	n8x0_mmc_set_power(dev, 0, MMC_POWER_ON, 16); /* MMC_VDD_28_29 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	n8x0_mmc_set_power(dev, 1, MMC_POWER_ON, 16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	r = menelaus_set_mmc_slot(1, 1, 0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	r = menelaus_set_mmc_slot(2, 1, vs2sel, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	r = menelaus_get_slot_pin_states(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (machine_is_nokia_n800()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bit = 1 << 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		openp = &slot2_cover_open; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bit = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		openp = &slot1_cover_open; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		slot2_cover_open = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* All slot pin bits seem to be inversed until first switch change */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (r == 0xf || r == (0xf & ~bit)) 
			 |