diff mbox

[v13,1/7] mmc: omap_hsmmc: install dummy pm runtime hooks if !CONFIG_PM_RUNTIME

Message ID 1400833834-15893-2-git-send-email-afenkart@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Andreas Fenkart May 23, 2014, 8:30 a.m. UTC
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>

Comments

Balaji T K May 23, 2014, 10:16 a.m. UTC | #1
On Friday 23 May 2014 02:00 PM, Andreas Fenkart wrote:
> Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index 272e0ee..c62d9dd 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -199,7 +199,9 @@ struct omap_hsmmc_host {
>   	struct dma_chan		*rx_chan;
>   	int			slot_id;
>   	int			response_busy;
> +#ifdef CONFIG_PM
>   	int			context_loss;
> +#endif
>   	int			protect_card;
>   	int			reqs_blocked;
>   	int			use_reg;
> @@ -712,14 +714,8 @@ static void omap_hsmmc_context_save(struct omap_hsmmc_host *host)
>
>   #else
>
> -static int omap_hsmmc_context_restore(struct omap_hsmmc_host *host)
> -{
> -	return 0;
> -}
> -
> -static void omap_hsmmc_context_save(struct omap_hsmmc_host *host)
> -{
> -}
> +#define omap_hsmmc_context_restore(host)
> +#define omap_hsmmc_context_save(host)
>
>   #endif
>
> @@ -1700,11 +1696,14 @@ static int omap_hsmmc_regs_show(struct seq_file *s, void *data)
>   	struct mmc_host *mmc = s->private;
>   	struct omap_hsmmc_host *host = mmc_priv(mmc);
>
> -	seq_printf(s, "mmc%d:\n ctx_loss:\t%d\n\nregs:\n",
> -			mmc->index, host->context_loss);
> +	seq_printf(s, "mmc%d:\n", mmc->index);
>
> -	pm_runtime_get_sync(host->dev);
> +#ifdef CONFIG_PM
> +	seq_printf(s, "ctx_loss:\t%d\n", host->context_loss);
> +#endif
>
> +	pm_runtime_get_sync(host->dev);
> +	seq_puts(s, "\nregs:\n");
>   	seq_printf(s, "CON:\t\t0x%08x\n",
>   			OMAP_HSMMC_READ(host->base, CON));
>   	seq_printf(s, "HCTL:\t\t0x%08x\n",
> @@ -2243,6 +2242,7 @@ static int omap_hsmmc_resume(struct device *dev)
>   #define omap_hsmmc_resume	NULL
>   #endif
>
> +#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.

>   static int omap_hsmmc_runtime_suspend(struct device *dev)
>   {
>   	struct omap_hsmmc_host *host;
> @@ -2264,6 +2264,10 @@ static int omap_hsmmc_runtime_resume(struct device *dev)
>
>   	return 0;
>   }
> +#else
> +#define omap_hsmmc_runtime_suspend	NULL
> +#define omap_hsmmc_runtime_resume	NULL
> +#endif
>
>   static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
>   	.suspend	= omap_hsmmc_suspend,
>

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andreas Fenkart May 23, 2014, 12:10 p.m. UTC | #2
2014-05-23 12:16 GMT+02:00 Balaji T K <balajitk@ti.com>:
> 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-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 272e0ee..c62d9dd 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -199,7 +199,9 @@  struct omap_hsmmc_host {
 	struct dma_chan		*rx_chan;
 	int			slot_id;
 	int			response_busy;
+#ifdef CONFIG_PM
 	int			context_loss;
+#endif
 	int			protect_card;
 	int			reqs_blocked;
 	int			use_reg;
@@ -712,14 +714,8 @@  static void omap_hsmmc_context_save(struct omap_hsmmc_host *host)
 
 #else
 
-static int omap_hsmmc_context_restore(struct omap_hsmmc_host *host)
-{
-	return 0;
-}
-
-static void omap_hsmmc_context_save(struct omap_hsmmc_host *host)
-{
-}
+#define omap_hsmmc_context_restore(host)
+#define omap_hsmmc_context_save(host)
 
 #endif
 
@@ -1700,11 +1696,14 @@  static int omap_hsmmc_regs_show(struct seq_file *s, void *data)
 	struct mmc_host *mmc = s->private;
 	struct omap_hsmmc_host *host = mmc_priv(mmc);
 
-	seq_printf(s, "mmc%d:\n ctx_loss:\t%d\n\nregs:\n",
-			mmc->index, host->context_loss);
+	seq_printf(s, "mmc%d:\n", mmc->index);
 
-	pm_runtime_get_sync(host->dev);
+#ifdef CONFIG_PM
+	seq_printf(s, "ctx_loss:\t%d\n", host->context_loss);
+#endif
 
+	pm_runtime_get_sync(host->dev);
+	seq_puts(s, "\nregs:\n");
 	seq_printf(s, "CON:\t\t0x%08x\n",
 			OMAP_HSMMC_READ(host->base, CON));
 	seq_printf(s, "HCTL:\t\t0x%08x\n",
@@ -2243,6 +2242,7 @@  static int omap_hsmmc_resume(struct device *dev)
 #define omap_hsmmc_resume	NULL
 #endif
 
+#ifdef CONFIG_PM_RUNTIME
 static int omap_hsmmc_runtime_suspend(struct device *dev)
 {
 	struct omap_hsmmc_host *host;
@@ -2264,6 +2264,10 @@  static int omap_hsmmc_runtime_resume(struct device *dev)
 
 	return 0;
 }
+#else
+#define omap_hsmmc_runtime_suspend	NULL
+#define omap_hsmmc_runtime_resume	NULL
+#endif
 
 static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
 	.suspend	= omap_hsmmc_suspend,