[U-Boot] [PATCH 3/5] mmc: Tegra2: Factor out mmc_wait_inhibit functionality
Anton Staaf
robotboy at chromium.org
Fri Oct 28 19:55:18 CEST 2011
On Thu, Oct 13, 2011 at 2:57 PM, Anton Staaf <robotboy at 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 at chromium.org>
> Cc: Tom Warren <twarren at nvidia.com>
> Cc: Stephen Warren <swarren at 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
>
>
More information about the U-Boot
mailing list