Skip to content

Commit

Permalink
mmc: bfin_sdh: Reset SD controller when resume from power saving mode.
Browse files Browse the repository at this point in the history
Without reset, SD controller may stay in disable mode, SD card can't
be detected when resume from power saving mode.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
  • Loading branch information
Sonic Zhang authored and Chris Ball committed Sep 4, 2012
1 parent c5e4a2e commit 7a8a43c
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions drivers/mmc/host/bfin_sdh.c
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,23 @@ static irqreturn_t sdh_stat_irq(int irq, void *devid)
return IRQ_RETVAL(handled);
}

static void sdh_reset(void)
{
#if defined(CONFIG_BF54x)
/* Secure Digital Host shares DMA with Nand controller */
bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() | 0x1);
#endif

bfin_write_SDH_CFG(bfin_read_SDH_CFG() | CLKS_EN);
SSYNC();

/* Disable card inserting detection pin. set MMC_CAP_NEEDS_POLL, and
* mmc stack will do the detection.
*/
bfin_write_SDH_CFG((bfin_read_SDH_CFG() & 0x1F) | (PUP_SDDAT | PUP_SDDAT3));
SSYNC();
}

static int __devinit sdh_probe(struct platform_device *pdev)
{
struct mmc_host *mmc;
Expand Down Expand Up @@ -581,19 +598,8 @@ static int __devinit sdh_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "unable to request peripheral pins\n");
goto out4;
}
#if defined(CONFIG_BF54x)
/* Secure Digital Host shares DMA with Nand controller */
bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() | 0x1);
#endif

bfin_write_SDH_CFG(bfin_read_SDH_CFG() | CLKS_EN);
SSYNC();

/* Disable card inserting detection pin. set MMC_CAP_NEEDS_POLL, and
* mmc stack will do the detection.
*/
bfin_write_SDH_CFG((bfin_read_SDH_CFG() & 0x1F) | (PUP_SDDAT | PUP_SDDAT3));
SSYNC();
sdh_reset();

mmc_add_host(mmc);
return 0;
Expand Down Expand Up @@ -660,10 +666,7 @@ static int sdh_resume(struct platform_device *dev)
return ret;
}

#if defined(CONFIG_BF54x)
/* Secure Digital Host shares DMA with Nand controller */
bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() | 0x1);
#endif
sdh_reset();

if (mmc)
ret = mmc_resume_host(mmc);
Expand Down

0 comments on commit 7a8a43c

Please sign in to comment.