summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/sdio_bus.c
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@csr.com>2007-08-08 15:23:48 +0200
committerPierre Ossman <drzeus@drzeus.cx>2007-09-23 21:19:26 +0200
commit9a08f82b3cc522f727ace580a2aaee5402435bc8 (patch)
tree81818bba503a469184883b0ea8c436b9ce97aa0f /drivers/mmc/core/sdio_bus.c
parentsdio: add SDIO_FBR_BASE(f) macro (diff)
downloadlinux-9a08f82b3cc522f727ace580a2aaee5402435bc8.tar.xz
linux-9a08f82b3cc522f727ace580a2aaee5402435bc8.zip
sdio: set the functions' block size
Before a driver is probed, set the function's block size to the default so the driver is sure the block size is something sensible and it needn't explicitly set it. The default block size is the largest that's supported by both the card and the host, with a maximum of 512 to ensure aribitrarily sized transfer use the optimal (least) number of commands. See http://lkml.org/lkml/2007/8/7/150 for reasons for the block size choice. Signed-off-by: David Vrabel <david.vrabel@csr.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc/core/sdio_bus.c')
-rw-r--r--drivers/mmc/core/sdio_bus.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index d229020db4a2..fcb13fb0daad 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -128,11 +128,20 @@ static int sdio_bus_probe(struct device *dev)
struct sdio_driver *drv = to_sdio_driver(dev->driver);
struct sdio_func *func = dev_to_sdio_func(dev);
const struct sdio_device_id *id;
+ int ret;
id = sdio_match_device(func, drv);
if (!id)
return -ENODEV;
+ /* Set the default block size so the driver is sure it's something
+ * sensible. */
+ sdio_claim_host(func);
+ ret = sdio_set_block_size(func, 0);
+ sdio_release_host(func);
+ if (ret)
+ return ret;
+
return drv->probe(func, id);
}