Index: wl12xx-ol_R5.SP7.01/drivers/net/wireless/wl12xx/sdio.c =================================================================== --- wl12xx-ol_R5.SP7.01.orig/drivers/net/wireless/wl12xx/sdio.c 2013-12-14 23:41:55.000000000 -0600 +++ wl12xx-ol_R5.SP7.01/drivers/net/wireless/wl12xx/sdio.c 2014-02-04 13:26:44.612614307 -0600 @@ -48,6 +48,7 @@ struct wl12xx_sdio_glue { struct device *dev; struct platform_device *core; + void (*set_power)(bool enable); // PVK }; static const struct sdio_device_id wl1271_devices[] __devinitconst = { @@ -135,6 +136,10 @@ struct sdio_func *func = dev_to_sdio_func(glue->dev); struct mmc_card *card = func->card; + // MTS: enable chip on power on + if (glue->set_power) + glue->set_power(1); + ret = pm_runtime_get_sync(&card->dev); if (ret) { /* @@ -163,6 +168,10 @@ struct sdio_func *func = dev_to_sdio_func(glue->dev); struct mmc_card *card = func->card; + // MTS: disable chip on power off + if (glue->set_power) + glue->set_power(0); + sdio_claim_host(func); sdio_disable_func(func); sdio_release_host(func); @@ -277,6 +286,11 @@ dev_err(glue->dev, "can't add platform device\n"); goto out_dev_put; } + + // MTS: add set_power to control enable pin + if (wlan_data->set_power) + glue->set_power = wlan_data->set_power; + return 0; out_dev_put: @@ -383,4 +397,4 @@ MODULE_FIRMWARE(WL128X_FW_NAME_SINGLE); MODULE_FIRMWARE(WL128X_FW_NAME_MULTI); MODULE_FIRMWARE(WL127X_PLT_FW_NAME); -MODULE_FIRMWARE(WL128X_PLT_FW_NAME); \ No newline at end of file +MODULE_FIRMWARE(WL128X_PLT_FW_NAME);