| From 0aab3995485b8a994bf29a995a008c9ea4a28054 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: mmc: sdio: remember new card RCA when redetecting card |
| |
| From: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com> |
| |
| 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: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/mmc/core/sdio.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| --- a/drivers/mmc/core/sdio.c |
| +++ b/drivers/mmc/core/sdio.c |
| @@ -267,6 +267,14 @@ static int mmc_sdio_init_card(struct mmc |
| 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); |
| } |
| |