mmc: block: fix the data timeout issue with ACMD22
authorSubhash Jadavani <subhashj@codeaurora.org>
Wed, 13 Jun 2012 11:40:43 +0000 (17:10 +0530)
committerChris Ball <cjb@laptop.org>
Tue, 26 Jun 2012 20:10:29 +0000 (16:10 -0400)
commitd380443cd0271903bf9516bc04cead81676be034
tree27e5660f45086886fc3679679bb7ada7dfeb860a
parentd1346a6cbabf6d377d753f1adc16cb0b305830cc
mmc: block: fix the data timeout issue with ACMD22

If multi block write operation fails for SD card, during
error handling we send the SD_APP_SEND_NUM_WR_BLKS (ACMD22)
to know how many blocks were already programmed by card.

But mmc_sd_num_wr_blocks() function which sends the ACMD22
calculates the data timeout value from csd.tacc_ns and
csd.tacc_clks parameters which will be 0 for block addressed
(>2GB cards) SD card. This would result in timeout_ns and
timeout_clks being 0 in the mmc_request passed to host driver.
This means host controller would program its data timeout timer
value with 0 which could result in DATA TIMEOUT errors from
controller.

To fix this issue, mmc_sd_num_wr_blocks() should instead
just call the mmc_set_data_timeout() to calculate the
data timeout value. mmc_set_data_timeout() function
ensures that non zero timeout value is set even for
block addressed SD cards.

Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/card/block.c