Commit 148bcab2 authored by Ulf Hansson's avatar Ulf Hansson

mmc: core: Add helper function for EXT_CSD support

The helper function mmc_can_ext_csd() will return a positive value if
the card supports the EXT_CSD register. Start using it at relavant
places in the mmc core.
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent a1fc444e
...@@ -190,7 +190,7 @@ static int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd) ...@@ -190,7 +190,7 @@ static int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
*new_ext_csd = NULL; *new_ext_csd = NULL;
if (card->csd.mmca_vsn < CSD_SPEC_VER_4) if (!mmc_can_ext_csd(card))
return 0; return 0;
/* /*
...@@ -852,7 +852,7 @@ static int mmc_select_powerclass(struct mmc_card *card) ...@@ -852,7 +852,7 @@ static int mmc_select_powerclass(struct mmc_card *card)
int err, ddr; int err, ddr;
/* Power class selection is supported for versions >= 4.0 */ /* Power class selection is supported for versions >= 4.0 */
if (card->csd.mmca_vsn < CSD_SPEC_VER_4) if (!mmc_can_ext_csd(card))
return 0; return 0;
bus_width = host->ios.bus_width; bus_width = host->ios.bus_width;
...@@ -913,7 +913,7 @@ static int mmc_select_bus_width(struct mmc_card *card) ...@@ -913,7 +913,7 @@ static int mmc_select_bus_width(struct mmc_card *card)
unsigned idx, bus_width = 0; unsigned idx, bus_width = 0;
int err = 0; int err = 0;
if ((card->csd.mmca_vsn < CSD_SPEC_VER_4) && if (!mmc_can_ext_csd(card) &&
!(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)))
return 0; return 0;
...@@ -1154,7 +1154,7 @@ static int mmc_select_timing(struct mmc_card *card) ...@@ -1154,7 +1154,7 @@ static int mmc_select_timing(struct mmc_card *card)
{ {
int err = 0; int err = 0;
if (card->csd.mmca_vsn < CSD_SPEC_VER_4) if (!mmc_can_ext_csd(card))
goto bus_speed; goto bus_speed;
if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200) if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200)
......
...@@ -675,3 +675,8 @@ int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status) ...@@ -675,3 +675,8 @@ int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status)
return 0; return 0;
} }
int mmc_can_ext_csd(struct mmc_card *card)
{
return (card && card->csd.mmca_vsn > CSD_SPEC_VER_3);
}
...@@ -26,6 +26,7 @@ int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp); ...@@ -26,6 +26,7 @@ int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp);
int mmc_spi_set_crc(struct mmc_host *host, int use_crc); int mmc_spi_set_crc(struct mmc_host *host, int use_crc);
int mmc_bus_test(struct mmc_card *card, u8 bus_width); int mmc_bus_test(struct mmc_card *card, u8 bus_width);
int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status); int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status);
int mmc_can_ext_csd(struct mmc_card *card);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment