On Fri, Oct 21, 2011 at 05:25:54PM +0200, Ulf Hansson wrote:
> +#ifdef CONFIG_PM_RUNTIME
> +static int mmci_runtime_suspend(struct device *dev)
> +{
> +     struct amba_device *adev = to_amba_device(dev);
> +     struct mmc_host *mmc = amba_get_drvdata(adev);
> +     unsigned long flags;
> +
> +     if (mmc) {
> +             struct mmci_host *host = mmc_priv(mmc);
> +
> +             spin_lock_irqsave(&host->lock, flags);
> +
> +             /* Save registers for POWER, CLOCK and IRQMASK0 */
> +             host->irqmask0_reg = readl(host->base + MMCIMASK0);
> +             host->pwr_reg = readl(host->base + MMCIPOWER);
> +             host->clk_reg = readl(host->base + MMCICLOCK);
> +
> +             /*
> +              * Make sure we do not get any interrupts when we disabled the
> +              * clock and the regulator and as well make sure to clear the
> +              * registers for clock and power.
> +              */
> +             writel(0, host->base + MMCIMASK0);
> +             writel(0, host->base + MMCIPOWER);
> +             writel(0, host->base + MMCICLOCK);

Err, no.  You're not allowed to power down the card between commands
unless the card has been removed or been has finished with.

If you power down the card (which you _are_ doing by writing zero to
the MMCIPOWER register), then you have to do a full setup of the card
when you resume.

This is completely unsuitable for runtime-PM usage.
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to