On Thu, Oct 13, 2011 at 2:57 PM, Anton Staaf <robot...@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 <robot...@chromium.org> > Cc: Tom Warren <twar...@nvidia.com> > Cc: Stephen Warren <swar...@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 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot