Commit bd766312 authored by Pierre Ossman's avatar Pierre Ossman

mmc: remove old card states

Remove card states that no longer make any sense.
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 6abaa0c9
...@@ -56,7 +56,7 @@ static const unsigned int tacc_mant[] = { ...@@ -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) ...@@ -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); return -EINVAL;
break;
} }
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) ...@@ -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 -EINVAL;
return;
} }
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) ...@@ -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, ...@@ -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); err = mmc_decode_csd(card);
mmc_decode_cid(card); if (err < 0)
goto free_card;
err = mmc_decode_cid(card);
if (err < 0)
goto free_card;
} }
/* /*
......
...@@ -88,7 +88,7 @@ static void mmc_decode_cid(struct mmc_card *card) ...@@ -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) ...@@ -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 -EINVAL;
return;
} }
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) ...@@ -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 -EINVAL;
return;
} }
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, ...@@ -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, ...@@ -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.
......
...@@ -72,12 +72,11 @@ static void mmc_release_card(struct device *dev) ...@@ -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 1;
return !mmc_card_bad(card);
} }
static int static int
......
...@@ -69,11 +69,9 @@ struct mmc_card { ...@@ -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_READONLY (1<<1) /* card is read-only */
#define MMC_STATE_BAD (1<<2) /* unrecognised device */ #define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */
#define MMC_STATE_READONLY (1<<3) /* card is read-only */ #define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */
#define MMC_STATE_HIGHSPEED (1<<4) /* card is in high speed mode */
#define MMC_STATE_BLOCKADDR (1<<5) /* 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 { ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment