diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h index ede2f4e5b952fd781013c13ea788a0e3b7929cd4..edfcfd76751136e068d6a006f41db87934c2907e 100644 --- a/drivers/mmc/host/tmio_mmc.h +++ b/drivers/mmc/host/tmio_mmc.h @@ -49,6 +49,9 @@ struct tmio_mmc_host { struct mmc_host *mmc; unsigned int sdio_irq_enabled; + /* Controller power state */ + bool power; + /* Callbacks for clock / power control */ void (*set_pwr)(struct platform_device *host, int state); void (*set_clk_div)(struct platform_device *host, int state); diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c index 42970ab6e803d72e36473294f32d9775e9c624ac..9f22681a37bdb4da7e838cfcfe97b1313fb604bf 100644 --- a/drivers/mmc/host/tmio_mmc_pio.c +++ b/drivers/mmc/host/tmio_mmc_pio.c @@ -762,7 +762,6 @@ static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) { struct tmio_mmc_host *host = mmc_priv(mmc); - struct tmio_mmc_data *pdata = host->pdata; unsigned long flags; mutex_lock(&host->ios_lock); @@ -792,15 +791,15 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) spin_unlock_irqrestore(&host->lock, flags); /* - * pdata->power toggles between false and true in both cases - either + * host->power toggles between false and true in both cases - either * or not the controller can be runtime-suspended during inactivity. * But if the controller has to be kept on, the runtime-pm usage_count * is kept positive, so no suspending actually takes place. */ if (ios->power_mode == MMC_POWER_ON && ios->clock) { - if (!pdata->power) { + if (!host->power) { pm_runtime_get_sync(&host->pdev->dev); - pdata->power = true; + host->power = true; } tmio_mmc_set_clock(host, ios->clock); /* power up SD bus */ @@ -811,8 +810,8 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) } else if (ios->power_mode != MMC_POWER_UP) { if (host->set_pwr && ios->power_mode == MMC_POWER_OFF) host->set_pwr(host->pdev, 0); - if (pdata->power) { - pdata->power = false; + if (host->power) { + host->power = false; pm_runtime_put(&host->pdev->dev); } tmio_mmc_clk_stop(host); @@ -923,7 +922,7 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host, mmc->caps & MMC_CAP_NEEDS_POLL || mmc->caps & MMC_CAP_NONREMOVABLE); - pdata->power = false; + _host->power = false; pm_runtime_enable(&pdev->dev); ret = pm_runtime_resume(&pdev->dev); if (ret < 0) diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index 5a197de4aac9905c4608dbba3a179c907142dd76..f5171dbf8850c5c036e2e431ade03382bbe21983 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h @@ -105,7 +105,6 @@ struct tmio_mmc_data { u32 ocr_mask; /* available voltages */ struct tmio_mmc_dma *dma; struct device *dev; - bool power; unsigned int cd_gpio; void (*set_pwr)(struct platform_device *host, int state); void (*set_clk_div)(struct platform_device *host, int state);