diff --git a/drivers/mmcsd/mmcsd_sdio.c b/drivers/mmcsd/mmcsd_sdio.c index 567cdd870da..3643ad62390 100644 --- a/drivers/mmcsd/mmcsd_sdio.c +++ b/drivers/mmcsd/mmcsd_sdio.c @@ -2822,15 +2822,23 @@ static int mmcsd_widebus(FAR struct mmcsd_state_s *priv) } #ifdef CONFIG_MMCSD_MMCSUPPORT else if (IS_MMC(priv->type) && - ((priv->buswidth & MMCSD_SCR_BUSWIDTH_4BIT) != 0 && - (priv->caps & SDIO_CAPS_1BIT_ONLY) == 0)) + (priv->caps & SDIO_CAPS_1BIT_ONLY) == 0) { - /* SD card supports 4-bit BUS and host settings is not 1-bit only. - * Configuring MMC - Use MMC_SWITCH access modes. + /* Configuring MMC - Use MMC_SWITCH access modes. + * Select 8-bit if host supports it, otherwise 4-bit. */ - mmcsd_sendcmdpoll(priv, MMCSD_CMD6, - MMC_CMD6_BUSWIDTH(EXT_CSD_BUS_WIDTH_4)); + if (priv->caps & SDIO_CAPS_8BIT) + { + mmcsd_sendcmdpoll(priv, MMCSD_CMD6, + MMC_CMD6_BUSWIDTH(EXT_CSD_BUS_WIDTH_8)); + } + else + { + mmcsd_sendcmdpoll(priv, MMCSD_CMD6, + MMC_CMD6_BUSWIDTH(EXT_CSD_BUS_WIDTH_4)); + } + ret = mmcsd_recv_r1(priv, MMCSD_CMD6); if (ret != OK)