|
|
@@ -2225,7 +2225,7 @@ static void sdhci_tuning_timer(unsigned long data)
|
|
|
* *
|
|
|
\*****************************************************************************/
|
|
|
|
|
|
-static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask)
|
|
|
+static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *mask)
|
|
|
{
|
|
|
BUG_ON(intmask == 0);
|
|
|
|
|
|
@@ -2272,6 +2272,9 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask)
|
|
|
|
|
|
/* The controller does not support the end-of-busy IRQ,
|
|
|
* fall through and take the SDHCI_INT_RESPONSE */
|
|
|
+ } else if ((host->quirks2 & SDHCI_QUIRK2_STOP_WITH_TC) &&
|
|
|
+ host->cmd->opcode == MMC_STOP_TRANSMISSION && !host->data) {
|
|
|
+ *mask &= ~SDHCI_INT_DATA_END;
|
|
|
}
|
|
|
|
|
|
if (intmask & SDHCI_INT_RESPONSE)
|
|
|
@@ -2481,7 +2484,8 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
|
|
|
}
|
|
|
|
|
|
if (intmask & SDHCI_INT_CMD_MASK)
|
|
|
- sdhci_cmd_irq(host, intmask & SDHCI_INT_CMD_MASK);
|
|
|
+ sdhci_cmd_irq(host, intmask & SDHCI_INT_CMD_MASK,
|
|
|
+ &intmask);
|
|
|
|
|
|
if (intmask & SDHCI_INT_DATA_MASK)
|
|
|
sdhci_data_irq(host, intmask & SDHCI_INT_DATA_MASK);
|