Skip to content

Commit

Permalink
mmc: tmio: make sure SDIO gets reinitialized after resume
Browse files Browse the repository at this point in the history
To achieve that, we set the registers in the generic HW reset routine
which gets called at both, init and resume. We also make sure to move
SDIO initialization before reset gets called in probe().

Signed-off-by: Wolfram Sang <[email protected]>
Tested-by: Masaharu Hayakawa <[email protected]>
Signed-off-by: Ulf Hansson <[email protected]>
  • Loading branch information
Wolfram Sang authored and storulf committed Jun 20, 2017
1 parent c949c90 commit 86beb53
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions drivers/mmc/host/tmio_mmc_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,12 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host)
if (host->pdata->flags & TMIO_MMC_HAVE_HIGH_REG)
sd_ctrl_write16(host, CTL_RESET_SDIO, 0x0001);
msleep(10);

if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) {
sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
}

}

static void tmio_mmc_reset_work(struct work_struct *work)
Expand Down Expand Up @@ -1280,6 +1286,10 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
if (_host->native_hotplug)
pm_runtime_get_noresume(&pdev->dev);

_host->sdio_irq_enabled = false;
if (pdata->flags & TMIO_MMC_SDIO_IRQ)
_host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;

tmio_mmc_clk_stop(_host);
tmio_mmc_reset(_host);

Expand All @@ -1296,13 +1306,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,

_host->sdcard_irq_mask &= ~irq_mask;

_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, 0x0001);
}

spin_lock_init(&_host->lock);
mutex_init(&_host->ios_lock);

Expand Down

0 comments on commit 86beb53

Please sign in to comment.