diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2014-10-20 05:33:53 -0400 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2014-11-10 06:40:41 -0500 |
commit | 148bcab28f51c80f13e5ad678fe840e8a34af46f (patch) | |
tree | 9f8d81b82725f2e9e02c82e48acdb79d3e8301ce | |
parent | a1fc444e83de05ebbb6269029c9888b8f8b11490 (diff) |
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: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/core/mmc.c | 8 | ||||
-rw-r--r-- | drivers/mmc/core/mmc_ops.c | 5 | ||||
-rw-r--r-- | drivers/mmc/core/mmc_ops.h | 1 |
3 files changed, 10 insertions, 4 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 5226ef8c0c2d..7c257c93ecd7 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
@@ -190,7 +190,7 @@ static int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd) | |||
190 | 190 | ||
191 | *new_ext_csd = NULL; | 191 | *new_ext_csd = NULL; |
192 | 192 | ||
193 | if (card->csd.mmca_vsn < CSD_SPEC_VER_4) | 193 | if (!mmc_can_ext_csd(card)) |
194 | return 0; | 194 | return 0; |
195 | 195 | ||
196 | /* | 196 | /* |
@@ -852,7 +852,7 @@ static int mmc_select_powerclass(struct mmc_card *card) | |||
852 | int err, ddr; | 852 | int err, ddr; |
853 | 853 | ||
854 | /* Power class selection is supported for versions >= 4.0 */ | 854 | /* Power class selection is supported for versions >= 4.0 */ |
855 | if (card->csd.mmca_vsn < CSD_SPEC_VER_4) | 855 | if (!mmc_can_ext_csd(card)) |
856 | return 0; | 856 | return 0; |
857 | 857 | ||
858 | bus_width = host->ios.bus_width; | 858 | bus_width = host->ios.bus_width; |
@@ -913,7 +913,7 @@ static int mmc_select_bus_width(struct mmc_card *card) | |||
913 | unsigned idx, bus_width = 0; | 913 | unsigned idx, bus_width = 0; |
914 | int err = 0; | 914 | int err = 0; |
915 | 915 | ||
916 | if ((card->csd.mmca_vsn < CSD_SPEC_VER_4) && | 916 | if (!mmc_can_ext_csd(card) && |
917 | !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) | 917 | !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) |
918 | return 0; | 918 | return 0; |
919 | 919 | ||
@@ -1154,7 +1154,7 @@ static int mmc_select_timing(struct mmc_card *card) | |||
1154 | { | 1154 | { |
1155 | int err = 0; | 1155 | int err = 0; |
1156 | 1156 | ||
1157 | if (card->csd.mmca_vsn < CSD_SPEC_VER_4) | 1157 | if (!mmc_can_ext_csd(card)) |
1158 | goto bus_speed; | 1158 | goto bus_speed; |
1159 | 1159 | ||
1160 | if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200) | 1160 | if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200) |
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 7911e0510a1d..1db60be43c37 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c | |||
@@ -675,3 +675,8 @@ int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status) | |||
675 | 675 | ||
676 | return 0; | 676 | return 0; |
677 | } | 677 | } |
678 | |||
679 | int mmc_can_ext_csd(struct mmc_card *card) | ||
680 | { | ||
681 | return (card && card->csd.mmca_vsn > CSD_SPEC_VER_3); | ||
682 | } | ||
diff --git a/drivers/mmc/core/mmc_ops.h b/drivers/mmc/core/mmc_ops.h index f752ec67c102..6f4b00ed93de 100644 --- a/drivers/mmc/core/mmc_ops.h +++ b/drivers/mmc/core/mmc_ops.h | |||
@@ -26,6 +26,7 @@ int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp); | |||
26 | int mmc_spi_set_crc(struct mmc_host *host, int use_crc); | 26 | int mmc_spi_set_crc(struct mmc_host *host, int use_crc); |
27 | int mmc_bus_test(struct mmc_card *card, u8 bus_width); | 27 | int mmc_bus_test(struct mmc_card *card, u8 bus_width); |
28 | int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status); | 28 | int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status); |
29 | int mmc_can_ext_csd(struct mmc_card *card); | ||
29 | 30 | ||
30 | #endif | 31 | #endif |
31 | 32 | ||