Browse Source

mmc: omap_hsmmc: stop using ->enable|disable() callbacks

The ->enable|disable() callbacks are only used to get and put runtime
PM references. Currently omap_hsmmc's ->set_ios() already does this
itself.

Other host drivers deals with runtime PM without using the
->enable|disable() callbacks and thus do the runtime PM reference
counting themselves. Apply that approach for omap_hsmmc as well and
then discard the ->enable|disable() callbacks.

Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
NeilBrown 10 years ago
parent
commit
f57ba4ca48
1 changed files with 9 additions and 21 deletions
  1. 9 21
      drivers/mmc/host/omap_hsmmc.c

+ 9 - 21
drivers/mmc/host/omap_hsmmc.c

@@ -864,6 +864,8 @@ static void omap_hsmmc_request_done(struct omap_hsmmc_host *host, struct mmc_req
 		return;
 		return;
 	host->mrq = NULL;
 	host->mrq = NULL;
 	mmc_request_done(host->mmc, mrq);
 	mmc_request_done(host->mmc, mrq);
+	pm_runtime_mark_last_busy(host->dev);
+	pm_runtime_put_autosuspend(host->dev);
 }
 }
 
 
 /*
 /*
@@ -1309,6 +1311,8 @@ static void omap_hsmmc_dma_callback(void *param)
 
 
 		host->mrq = NULL;
 		host->mrq = NULL;
 		mmc_request_done(host->mmc, mrq);
 		mmc_request_done(host->mmc, mrq);
+		pm_runtime_mark_last_busy(host->dev);
+		pm_runtime_put_autosuspend(host->dev);
 	}
 	}
 }
 }
 
 
@@ -1541,6 +1545,7 @@ static void omap_hsmmc_request(struct mmc_host *mmc, struct mmc_request *req)
 
 
 	BUG_ON(host->req_in_progress);
 	BUG_ON(host->req_in_progress);
 	BUG_ON(host->dma_ch != -1);
 	BUG_ON(host->dma_ch != -1);
+	pm_runtime_get_sync(host->dev);
 	if (host->protect_card) {
 	if (host->protect_card) {
 		if (host->reqs_blocked < 3) {
 		if (host->reqs_blocked < 3) {
 			/*
 			/*
@@ -1557,6 +1562,8 @@ static void omap_hsmmc_request(struct mmc_host *mmc, struct mmc_request *req)
 			req->data->error = -EBADF;
 			req->data->error = -EBADF;
 		req->cmd->retries = 0;
 		req->cmd->retries = 0;
 		mmc_request_done(mmc, req);
 		mmc_request_done(mmc, req);
+		pm_runtime_mark_last_busy(host->dev);
+		pm_runtime_put_autosuspend(host->dev);
 		return;
 		return;
 	} else if (host->reqs_blocked)
 	} else if (host->reqs_blocked)
 		host->reqs_blocked = 0;
 		host->reqs_blocked = 0;
@@ -1570,6 +1577,8 @@ static void omap_hsmmc_request(struct mmc_host *mmc, struct mmc_request *req)
 			req->data->error = err;
 			req->data->error = err;
 		host->mrq = NULL;
 		host->mrq = NULL;
 		mmc_request_done(mmc, req);
 		mmc_request_done(mmc, req);
+		pm_runtime_mark_last_busy(host->dev);
+		pm_runtime_put_autosuspend(host->dev);
 		return;
 		return;
 	}
 	}
 	if (req->sbc && !(host->flags & AUTO_CMD23)) {
 	if (req->sbc && !(host->flags & AUTO_CMD23)) {
@@ -1773,25 +1782,6 @@ static void omap_hsmmc_conf_bus_power(struct omap_hsmmc_host *host)
 	set_sd_bus_power(host);
 	set_sd_bus_power(host);
 }
 }
 
 
-static int omap_hsmmc_enable_fclk(struct mmc_host *mmc)
-{
-	struct omap_hsmmc_host *host = mmc_priv(mmc);
-
-	pm_runtime_get_sync(host->dev);
-
-	return 0;
-}
-
-static int omap_hsmmc_disable_fclk(struct mmc_host *mmc)
-{
-	struct omap_hsmmc_host *host = mmc_priv(mmc);
-
-	pm_runtime_mark_last_busy(host->dev);
-	pm_runtime_put_autosuspend(host->dev);
-
-	return 0;
-}
-
 static int omap_hsmmc_multi_io_quirk(struct mmc_card *card,
 static int omap_hsmmc_multi_io_quirk(struct mmc_card *card,
 				     unsigned int direction, int blk_size)
 				     unsigned int direction, int blk_size)
 {
 {
@@ -1803,8 +1793,6 @@ static int omap_hsmmc_multi_io_quirk(struct mmc_card *card,
 }
 }
 
 
 static struct mmc_host_ops omap_hsmmc_ops = {
 static struct mmc_host_ops omap_hsmmc_ops = {
-	.enable = omap_hsmmc_enable_fclk,
-	.disable = omap_hsmmc_disable_fclk,
 	.post_req = omap_hsmmc_post_req,
 	.post_req = omap_hsmmc_post_req,
 	.pre_req = omap_hsmmc_pre_req,
 	.pre_req = omap_hsmmc_pre_req,
 	.request = omap_hsmmc_request,
 	.request = omap_hsmmc_request,