···5656/*5757 * Given the decoded CSD structure, decode the raw CID to our CID structure.5858 */5959-static void mmc_decode_cid(struct mmc_card *card)5959+static int mmc_decode_cid(struct mmc_card *card)6060{6161 u32 *resp = card->raw_cid;6262···101101 default:102102 printk("%s: card has unknown MMCA version %d\n",103103 mmc_hostname(card->host), card->csd.mmca_vsn);104104- mmc_card_set_bad(card);105105- break;104104+ return -EINVAL;106105 }106106+107107+ return 0;107108}108109109110/*110111 * Given a 128-bit response, decode to our card CSD structure.111112 */112112-static void mmc_decode_csd(struct mmc_card *card)113113+static int mmc_decode_csd(struct mmc_card *card)113114{114115 struct mmc_csd *csd = &card->csd;115116 unsigned int e, m, csd_struct;···124123 if (csd_struct != 1 && csd_struct != 2) {125124 printk("%s: unrecognised CSD structure version %d\n",126125 mmc_hostname(card->host), csd_struct);127127- mmc_card_set_bad(card);128128- return;126126+ return -EINVAL;129127 }130128131129 csd->mmca_vsn = UNSTUFF_BITS(resp, 122, 4);···149149 csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);150150 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);151151 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);152152+153153+ return 0;152154}153155154156/*···302300 if (err != MMC_ERR_NONE)303301 goto free_card;304302305305- mmc_decode_csd(card);306306- mmc_decode_cid(card);303303+ err = mmc_decode_csd(card);304304+ if (err < 0)305305+ goto free_card;306306+ err = mmc_decode_cid(card);307307+ if (err < 0)308308+ goto free_card;307309 }308310309311 /*
+15-8
drivers/mmc/core/sd.c
···8888/*8989 * Given a 128-bit response, decode to our card CSD structure.9090 */9191-static void mmc_decode_csd(struct mmc_card *card)9191+static int mmc_decode_csd(struct mmc_card *card)9292{9393 struct mmc_csd *csd = &card->csd;9494 unsigned int e, m, csd_struct;···151151 default:152152 printk("%s: unrecognised CSD structure version %d\n",153153 mmc_hostname(card->host), csd_struct);154154- mmc_card_set_bad(card);155155- return;154154+ return -EINVAL;156155 }156156+157157+ return 0;157158}158159159160/*160161 * Given a 64-bit response, decode to our card SCR structure.161162 */162162-static void mmc_decode_scr(struct mmc_card *card)163163+static int mmc_decode_scr(struct mmc_card *card)163164{164165 struct sd_scr *scr = &card->scr;165166 unsigned int scr_struct;···175174 if (scr_struct != 0) {176175 printk("%s: unrecognised SCR structure version %d\n",177176 mmc_hostname(card->host), scr_struct);178178- mmc_card_set_bad(card);179179- return;177177+ return -EINVAL;180178 }181179182180 scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);183181 scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);182182+183183+ return 0;184184}185185186186/*···344342 if (err != MMC_ERR_NONE)345343 goto free_card;346344347347- mmc_decode_csd(card);345345+ err = mmc_decode_csd(card);346346+ if (err < 0)347347+ goto free_card;348348+348349 mmc_decode_cid(card);349350 }350351···366361 if (err != MMC_ERR_NONE)367362 goto free_card;368363369369- mmc_decode_scr(card);364364+ err = mmc_decode_scr(card);365365+ if (err < 0)366366+ goto free_card;370367371368 /*372369 * Fetch switch information from card.
+2-3
drivers/mmc/core/sysfs.c
···7272/*7373 * This currently matches any MMC driver to any MMC card - drivers7474 * themselves make the decision whether to drive this card in their7575- * probe method. However, we force "bad" cards to fail.7575+ * probe method.7676 */7777static int mmc_bus_match(struct device *dev, struct device_driver *drv)7878{7979- struct mmc_card *card = dev_to_mmc_card(dev);8080- return !mmc_card_bad(card);7979+ return 1;8180}82818382static int
+3-9
include/linux/mmc/card.h
···6969#define MMC_TYPE_SD 1 /* SD card */7070 unsigned int state; /* (our) card state */7171#define MMC_STATE_PRESENT (1<<0) /* present in sysfs */7272-#define MMC_STATE_DEAD (1<<1) /* device no longer in stack */7373-#define MMC_STATE_BAD (1<<2) /* unrecognised device */7474-#define MMC_STATE_READONLY (1<<3) /* card is read-only */7575-#define MMC_STATE_HIGHSPEED (1<<4) /* card is in high speed mode */7676-#define MMC_STATE_BLOCKADDR (1<<5) /* card uses block-addressing */7272+#define MMC_STATE_READONLY (1<<1) /* card is read-only */7373+#define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */7474+#define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */7775 u32 raw_cid[4]; /* raw card CID */7876 u32 raw_csd[4]; /* raw card CSD */7977 u32 raw_scr[2]; /* raw card SCR */···8688#define mmc_card_sd(c) ((c)->type == MMC_TYPE_SD)87898890#define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT)8989-#define mmc_card_dead(c) ((c)->state & MMC_STATE_DEAD)9090-#define mmc_card_bad(c) ((c)->state & MMC_STATE_BAD)9191#define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY)9292#define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED)9393#define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR)94949595#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)9696-#define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD)9797-#define mmc_card_set_bad(c) ((c)->state |= MMC_STATE_BAD)9896#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)9997#define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)10098#define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)