summaryrefslogtreecommitdiff
path: root/drivers/mmc/core/sdio_bus.c
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@csr.com>2007-08-08 13:23:48 (GMT)
committerPierre Ossman <drzeus@drzeus.cx>2007-09-23 19:19:26 (GMT)
commit9a08f82b3cc522f727ace580a2aaee5402435bc8 (patch)
tree81818bba503a469184883b0ea8c436b9ce97aa0f /drivers/mmc/core/sdio_bus.c
parent7616ee95f27a04fd5a6434e9ef4a82cec4b2807c (diff)
downloadlinux-fsl-qoriq-9a08f82b3cc522f727ace580a2aaee5402435bc8.tar.xz
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 d229020..fcb13fb 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);
}