]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
mmc: skip detection of nonremovable cards on rescan
authorOhad Ben-Cohen <ohad@wizery.com>
Sun, 28 Nov 2010 05:21:28 +0000 (07:21 +0200)
committerChris Ball <cjb@laptop.org>
Sun, 9 Jan 2011 03:48:04 +0000 (22:48 -0500)
mmc_rescan() checks whether registered cards are still present before
skipping them, by calling the bus-specific ->detect() handler.

With buses that support runtime PM, the card may be powered off at
this point, so they need to be powered on and fully reinitialized before
->detect() executes.

This whole process is redundant with nonremovable cards; in those cases,
we can safely skip calling ->detect() and implicitly assume its success.

Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
Reviewed-by: Chris Ball <cjb@laptop.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/core/core.c

index 722af2dce3bbbed1eb971db09e38e8fc49445c5a..9683d4d3fced3da3cb01f53b48f991b0a2c5e4f6 100644 (file)
@@ -1506,8 +1506,12 @@ void mmc_rescan(struct work_struct *work)
 
        mmc_bus_get(host);
 
-       /* if there is a card registered, check whether it is still present */
-       if ((host->bus_ops != NULL) && host->bus_ops->detect && !host->bus_dead)
+       /*
+        * if there is a _removable_ card registered, check whether it is
+        * still present
+        */
+       if (host->bus_ops && host->bus_ops->detect && !host->bus_dead
+           && mmc_card_is_removable(host))
                host->bus_ops->detect(host);
 
        mmc_bus_put(host);