diff mbox

[U-Boot,3/5] mmc: Tegra2: Factor out mmc_wait_inhibit functionality

Message ID 1318543028-22720-4-git-send-email-robotboy@chromium.org
State Superseded, archived
Delegated to: Andy Fleming
Headers show

Commit Message

Anton staaf Oct. 13, 2011, 9:57 p.m. UTC
This is a well encapsulated section of mmc_send_cmd, by moving
it to it's own function it increases the readability of mmc_send_cmd.

Signed-off-by: Anton Staaf <robotboy@chromium.org>
Cc: Tom Warren <twarren@nvidia.com>
Cc: Stephen Warren <swarren@nvidia.com>
---
 drivers/mmc/tegra2_mmc.c |   41 ++++++++++++++++++++++++++---------------
 1 files changed, 26 insertions(+), 15 deletions(-)

Comments

Anton staaf Oct. 28, 2011, 5:55 p.m. UTC | #1
On Thu, Oct 13, 2011 at 2:57 PM, Anton Staaf <robotboy@chromium.org> wrote:
> This is a well encapsulated section of mmc_send_cmd, by moving
> it to it's own function it increases the readability of mmc_send_cmd.
>
> Signed-off-by: Anton Staaf <robotboy@chromium.org>
> Cc: Tom Warren <twarren@nvidia.com>
> Cc: Stephen Warren <swarren@nvidia.com>

Adding Albert to CC.

-Anton

> ---
>  drivers/mmc/tegra2_mmc.c |   41 ++++++++++++++++++++++++++---------------
>  1 files changed, 26 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mmc/tegra2_mmc.c b/drivers/mmc/tegra2_mmc.c
> index 27564b0..141429e 100644
> --- a/drivers/mmc/tegra2_mmc.c
> +++ b/drivers/mmc/tegra2_mmc.c
> @@ -102,18 +102,12 @@ static void mmc_set_transfer_mode(struct mmc_host *host, struct mmc_data *data)
>        writew(mode, &host->reg->trnmod);
>  }
>
> -static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> -                       struct mmc_data *data)
> +static int mmc_wait_inhibit(struct mmc_host *host,
> +                           struct mmc_cmd *cmd,
> +                           struct mmc_data *data,
> +                           unsigned int timeout)
>  {
> -       struct mmc_host *host = (struct mmc_host *)mmc->priv;
> -       int flags, i;
> -       unsigned int timeout;
> -       unsigned int mask;
> -       unsigned int retry = 0x100000;
> -       debug(" mmc_send_cmd called\n");
> -
> -       /* Wait max 10 ms */
> -       timeout = 10;
> +       unsigned int mask = 0;
>
>        /*
>         * PRNSTS
> @@ -121,15 +115,13 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
>         * CMDINHCMD[0] : Command Inhibit (CMD)
>         */
>        mask = (1 << 0);
> -       if ((data != NULL) || (cmd->resp_type & MMC_RSP_BUSY))
> -               mask |= (1 << 1);
>
>        /*
>         * We shouldn't wait for data inhibit for stop commands, even
>         * though they might use busy signaling
>         */
> -       if (data)
> -               mask &= ~(1 << 1);
> +       if ((data == NULL) && (cmd->resp_type & MMC_RSP_BUSY))
> +               mask |= (1 << 1);
>
>        while (readl(&host->reg->prnsts) & mask) {
>                if (timeout == 0) {
> @@ -140,6 +132,25 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
>                udelay(1000);
>        }
>
> +       return 0;
> +}
> +
> +static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> +                       struct mmc_data *data)
> +{
> +       struct mmc_host *host = (struct mmc_host *)mmc->priv;
> +       int flags, i;
> +       int result;
> +       unsigned int timeout;
> +       unsigned int mask;
> +       unsigned int retry = 0x100000;
> +       debug(" mmc_send_cmd called\n");
> +
> +       result = mmc_wait_inhibit(host, cmd, data, 10 /* ms */);
> +
> +       if (result < 0)
> +               return result;
> +
>        if (data)
>                mmc_prepare_data(host, data);
>
> --
> 1.7.3.1
>
>
diff mbox

Patch

diff --git a/drivers/mmc/tegra2_mmc.c b/drivers/mmc/tegra2_mmc.c
index 27564b0..141429e 100644
--- a/drivers/mmc/tegra2_mmc.c
+++ b/drivers/mmc/tegra2_mmc.c
@@ -102,18 +102,12 @@  static void mmc_set_transfer_mode(struct mmc_host *host, struct mmc_data *data)
 	writew(mode, &host->reg->trnmod);
 }
 
-static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
-			struct mmc_data *data)
+static int mmc_wait_inhibit(struct mmc_host *host,
+			    struct mmc_cmd *cmd,
+			    struct mmc_data *data,
+			    unsigned int timeout)
 {
-	struct mmc_host *host = (struct mmc_host *)mmc->priv;
-	int flags, i;
-	unsigned int timeout;
-	unsigned int mask;
-	unsigned int retry = 0x100000;
-	debug(" mmc_send_cmd called\n");
-
-	/* Wait max 10 ms */
-	timeout = 10;
+	unsigned int mask = 0;
 
 	/*
 	 * PRNSTS
@@ -121,15 +115,13 @@  static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	 * CMDINHCMD[0]	: Command Inhibit (CMD)
 	 */
 	mask = (1 << 0);
-	if ((data != NULL) || (cmd->resp_type & MMC_RSP_BUSY))
-		mask |= (1 << 1);
 
 	/*
 	 * We shouldn't wait for data inhibit for stop commands, even
 	 * though they might use busy signaling
 	 */
-	if (data)
-		mask &= ~(1 << 1);
+	if ((data == NULL) && (cmd->resp_type & MMC_RSP_BUSY))
+		mask |= (1 << 1);
 
 	while (readl(&host->reg->prnsts) & mask) {
 		if (timeout == 0) {
@@ -140,6 +132,25 @@  static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 		udelay(1000);
 	}
 
+	return 0;
+}
+
+static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
+			struct mmc_data *data)
+{
+	struct mmc_host *host = (struct mmc_host *)mmc->priv;
+	int flags, i;
+	int result;
+	unsigned int timeout;
+	unsigned int mask;
+	unsigned int retry = 0x100000;
+	debug(" mmc_send_cmd called\n");
+
+	result = mmc_wait_inhibit(host, cmd, data, 10 /* ms */);
+
+	if (result < 0)
+		return result;
+
 	if (data)
 		mmc_prepare_data(host, data);