Skip to content

Commit

Permalink
wbsd: check for data opcode earlier
Browse files Browse the repository at this point in the history
Move the check for supported data opcodes to the beginning of the
request function to avoid wedging the card.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
  • Loading branch information
Pierre Ossman committed May 1, 2007
1 parent da7fbe5 commit b2670b1
Showing 1 changed file with 20 additions and 21 deletions.
41 changes: 20 additions & 21 deletions drivers/mmc/host/wbsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -788,24 +788,7 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
goto done;
}

/*
* Does the request include data?
*/
if (cmd->data) {
wbsd_prepare_data(host, cmd->data);

if (cmd->data->error != MMC_ERR_NONE)
goto done;
}

wbsd_send_command(host, cmd);

/*
* If this is a data transfer the request
* will be finished after the data has
* transfered.
*/
if (cmd->data && (cmd->error == MMC_ERR_NONE)) {
/*
* The hardware is so delightfully stupid that it has a list
* of "data" commands. If a command isn't on this list, it'll
Expand Down Expand Up @@ -837,14 +820,30 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
"supported by this controller.\n",
mmc_hostname(host->mmc), cmd->opcode);
#endif
cmd->data->error = MMC_ERR_INVALID;

if (cmd->data->stop)
wbsd_send_command(host, cmd->data->stop);
cmd->error = MMC_ERR_INVALID;

goto done;
};
}

/*
* Does the request include data?
*/
if (cmd->data) {
wbsd_prepare_data(host, cmd->data);

if (cmd->data->error != MMC_ERR_NONE)
goto done;
}

wbsd_send_command(host, cmd);

/*
* If this is a data transfer the request
* will be finished after the data has
* transfered.
*/
if (cmd->data && (cmd->error == MMC_ERR_NONE)) {
/*
* Dirty fix for hardware bug.
*/
Expand Down

0 comments on commit b2670b1

Please sign in to comment.