mirror of https://gitee.com/openkylin/linux.git
mmc: tmio: Keep host active while SDIO IRQ is enabled
The host must be kept active to be able to serve SDIO IRQs, thus let's prevent it from going inactive while SDIO IRQ is enabled. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
This commit is contained in:
parent
215ba3995a
commit
7501c4315f
|
@ -101,6 +101,7 @@ struct tmio_mmc_host {
|
|||
struct mutex ios_lock; /* protect set_ios() context */
|
||||
bool native_hotplug;
|
||||
bool resuming;
|
||||
bool sdio_irq_enabled;
|
||||
};
|
||||
|
||||
int tmio_mmc_host_probe(struct tmio_mmc_host **host,
|
||||
|
|
|
@ -129,15 +129,22 @@ static void tmio_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
|
|||
{
|
||||
struct tmio_mmc_host *host = mmc_priv(mmc);
|
||||
|
||||
if (enable) {
|
||||
if (enable && !host->sdio_irq_enabled) {
|
||||
/* Keep device active while SDIO irq is enabled */
|
||||
pm_runtime_get_sync(mmc_dev(mmc));
|
||||
host->sdio_irq_enabled = true;
|
||||
|
||||
host->sdio_irq_mask = TMIO_SDIO_MASK_ALL &
|
||||
~TMIO_SDIO_STAT_IOIRQ;
|
||||
sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
|
||||
sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
|
||||
} else {
|
||||
} else if (!enable && host->sdio_irq_enabled) {
|
||||
host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
|
||||
sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
|
||||
sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0000);
|
||||
|
||||
host->sdio_irq_enabled = false;
|
||||
pm_runtime_put(mmc_dev(mmc));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1074,8 +1081,12 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host,
|
|||
|
||||
_host->sdcard_irq_mask &= ~irq_mask;
|
||||
|
||||
if (pdata->flags & TMIO_MMC_SDIO_IRQ)
|
||||
tmio_mmc_enable_sdio_irq(mmc, 0);
|
||||
_host->sdio_irq_enabled = false;
|
||||
if (pdata->flags & TMIO_MMC_SDIO_IRQ) {
|
||||
_host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
|
||||
sd_ctrl_write16(_host, CTL_SDIO_IRQ_MASK, _host->sdio_irq_mask);
|
||||
sd_ctrl_write16(_host, CTL_TRANSACTION_CTL, 0x0000);
|
||||
}
|
||||
|
||||
spin_lock_init(&_host->lock);
|
||||
mutex_init(&_host->ios_lock);
|
||||
|
|
Loading…
Reference in New Issue