mmc: core: Indicate SD specs higher than 4.0
authorAvri Altman <avri.altman@wdc.com>
Wed, 6 Feb 2019 11:28:06 +0000 (13:28 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 25 Feb 2019 07:40:58 +0000 (08:40 +0100)
SD specs version 4.x and 5.x have a dedicated slices in the SCR register.
Higher versions will rely on a combination of the existing fields.

Signed-off-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/sd.c
include/linux/mmc/card.h

index bd48b28..c2db94d 100644 (file)
@@ -209,6 +209,11 @@ static int mmc_decode_scr(struct mmc_card *card)
                /* Check if Physical Layer Spec v3.0 is supported */
                scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
 
+       if (scr->sda_spec3) {
+               scr->sda_spec4 = UNSTUFF_BITS(resp, 42, 1);
+               scr->sda_specx = UNSTUFF_BITS(resp, 38, 4);
+       }
+
        if (UNSTUFF_BITS(resp, 55, 1))
                card->erased_byte = 0xFF;
        else
index e2bbceb..19566ab 100644 (file)
@@ -133,6 +133,8 @@ struct mmc_ext_csd {
 struct sd_scr {
        unsigned char           sda_vsn;
        unsigned char           sda_spec3;
+       unsigned char           sda_spec4;
+       unsigned char           sda_specx;
        unsigned char           bus_widths;
 #define SD_SCR_BUS_WIDTH_1     (1<<0)
 #define SD_SCR_BUS_WIDTH_4     (1<<2)