sdhci: add support to ENE-CB714
Added its pci_id and implemented a quirk for it because this controller needs to reset cmd and data when setting ios. Signed-off-by: Leandro Dorileo <dorileo@ossystems.com.br> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
		
							parent
							
								
									43b58b36b7
								
							
						
					
					
						commit
						b8352260d2
					
				@ -34,6 +34,7 @@ static unsigned int debug_quirks = 0;
 | 
			
		||||
/* Controller doesn't like some resets when there is no card inserted. */
 | 
			
		||||
#define SDHCI_QUIRK_NO_CARD_NO_RESET			(1<<2)
 | 
			
		||||
#define SDHCI_QUIRK_SINGLE_POWER_WRITE			(1<<3)
 | 
			
		||||
#define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS		(1<<4)
 | 
			
		||||
 | 
			
		||||
static const struct pci_device_id pci_ids[] __devinitdata = {
 | 
			
		||||
	{
 | 
			
		||||
@ -78,6 +79,24 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
 | 
			
		||||
		.driver_data	= SDHCI_QUIRK_SINGLE_POWER_WRITE,
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		.vendor         = PCI_VENDOR_ID_ENE,
 | 
			
		||||
		.device         = PCI_DEVICE_ID_ENE_CB714_SD,
 | 
			
		||||
		.subvendor      = PCI_ANY_ID,
 | 
			
		||||
		.subdevice      = PCI_ANY_ID,
 | 
			
		||||
		.driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
 | 
			
		||||
				  SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS,
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		.vendor         = PCI_VENDOR_ID_ENE,
 | 
			
		||||
		.device         = PCI_DEVICE_ID_ENE_CB714_SD_2,
 | 
			
		||||
		.subvendor      = PCI_ANY_ID,
 | 
			
		||||
		.subdevice      = PCI_ANY_ID,
 | 
			
		||||
		.driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
 | 
			
		||||
				  SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS,
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	/* Generic SD host controller */
 | 
			
		||||
		PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00)
 | 
			
		||||
	},
 | 
			
		||||
@ -759,6 +778,14 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 | 
			
		||||
 | 
			
		||||
	writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Some (ENE) controllers go apeshit on some ios operation,
 | 
			
		||||
	 * signalling timeout and CRC errors even on CMD0. Resetting
 | 
			
		||||
	 * it on each ios seems to solve the problem.
 | 
			
		||||
	 */
 | 
			
		||||
	if(host->chip->quirks & SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS)
 | 
			
		||||
		sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
 | 
			
		||||
 | 
			
		||||
	mmiowb();
 | 
			
		||||
	spin_unlock_irqrestore(&host->lock, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1972,6 +1972,8 @@
 | 
			
		||||
#define PCI_VENDOR_ID_ENE		0x1524
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_CB712_SD	0x0550
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_CB712_SD_2	0x0551
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_CB714_SD	0x0750
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_CB714_SD_2	0x0751
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_1211		0x1211
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_1225		0x1225
 | 
			
		||||
#define PCI_DEVICE_ID_ENE_1410		0x1410
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user