|
@@ -134,6 +134,7 @@ static void sdhci_disable_card_detection(struct sdhci_host *host)
|
|
|
static void sdhci_reset(struct sdhci_host *host, u8 mask)
|
|
|
{
|
|
|
unsigned long timeout;
|
|
|
+ u32 uninitialized_var(ier);
|
|
|
|
|
|
if (host->quirks & SDHCI_QUIRK_NO_CARD_NO_RESET) {
|
|
|
if (!(sdhci_readl(host, SDHCI_PRESENT_STATE) &
|
|
@@ -141,6 +142,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
|
|
|
+ ier = sdhci_readl(host, SDHCI_INT_ENABLE);
|
|
|
+
|
|
|
sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
|
|
|
|
|
|
if (mask & SDHCI_RESET_ALL)
|
|
@@ -160,6 +164,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
|
|
|
timeout--;
|
|
|
mdelay(1);
|
|
|
}
|
|
|
+
|
|
|
+ if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
|
|
|
+ sdhci_clear_set_irqs(host, SDHCI_INT_ALL_MASK, ier);
|
|
|
}
|
|
|
|
|
|
static void sdhci_init(struct sdhci_host *host)
|