aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSubhash Jadavani <subhashj@codeaurora.org>2012-04-12 10:06:07 -0400
committerChris Ball <cjb@laptop.org>2012-05-09 10:07:12 -0400
commit3d93576e3442a2becb91290d62f1c105fec1150c (patch)
tree9806da64e145f74749d2e639cd00878a1289ca96
parent10942aa40a595d7ff8b4e90f8a762e816367cac3 (diff)
mmc: core: skip card initialization if power class selection fails
With current implementation of power class selection, mmc_select_powerclass() should never fail. So treat any error returned by this function as serious enough to skip the card initialization. Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> Reviewed-by: Namjae Jeon <linkinjeon@gmail.com> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/core/mmc.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 2a9b7b1a4801..163046030773 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -719,6 +719,10 @@ static int mmc_select_powerclass(struct mmc_card *card,
719 card->ext_csd.generic_cmd6_time); 719 card->ext_csd.generic_cmd6_time);
720 } 720 }
721 721
722 if (err)
723 pr_err("%s: power class selection for ext_csd_bus_width %d"
724 " failed\n", mmc_hostname(card->host), bus_width);
725
722 return err; 726 return err;
723} 727}
724 728
@@ -1102,9 +1106,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1102 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4; 1106 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
1103 err = mmc_select_powerclass(card, ext_csd_bits, ext_csd); 1107 err = mmc_select_powerclass(card, ext_csd_bits, ext_csd);
1104 if (err) 1108 if (err)
1105 pr_warning("%s: power class selection to bus width %d" 1109 goto err;
1106 " failed\n", mmc_hostname(card->host),
1107 1 << bus_width);
1108 } 1110 }
1109 1111
1110 /* 1112 /*
@@ -1136,10 +1138,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1136 err = mmc_select_powerclass(card, ext_csd_bits[idx][0], 1138 err = mmc_select_powerclass(card, ext_csd_bits[idx][0],
1137 ext_csd); 1139 ext_csd);
1138 if (err) 1140 if (err)
1139 pr_warning("%s: power class selection to " 1141 goto err;
1140 "bus width %d failed\n",
1141 mmc_hostname(card->host),
1142 1 << bus_width);
1143 1142
1144 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 1143 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1145 EXT_CSD_BUS_WIDTH, 1144 EXT_CSD_BUS_WIDTH,
@@ -1167,10 +1166,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1167 err = mmc_select_powerclass(card, ext_csd_bits[idx][1], 1166 err = mmc_select_powerclass(card, ext_csd_bits[idx][1],
1168 ext_csd); 1167 ext_csd);
1169 if (err) 1168 if (err)
1170 pr_warning("%s: power class selection to " 1169 goto err;
1171 "bus width %d ddr %d failed\n",
1172 mmc_hostname(card->host),
1173 1 << bus_width, ddr);
1174 1170
1175 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 1171 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1176 EXT_CSD_BUS_WIDTH, 1172 EXT_CSD_BUS_WIDTH,