aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2014-10-20 05:33:53 -0400
committerUlf Hansson <ulf.hansson@linaro.org>2014-11-10 06:40:41 -0500
commit148bcab28f51c80f13e5ad678fe840e8a34af46f (patch)
tree9f8d81b82725f2e9e02c82e48acdb79d3e8301ce
parenta1fc444e83de05ebbb6269029c9888b8f8b11490 (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.c8
-rw-r--r--drivers/mmc/core/mmc_ops.c5
-rw-r--r--drivers/mmc/core/mmc_ops.h1
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
679int 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);
26int mmc_spi_set_crc(struct mmc_host *host, int use_crc); 26int mmc_spi_set_crc(struct mmc_host *host, int use_crc);
27int mmc_bus_test(struct mmc_card *card, u8 bus_width); 27int mmc_bus_test(struct mmc_card *card, u8 bus_width);
28int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status); 28int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status);
29int mmc_can_ext_csd(struct mmc_card *card);
29 30
30#endif 31#endif
31 32