From af22d991addd0d13a5a0bafff90ca5cf46d70987 Mon Sep 17 00:00:00 2001 From: Aniruddha Tvs Rao Date: Tue, 3 Jul 2018 10:28:40 +0530 Subject: [PATCH] NVIDIA: SAUCE: mmc: core: Update bus status on sd card removal BugLink: https://bugs.launchpad.net/bugs/2072591 Update card status in mmc_bus_remove on card removal. http://nvbugs/200426887 http://nvbugs/4452228 Signed-off-by: Aniruddha Tvs Rao Signed-off-by: Prathamesh Shete Signed-off-by: Satish Seelamsetti Reviewed-by: Bitan Biswas Signed-off-by: Laxman Dewangan Acked-by: Jacob Martin Acked-by: Noah Wager Signed-off-by: Noah Wager --- drivers/mmc/core/bus.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index 23cec944eadc..9a55e468228f 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c @@ -133,12 +133,18 @@ static int mmc_bus_probe(struct device *dev) { struct mmc_driver *drv = to_mmc_driver(dev->driver); struct mmc_card *card = mmc_dev_to_card(dev); + int card_id; if (card_idx == MAX_CARDS_NUM) { pr_err("Exceeded the total number of cards allowed"); return -EINVAL; } else { - mmc_cards[card_idx++] = card; + for (card_id = 0; card_id < MAX_CARDS_NUM; card_id++) { + if (!mmc_cards[card_id]) + break; + } + mmc_cards[card_id] = card; + card_idx++; } return drv->probe(card); @@ -148,7 +154,16 @@ static void mmc_bus_remove(struct device *dev) { struct mmc_driver *drv = to_mmc_driver(dev->driver); struct mmc_card *card = mmc_dev_to_card(dev); + int card_id; + for (card_id = 0; card_id < MAX_CARDS_NUM; card_id++) { + if (mmc_cards[card_id] == card) + break; + } + if (card_id == MAX_CARDS_NUM) + card_id--; + mmc_cards[card_id] = NULL; + card_idx--; drv->remove(card); }