OSDN Git Service

wl12xx: fix sdio_test module functionality
authorShahar Levi <shahar_levi@ti.com>
Mon, 12 Sep 2011 07:00:37 +0000 (10:00 +0300)
committerLuciano Coelho <coelho@ti.com>
Fri, 23 Sep 2011 11:11:31 +0000 (14:11 +0300)
Due to some changes in PM in recent kernels, the sdio_test module has
been broken for a while.  This patch fixes the code that powers the
card on and off.

Also made some small indentation fixes in the Makefile.

[Rephrased commit log and removed the change in the FW name, since
it's done in another patch. -- Luca]

Signed-off-by: Shahar Levi <shahar_levi@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/Makefile
drivers/net/wireless/wl12xx/sdio_test.c

index 521c041..621b348 100644 (file)
@@ -1,16 +1,16 @@
 wl12xx-objs            = main.o cmd.o io.o event.o tx.o rx.o ps.o acx.o \
                          boot.o init.o debugfs.o scan.o
 
-wl12xx_spi-objs        = spi.o
+wl12xx_spi-objs        = spi.o
 wl12xx_sdio-objs       = sdio.o
-wl12xx_sdio_test-objs = sdio_test.o
+wl12xx_sdio_test-objs  = sdio_test.o
 
 wl12xx-$(CONFIG_NL80211_TESTMODE)      += testmode.o
 obj-$(CONFIG_WL12XX)                   += wl12xx.o
 obj-$(CONFIG_WL12XX_SPI)               += wl12xx_spi.o
 obj-$(CONFIG_WL12XX_SDIO)              += wl12xx_sdio.o
 
-obj-$(CONFIG_WL12XX_SDIO_TEST) += wl12xx_sdio_test.o
+obj-$(CONFIG_WL12XX_SDIO_TEST)         += wl12xx_sdio_test.o
 
 # small builtin driver bit
 obj-$(CONFIG_WL12XX_PLATFORM_DATA)     += wl12xx_platform_data.o
index c361049..f25d5d9 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/sdio_ids.h>
 #include <linux/mmc/card.h>
+#include <linux/mmc/host.h>
 #include <linux/gpio.h>
 #include <linux/wl12xx.h>
 #include <linux/kthread.h>
@@ -142,14 +143,23 @@ static int wl1271_sdio_set_power(struct wl1271 *wl, bool enable)
                ret = pm_runtime_get_sync(&func->dev);
                if (ret < 0)
                        goto out;
+
+               /* Runtime PM might be disabled, power up the card manually */
+               ret = mmc_power_restore_host(func->card->host);
+               if (ret < 0)
+                       goto out;
+
                sdio_claim_host(func);
                sdio_enable_func(func);
-               sdio_release_host(func);
        } else {
-               sdio_claim_host(func);
                sdio_disable_func(func);
                sdio_release_host(func);
 
+               /* Runtime PM might be disabled, power off the card manually */
+               ret = mmc_power_save_host(func->card->host);
+               if (ret < 0)
+                       goto out;
+
                /* Power down the card */
                ret = pm_runtime_put_sync(&func->dev);
        }
@@ -433,7 +443,6 @@ static int __devinit wl1271_probe(struct sdio_func *func,
 
        sdio_set_drvdata(func, wl_test);
 
-
        /* power up the device */
        ret = wl1271_chip_wakeup(wl);
        if (ret) {