goto out;
}
+ if (cq_host->ops->runtime_pm_get)
+ cq_host->ops->runtime_pm_get(mmc);
+
spin_lock_irqsave(&cq_host->cmdq_lock, flags);
if (mrq->cmdq_req->cmdq_req_flags & DCMD) {
mrq = cq_host->mrq_slot[tag];
mrq->done(mrq);
+ if (cq_host->ops->runtime_pm_put)
+ cq_host->ops->runtime_pm_put(mmc);
}
irqreturn_t cmdq_irq(struct mmc_host *mmc, u32 intmask)
{
return cmdq_init(host->cq_host, mmc, dma64);
}
+
+static void sdhci_cmdq_runtime_pm_get(struct mmc_host *mmc)
+{
+ struct sdhci_host *host = mmc_priv(mmc);
+
+ sdhci_runtime_pm_get(host);
+}
+
+static void sdhci_cmdq_runtime_pm_put(struct mmc_host *mmc)
+{
+ struct sdhci_host *host = mmc_priv(mmc);
+
+ sdhci_runtime_pm_put(host);
+}
#else
static void sdhci_cmdq_clear_set_irqs(struct mmc_host *mmc, u32 clear, u32 set)
{
return -ENOSYS;
}
+static void sdhci_cmdq_runtime_pm_get(struct mmc_host *mmc)
+{
+
+}
+
+static void sdhci_cmdq_runtime_pm_put(struct mmc_host *mmc)
+{
+
+}
+
#endif
static const struct cmdq_host_ops sdhci_cmdq_ops = {
.clear_set_irqs = sdhci_cmdq_clear_set_irqs,
.set_data_timeout = sdhci_cmdq_set_data_timeout,
.dump_vendor_regs = sdhci_cmdq_dump_vendor_regs,
+ .runtime_pm_get = sdhci_cmdq_runtime_pm_get,
+ .runtime_pm_put = sdhci_cmdq_runtime_pm_put,
};
int sdhci_add_host(struct sdhci_host *host)
void (*dump_vendor_regs)(struct mmc_host *mmc);
void (*write_l)(struct cmdq_host *host, u32 val, int reg);
u32 (*read_l)(struct cmdq_host *host, int reg);
+ void (*runtime_pm_get)(struct mmc_host *mmc);
+ void (*runtime_pm_put)(struct mmc_host *mmc);
};
static inline void cmdq_writel(struct cmdq_host *host, u32 val, int reg)