diff options
| author | Shawn Lin <[email protected]> | 2020-03-12 08:52:56 +0800 |
|---|---|---|
| committer | Shawn Lin <[email protected]> | 2020-03-12 09:00:41 +0800 |
| commit | 11277014a3361a67e5f939f58aa0540f2016cc02 (patch) | |
| tree | c5df724b4fd99686adf1565a635aae650bf039b7 /components | |
| parent | a33bc0f32183b137c744c6f1012e69ba77e4333b (diff) | |
[Components] sdio: try bus width depends on host's capability
It makes no sense to try bus width if not supported by drivers or BSP,
since we know it must be failed. It saves a lot for booting in time
critical environment.
Signed-off-by: Shawn Lin <[email protected]>
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/sdio/mmc.c | 11 |
1 files changed, 10 insertions, 1 deletions
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]); |
