mmc: core: Fetch and decode EXT_CSD from mmc_read_ext_csd()
authorUlf Hansson <ulf.hansson@linaro.org>
Mon, 20 Oct 2014 11:37:24 +0000 (13:37 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 10 Nov 2014 11:40:42 +0000 (12:40 +0100)
As a step in cleaning up code around reading/decoding EXT_CSD, convert
the current mmc_read_ext_csd(), to handle both fetching the EXT_CSD
and decoding its data.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/mmc.c

index 7c257c93ecd78ff8327cab377f1392265682e7e1..13f8e3672606074e5ddd92a24b4e5b786f6bbbe3 100644 (file)
@@ -388,7 +388,7 @@ static void mmc_manage_gp_partitions(struct mmc_card *card, u8 *ext_csd)
 /*
  * Decode extended CSD.
  */
-static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
+static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
 {
        int err = 0, idx;
        unsigned int part_size;
@@ -637,6 +637,20 @@ out:
        return err;
 }
 
+static int mmc_read_ext_csd(struct mmc_card *card)
+{
+       u8 *ext_csd = NULL;
+       int err;
+
+       err = mmc_get_ext_csd(card, &ext_csd);
+       if (err)
+               return err;
+
+       err = mmc_decode_ext_csd(card, ext_csd);
+       kfree(ext_csd);
+       return err;
+}
+
 static int mmc_compare_ext_csds(struct mmc_card *card, unsigned bus_width)
 {
        u8 *bw_ext_csd;
@@ -1259,7 +1273,6 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
        int err;
        u32 cid[4];
        u32 rocr;
-       u8 *ext_csd = NULL;
 
        BUG_ON(!host);
        WARN_ON(!host->claimed);
@@ -1368,14 +1381,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
        }
 
        if (!oldcard) {
-               /*
-                * Fetch and process extended CSD.
-                */
-
-               err = mmc_get_ext_csd(card, &ext_csd);
-               if (err)
-                       goto free_card;
-               err = mmc_read_ext_csd(card, ext_csd);
+               /* Read extended CSD. */
+               err = mmc_read_ext_csd(card);
                if (err)
                        goto free_card;
 
@@ -1552,15 +1559,12 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
        if (!oldcard)
                host->card = card;
 
-       kfree(ext_csd);
        return 0;
 
 free_card:
        if (!oldcard)
                mmc_remove_card(card);
 err:
-       kfree(ext_csd);
-
        return err;
 }