2014-05-23 12:16 GMT+02:00 Balaji T K <[email protected]>:
> On Friday 23 May 2014 02:00 PM, Andreas Fenkart wrote:
>>
>>
>> +#ifdef CONFIG_PM_RUNTIME
>
>
> AFAIK, omap_hsmmc can build without these changes,
> So, I think this patch is not needed.
>
> Let me I know If it is not the case.
if do not guard suspend/resume then I have to add guards in patch 1/7:
> @@ -2200,11 +2346,18 @@ static int omap_hsmmc_suspend(struct device *dev)
> pm_runtime_get_sync(host->dev);
>
> if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER)) {
> - omap_hsmmc_disable_irq(host);
> + OMAP_HSMMC_WRITE(host->base, ISE, 0);
> + OMAP_HSMMC_WRITE(host->base, IE, 0);
> + OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
> OMAP_HSMMC_WRITE(host->base, HCTL,
> OMAP_HSMMC_READ(host->base, HCTL) & ~SDBP);
> }
>
> + /* do not wake up due to sdio irq */
> + if ((host->mmc->caps & MMC_CAP_SDIO_IRQ) &&
> + !(host->mmc->pm_flags & MMC_PM_WAKE_SDIO_IRQ))
> + disable_irq(host->wake_irq);
here
> +
> if (host->dbclk)
> clk_disable_unprepare(host->dbclk);
>
> @@ -2230,6 +2383,10 @@ static int omap_hsmmc_resume(struct device *dev)
>
> omap_hsmmc_protect_card(host);
>
> + if ((host->mmc->caps & MMC_CAP_SDIO_IRQ) &&
> + !(host->mmc->pm_flags & MMC_PM_WAKE_SDIO_IRQ))
> + enable_irq(host->wake_irq);
> +
> pm_runtime_mark_last_busy(host->dev);
> pm_runtime_put_autosuspend(host->dev);
> return 0;
> @@ -2246,22 +2403,51 @@ static int omap_hsmmc_resume(struct device *dev)
> static int omap_hsmmc_runtime_suspend(struct device *dev)
> {
> struct omap_hsmmc_host *host;
> + unsigned long flags;
>
> host = platform_get_drvdata(to_platform_device(dev));
> omap_hsmmc_context_save(host);
> dev_dbg(dev, "disabled\n");
>
> + spin_lock_irqsave(&host->irq_lock, flags);
> + if ((host->mmc->caps & MMC_CAP_SDIO_IRQ) &&
> + (host->flags & HSMMC_SDIO_IRQ_ENABLED)) {
> + /* disable sdio irq handling to prevent race */
> + OMAP_HSMMC_WRITE(host->base, ISE, 0);
> + OMAP_HSMMC_WRITE(host->base, IE, 0);
> + OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
> +
> + WARN_ON(host->flags & HSMMC_WAKE_IRQ_ENABLED);
> + enable_irq(host->wake_irq);
and here
> + host->flags |= HSMMC_WAKE_IRQ_ENABLED;
> + }
> + spin_unlock_irqrestore(&host->irq_lock, flags);
> return 0;
> }
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html