| From 3f4c830b28921681c6d16d347003830c03d40576 Mon Sep 17 00:00:00 2001 |
| From: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com> |
| Date: Tue, 1 Mar 2011 14:41:04 +0100 |
| Subject: [PATCH] mmc: sdio: remember new card RCA when redetecting card |
| |
| commit 0aab3995485b8a994bf29a995a008c9ea4a28054 upstream. |
| |
| During redetection of a SDIO card, a request for a new card RCA |
| was submitted to the card, but was then overwritten by the old RCA. |
| This caused the card to be deselected instead of selected when using |
| the incorrect RCA. This bug's been present since the "oldcard" |
| handling was introduced in 2.6.32. |
| |
| Signed-off-by: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com> |
| Reviewed-by: Ulf Hansson <ulf.hansson@stericsson.com> |
| Reviewed-by: Pawel Wieczorkiewicz <pawel.wieczorkiewicz@stericsson.com> |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Chris Ball <cjb@laptop.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c |
| index 2dd4cfe..ed7620b 100644 |
| --- a/drivers/mmc/core/sdio.c |
| +++ b/drivers/mmc/core/sdio.c |
| @@ -303,6 +303,14 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, |
| if (err) |
| goto remove; |
| |
| + /* |
| + * Update oldcard with the new RCA received from the SDIO |
| + * device -- we're doing this so that it's updated in the |
| + * "card" struct when oldcard overwrites that later. |
| + */ |
| + if (oldcard) |
| + oldcard->rca = card->rca; |
| + |
| mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL); |
| } |
| |
| -- |
| 1.7.4.4 |
| |