Просмотр исходного кода

mmc: remove old card states

Remove card states that no longer make any sense.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Pierre Ossman 18 лет назад
Родитель
Сommit
bd76631261
4 измененных файлов с 34 добавлено и 28 удалено
  1. 14 8
      drivers/mmc/core/mmc.c
  2. 15 8
      drivers/mmc/core/sd.c
  3. 2 3
      drivers/mmc/core/sysfs.c
  4. 3 9
      include/linux/mmc/card.h

+ 14 - 8
drivers/mmc/core/mmc.c

@@ -56,7 +56,7 @@ static const unsigned int tacc_mant[] = {
 /*
 /*
  * Given the decoded CSD structure, decode the raw CID to our CID structure.
  * Given the decoded CSD structure, decode the raw CID to our CID structure.
  */
  */
-static void mmc_decode_cid(struct mmc_card *card)
+static int mmc_decode_cid(struct mmc_card *card)
 {
 {
 	u32 *resp = card->raw_cid;
 	u32 *resp = card->raw_cid;
 
 
@@ -101,15 +101,16 @@ static void mmc_decode_cid(struct mmc_card *card)
 	default:
 	default:
 		printk("%s: card has unknown MMCA version %d\n",
 		printk("%s: card has unknown MMCA version %d\n",
 			mmc_hostname(card->host), card->csd.mmca_vsn);
 			mmc_hostname(card->host), card->csd.mmca_vsn);
-		mmc_card_set_bad(card);
-		break;
+		return -EINVAL;
 	}
 	}
+
+	return 0;
 }
 }
 
 
 /*
 /*
  * Given a 128-bit response, decode to our card CSD structure.
  * Given a 128-bit response, decode to our card CSD structure.
  */
  */
-static void mmc_decode_csd(struct mmc_card *card)
+static int mmc_decode_csd(struct mmc_card *card)
 {
 {
 	struct mmc_csd *csd = &card->csd;
 	struct mmc_csd *csd = &card->csd;
 	unsigned int e, m, csd_struct;
 	unsigned int e, m, csd_struct;
@@ -123,8 +124,7 @@ static void mmc_decode_csd(struct mmc_card *card)
 	if (csd_struct != 1 && csd_struct != 2) {
 	if (csd_struct != 1 && csd_struct != 2) {
 		printk("%s: unrecognised CSD structure version %d\n",
 		printk("%s: unrecognised CSD structure version %d\n",
 			mmc_hostname(card->host), csd_struct);
 			mmc_hostname(card->host), csd_struct);
-		mmc_card_set_bad(card);
-		return;
+		return -EINVAL;
 	}
 	}
 
 
 	csd->mmca_vsn	 = UNSTUFF_BITS(resp, 122, 4);
 	csd->mmca_vsn	 = UNSTUFF_BITS(resp, 122, 4);
@@ -149,6 +149,8 @@ static void mmc_decode_csd(struct mmc_card *card)
 	csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
 	csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
 	csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
 	csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
 	csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
 	csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
+
+	return 0;
 }
 }
 
 
 /*
 /*
@@ -300,8 +302,12 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 		if (err != MMC_ERR_NONE)
 		if (err != MMC_ERR_NONE)
 			goto free_card;
 			goto free_card;
 
 
-		mmc_decode_csd(card);
-		mmc_decode_cid(card);
+		err = mmc_decode_csd(card);
+		if (err < 0)
+			goto free_card;
+		err = mmc_decode_cid(card);
+		if (err < 0)
+			goto free_card;
 	}
 	}
 
 
 	/*
 	/*

+ 15 - 8
drivers/mmc/core/sd.c

@@ -88,7 +88,7 @@ static void mmc_decode_cid(struct mmc_card *card)
 /*
 /*
  * Given a 128-bit response, decode to our card CSD structure.
  * Given a 128-bit response, decode to our card CSD structure.
  */
  */
-static void mmc_decode_csd(struct mmc_card *card)
+static int mmc_decode_csd(struct mmc_card *card)
 {
 {
 	struct mmc_csd *csd = &card->csd;
 	struct mmc_csd *csd = &card->csd;
 	unsigned int e, m, csd_struct;
 	unsigned int e, m, csd_struct;
@@ -151,15 +151,16 @@ static void mmc_decode_csd(struct mmc_card *card)
 	default:
 	default:
 		printk("%s: unrecognised CSD structure version %d\n",
 		printk("%s: unrecognised CSD structure version %d\n",
 			mmc_hostname(card->host), csd_struct);
 			mmc_hostname(card->host), csd_struct);
-		mmc_card_set_bad(card);
-		return;
+		return -EINVAL;
 	}
 	}
+
+	return 0;
 }
 }
 
 
 /*
 /*
  * Given a 64-bit response, decode to our card SCR structure.
  * Given a 64-bit response, decode to our card SCR structure.
  */
  */
