mmc: sdhci: move FSL ESDHC reset handling quirk into esdhc code
The Freescale esdhc driver is the only driver which needs the interrupt registers restored after a reset. Move this quirk to be part of the ESDHC driver implementation. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Tested-by: Markus Pargmann <mpa@pengutronix.de> Tested-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Chris Ball <chris@printf.net>
This commit is contained in:
		
							parent
							
								
									03231f9b78
								
							
						
					
					
						commit
						0718e59ae2
					
				| @ -876,6 +876,14 @@ static int esdhc_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs) | ||||
| 	return esdhc_change_pinstate(host, uhs); | ||||
| } | ||||
| 
 | ||||
| static void esdhc_reset(struct sdhci_host *host, u8 mask) | ||||
| { | ||||
| 	sdhci_reset(host, mask); | ||||
| 
 | ||||
| 	sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); | ||||
| 	sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); | ||||
| } | ||||
| 
 | ||||
| static struct sdhci_ops sdhci_esdhc_ops = { | ||||
| 	.read_l = esdhc_readl_le, | ||||
| 	.read_w = esdhc_readw_le, | ||||
| @ -888,7 +896,7 @@ static struct sdhci_ops sdhci_esdhc_ops = { | ||||
| 	.get_ro = esdhc_pltfm_get_ro, | ||||
| 	.set_bus_width = esdhc_pltfm_set_bus_width, | ||||
| 	.set_uhs_signaling = esdhc_set_uhs_signaling, | ||||
| 	.reset = sdhci_reset, | ||||
| 	.reset = esdhc_reset, | ||||
| }; | ||||
| 
 | ||||
| static const struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = { | ||||
|  | ||||
| @ -22,8 +22,7 @@ | ||||
| 				SDHCI_QUIRK_NO_BUSY_IRQ | \ | ||||
| 				SDHCI_QUIRK_NONSTANDARD_CLOCK | \ | ||||
| 				SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | \ | ||||
| 				SDHCI_QUIRK_PIO_NEEDS_DELAY | \ | ||||
| 				SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET) | ||||
| 				SDHCI_QUIRK_PIO_NEEDS_DELAY) | ||||
| 
 | ||||
| #define ESDHC_SYSTEM_CONTROL	0x2c | ||||
| #define ESDHC_CLOCK_MASK	0x0000fff0 | ||||
|  | ||||
| @ -203,11 +203,6 @@ static void sdhci_do_reset(struct sdhci_host *host, u8 mask) | ||||
| 
 | ||||
| 	host->ops->reset(host, mask); | ||||
| 
 | ||||
| 	if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET) { | ||||
| 		sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); | ||||
| 		sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); | ||||
| 	} | ||||
| 
 | ||||
| 	if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) { | ||||
| 		if ((host->ops->enable_dma) && (mask & SDHCI_RESET_ALL)) | ||||
| 			host->ops->enable_dma(host); | ||||
|  | ||||
| @ -61,8 +61,6 @@ struct sdhci_host { | ||||
| #define SDHCI_QUIRK_NONSTANDARD_CLOCK			(1<<17) | ||||
| /* Controller does not like fast PIO transfers */ | ||||
| #define SDHCI_QUIRK_PIO_NEEDS_DELAY			(1<<18) | ||||
| /* Controller losing signal/interrupt enable states after reset */ | ||||
| #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET		(1<<19) | ||||
| /* Controller has to be forced to use block size of 2048 bytes */ | ||||
| #define SDHCI_QUIRK_FORCE_BLK_SZ_2048			(1<<20) | ||||
| /* Controller cannot do multi-block transfers */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user