summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-03-13 16:48:59 +0800
committerGitHub <[email protected]>2020-03-13 16:48:59 +0800
commit23d02c68c03c2a50a09309150425bc31e843c696 (patch)
tree672ba0ab47feda7c9cffead2d2c3315d60fe23a0 /components
parentea968f6833c98bd6768ffdcb43fa03f8c3bc71d3 (diff)
parent11277014a3361a67e5f939f58aa0540f2016cc02 (diff)
Merge pull request #3441 from shawn1221/mmc-upstream-20200312
component sdio fix
Diffstat (limited to 'components')
-rw-r--r--components/drivers/sdio/block_dev.c2
-rw-r--r--components/drivers/sdio/mmc.c11
2 files changed, 10 insertions, 3 deletions
diff --git a/components/drivers/sdio/block_dev.c b/components/drivers/sdio/block_dev.c
index 5db0f38c08..602acb9aa7 100644
--- a/components/drivers/sdio/block_dev.c
+++ b/components/drivers/sdio/block_dev.c
@@ -460,8 +460,6 @@ rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card)
rt_device_register(&blk_dev->dev, "sd0",
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE);
rt_list_insert_after(&blk_devices, &blk_dev->list);
-
- break;
}
else
{
diff --git a/components/drivers/sdio/mmc.c b/components/drivers/sdio/mmc.c
index 7b1f7ee193..f77fbd959e 100644
--- a/components/drivers/sdio/mmc.c
+++ b/components/drivers/sdio/mmc.c
@@ -318,8 +318,17 @@ static int mmc_select_bus_width(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
* the device to work in 8bit transfer mode. If the
* mmc switch command returns error then switch to
* 4bit transfer mode. On success set the corresponding
- * bus width on the host.
+ * bus width on the host. Meanwhile, mmc core would
+ * bail out early if corresponding bus capable wasn't
+ * set by drivers.
*/
+ if ((!(host->flags & MMCSD_BUSWIDTH_8) &&
+ ext_csd_bits[idx] == EXT_CSD_BUS_WIDTH_8) ||
+ (!(host->flags & MMCSD_BUSWIDTH_4) &&
+ (ext_csd_bits[idx] == EXT_CSD_BUS_WIDTH_4 ||
+ ext_csd_bits[idx] == EXT_CSD_BUS_WIDTH_8)))
+ continue;
+
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
EXT_CSD_BUS_WIDTH,
ext_csd_bits[idx]);