diff options
author | David Vrabel <david.vrabel@csr.com> | 2009-10-07 19:32:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-08 10:36:40 -0400 |
commit | a1125b1e41228bc2e5b4f023004a4280282d1dab (patch) | |
tree | dae42956998db0946abec9163468d37466af92e5 /drivers/mmc | |
parent | a54fed9f70a2765f4476e1ce3d691a2f31df258f (diff) |
mmc: sdio: don't require CISTPL_VERS_1 to contain 4 strings
The PC Card 8.0 specification (vol. 4, section 3.2.10) says the
TPLLV1_INFO field of the CISTPL_VERS_1 tuple must contain 4 strings. Some
cards don't have all 4 so just parse as many as we can.
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: David Vrabel <david.vrabel@csr.com>
Tested-by: Jonathan Cameron <jic23@cam.ac.uk>
Tested-by: Bing Zhao <bzhao@marvell.com>
Cc: Roel Kluin <roel.kluin@gmail.com>
Cc: <linux-mmc@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/core/sdio_cis.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c index e1035c895808..f85dcd536508 100644 --- a/drivers/mmc/core/sdio_cis.c +++ b/drivers/mmc/core/sdio_cis.c | |||
@@ -29,6 +29,8 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func, | |||
29 | unsigned i, nr_strings; | 29 | unsigned i, nr_strings; |
30 | char **buffer, *string; | 30 | char **buffer, *string; |
31 | 31 | ||
32 | /* Find all null-terminated (including zero length) strings in | ||
33 | the TPLLV1_INFO field. Trailing garbage is ignored. */ | ||
32 | buf += 2; | 34 | buf += 2; |
33 | size -= 2; | 35 | size -= 2; |
34 | 36 | ||
@@ -39,11 +41,8 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func, | |||
39 | if (buf[i] == 0) | 41 | if (buf[i] == 0) |
40 | nr_strings++; | 42 | nr_strings++; |
41 | } | 43 | } |
42 | 44 | if (nr_strings == 0) | |
43 | if (nr_strings < 4) { | ||
44 | printk(KERN_WARNING "SDIO: ignoring broken CISTPL_VERS_1\n"); | ||
45 | return 0; | 45 | return 0; |
46 | } | ||
47 | 46 | ||
48 | size = i; | 47 | size = i; |
49 | 48 | ||