aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorBenzi Zbit <benzi.zbit@intel.com>2008-07-10 02:41:43 +0300
committerPierre Ossman <drzeus@drzeus.cx>2008-07-15 15:47:03 +0200
commit62a7573ee9f31d4fdb330b3e68ebf6efaba1d57c (patch)
tree33a3823791937d3e9d26eb08c4e15c39d377c21f /drivers/mmc
parentc71f65129a1fb67bc6b9b8d03b493675b5c9302b (diff)
downloadkernel_samsung_smdk4412-62a7573ee9f31d4fdb330b3e68ebf6efaba1d57c.zip
kernel_samsung_smdk4412-62a7573ee9f31d4fdb330b3e68ebf6efaba1d57c.tar.gz
kernel_samsung_smdk4412-62a7573ee9f31d4fdb330b3e68ebf6efaba1d57c.tar.bz2
sdio: fix the use of hard coded timeout value.
This adds reading and using of enable_timeout from the CIS Signed-off-by: Benzi Zbit <benzi.zbit@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/core/sdio_cis.c6
-rwxr-xr-xdrivers/mmc/core/sdio_io.c6
2 files changed, 7 insertions, 5 deletions
diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c
index d5e51b1..956bd76 100644
--- a/drivers/mmc/core/sdio_cis.c
+++ b/drivers/mmc/core/sdio_cis.c
@@ -129,6 +129,12 @@ static int cistpl_funce_func(struct sdio_func *func,
/* TPLFE_MAX_BLK_SIZE */
func->max_blksize = buf[12] | (buf[13] << 8);
+ /* TPLFE_ENABLE_TIMEOUT_VAL, present in ver 1.1 and above */
+ if (vsn > SDIO_SDIO_REV_1_00)
+ func->enable_timeout = (buf[28] | (buf[29] << 8)) * 10;
+ else
+ func->enable_timeout = jiffies_to_msecs(HZ);
+
return 0;
}
diff --git a/drivers/mmc/core/sdio_io.c b/drivers/mmc/core/sdio_io.c
index 3ccf691..0888df6 100755
--- a/drivers/mmc/core/sdio_io.c
+++ b/drivers/mmc/core/sdio_io.c
@@ -76,11 +76,7 @@ int sdio_enable_func(struct sdio_func *func)
if (ret)
goto err;
- /*
- * FIXME: This should timeout based on information in the CIS,
- * but we don't have card to parse that yet.
- */
- timeout = jiffies + HZ;
+ timeout = jiffies + msecs_to_jiffies(func->enable_timeout);
while (1) {
ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IORx, 0, &reg);