Merge tag 'mmc-v5.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
Pull MMC fixes from Ulf Hansson: "Here's a couple of MMC and MEMSTICK fixes: MMC host: - sdhci: Fix SDIO IRQ thread deadlock - sdhci-tegra: Fix a warning message - sdhci_am654: Fix SLOTTYPE write - meson-gx: Fix IRQ ack - tmio: Fix SCC error handling to avoid false positive CRC error MEMSTICK core: - mspro_block: Fix returning a correct error code" * tag 'mmc-v5.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: sdhci_am654: Fix SLOTTYPE write mmc: sdhci: Fix SDIO IRQ thread deadlock mmc: meson-gx: fix irq ack mmc: tmio: fix SCC error handling to avoid false positive CRC error mmc: tegra: Fix a warning message memstick: mspro_block: Fix an error code in mspro_block_issue_req()
This commit is contained in:
@@ -2133,6 +2133,17 @@ void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sdhci_enable_sdio_irq);
|
||||
|
||||
static void sdhci_ack_sdio_irq(struct mmc_host *mmc)
|
||||
{
|
||||
struct sdhci_host *host = mmc_priv(mmc);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
if (host->flags & SDHCI_SDIO_IRQ_ENABLED)
|
||||
sdhci_enable_sdio_irq_nolock(host, true);
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
}
|
||||
|
||||
int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
|
||||
struct mmc_ios *ios)
|
||||
{
|
||||
@@ -2581,6 +2592,7 @@ static const struct mmc_host_ops sdhci_ops = {
|
||||
.get_ro = sdhci_get_ro,
|
||||
.hw_reset = sdhci_hw_reset,
|
||||
.enable_sdio_irq = sdhci_enable_sdio_irq,
|
||||
.ack_sdio_irq = sdhci_ack_sdio_irq,
|
||||
.start_signal_voltage_switch = sdhci_start_signal_voltage_switch,
|
||||
.prepare_hs400_tuning = sdhci_prepare_hs400_tuning,
|
||||
.execute_tuning = sdhci_execute_tuning,
|
||||
@@ -3083,8 +3095,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
|
||||
if ((intmask & SDHCI_INT_CARD_INT) &&
|
||||
(host->ier & SDHCI_INT_CARD_INT)) {
|
||||
sdhci_enable_sdio_irq_nolock(host, false);
|
||||
host->thread_isr |= SDHCI_INT_CARD_INT;
|
||||
result = IRQ_WAKE_THREAD;
|
||||
sdio_signal_irq(host->mmc);
|
||||
}
|
||||
|
||||
intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE |
|
||||
@@ -3156,15 +3167,6 @@ static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
|
||||
mmc_detect_change(mmc, msecs_to_jiffies(200));
|
||||
}
|
||||
|
||||
if (isr & SDHCI_INT_CARD_INT) {
|
||||
sdio_run_irqs(host->mmc);
|
||||
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
if (host->flags & SDHCI_SDIO_IRQ_ENABLED)
|
||||
sdhci_enable_sdio_irq_nolock(host, true);
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user