-static void mmc_decode_scr(struct mmc_card *card)
+static int mmc_decode_scr(struct mmc_card *card)
 {
 {
 	struct sd_scr *scr = &card->scr;
 	struct sd_scr *scr = &card->scr;
 	unsigned int scr_struct;
 	unsigned int scr_struct;
@@ -174,12 +175,13 @@ static void mmc_decode_scr(struct mmc_card *card)
 	if (scr_struct != 0) {
 	if (scr_struct != 0) {
 		printk("%s: unrecognised SCR structure version %d\n",
 		printk("%s: unrecognised SCR structure version %d\n",
 			mmc_hostname(card->host), scr_struct);
 			mmc_hostname(card->host), scr_struct);
-		mmc_card_set_bad(card);
-		return;
+		return -EINVAL;
 	}
 	}
 
 
 	scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
 	scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
 	scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
 	scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
+
+	return 0;
 }
 }
 
 
 /*
 /*
@@ -342,7 +344,10 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 		if (err != MMC_ERR_NONE)
 		if (err != MMC_ERR_NONE)
 			goto free_card;
 			goto free_card;
 
 
-		mmc_decode_csd(card);
+		err = mmc_decode_csd(card);
+		if (err < 0)
+			goto free_card;
+
 		mmc_decode_cid(card);
 		mmc_decode_cid(card);
 	}
 	}
 
 
@@ -361,7 +366,9 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 		if (err != MMC_ERR_NONE)
 		if (err != MMC_ERR_NONE)
 			goto free_card;
 			goto free_card;
 
 
-		mmc_decode_scr(card);
+		err = mmc_decode_scr(card);
+		if (err < 0)
+			goto free_card;
 
 
 		/*
 		/*
 		 * Fetch switch information from card.
 		 * Fetch switch information from card.

+ 2 - 3
drivers/mmc/core/sysfs.c

@@ -72,12 +72,11 @@ static void mmc_release_card(struct device *dev)
 /*
 /*
  * This currently matches any MMC driver to any MMC card - drivers
  * This currently matches any MMC driver to any MMC card - drivers
  * themselves make the decision whether to drive this card in their
  * themselves make the decision whether to drive this card in their
- * probe method.  However, we force "bad" cards to fail.
+ * probe method.
  */
  */
 static int mmc_bus_match(struct device *dev, struct device_driver *drv)
 static int mmc_bus_match(struct device *dev, struct device_driver *drv)
 {
 {
-	struct mmc_card *card = dev_to_mmc_card(dev);
-	return !mmc_card_bad(card);
+	return 1;
 }
 }
 
 
 static int
 static int

+ 3 - 9
include/linux/mmc/card.h

@@ -69,11 +69,9 @@ struct mmc_card {
 #define MMC_TYPE_SD		1		/* SD card */
 #define MMC_TYPE_SD		1		/* SD card */
 	unsigned int		state;		/* (our) card state */
 	unsigned int		state;		/* (our) card state */
 #define MMC_STATE_PRESENT	(1<<0)		/* present in sysfs */
 #define MMC_STATE_PRESENT	(1<<0)		/* present in sysfs */
-#define MMC_STATE_DEAD		(1<<1)		/* device no longer in stack */
-#define MMC_STATE_BAD		(1<<2)		/* unrecognised device */
-#define MMC_STATE_READONLY	(1<<3)		/* card is read-only */
-#define MMC_STATE_HIGHSPEED	(1<<4)		/* card is in high speed mode */
-#define MMC_STATE_BLOCKADDR	(1<<5)		/* card uses block-addressing */
+#define MMC_STATE_READONLY	(1<<1)		/* card is read-only */
+#define MMC_STATE_HIGHSPEED	(1<<2)		/* card is in high speed mode */
+#define MMC_STATE_BLOCKADDR	(1<<3)		/* card uses block-addressing */
 	u32			raw_cid[4];	/* raw card CID */
 	u32			raw_cid[4];	/* raw card CID */
 	u32			raw_csd[4];	/* raw card CSD */
 	u32			raw_csd[4];	/* raw card CSD */
 	u32			raw_scr[2];	/* raw card SCR */
 	u32			raw_scr[2];	/* raw card SCR */
@@ -88,15 +86,11 @@ struct mmc_card {
 #define mmc_card_sd(c)		((c)->type == MMC_TYPE_SD)
 #define mmc_card_sd(c)		((c)->type == MMC_TYPE_SD)
 
 
 #define mmc_card_present(c)	((c)->state & MMC_STATE_PRESENT)
 #define mmc_card_present(c)	((c)->state & MMC_STATE_PRESENT)
-#define mmc_card_dead(c)	((c)->state & MMC_STATE_DEAD)
-#define mmc_card_bad(c)		((c)->state & MMC_STATE_BAD)
 #define mmc_card_readonly(c)	((c)->state & MMC_STATE_READONLY)
 #define mmc_card_readonly(c)	((c)->state & MMC_STATE_READONLY)
 #define mmc_card_highspeed(c)	((c)->state & MMC_STATE_HIGHSPEED)
 #define mmc_card_highspeed(c)	((c)->state & MMC_STATE_HIGHSPEED)
 #define mmc_card_blockaddr(c)	((c)->state & MMC_STATE_BLOCKADDR)
 #define mmc_card_blockaddr(c)	((c)->state & MMC_STATE_BLOCKADDR)
 
 
 #define mmc_card_set_present(c)	((c)->state |= MMC_STATE_PRESENT)
 #define mmc_card_set_present(c)	((c)->state |= MMC_STATE_PRESENT)
-#define mmc_card_set_dead(c)	((c)->state |= MMC_STATE_DEAD)
-#define mmc_card_set_bad(c)	((c)->state |= MMC_STATE_BAD)
 #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
 #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
 #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
 #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
 #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
 #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)