From: Dmitry Shmidt Date: Wed, 2 May 2012 21:25:59 +0000 (-0700) Subject: net: wireless: bcmdhd: Set MMC_PM_KEEP_POWER flag on suspend X-Git-Tag: firefly_0821_release~7613^2~115 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b7f01a5788d4c188b25b05fc5756f97acbfec673;p=firefly-linux-kernel-4.4.55.git net: wireless: bcmdhd: Set MMC_PM_KEEP_POWER flag on suspend Signed-off-by: Dmitry Shmidt --- diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc_linux.c b/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc_linux.c index 602523df72c9..a78faebe2e7a 100644 --- a/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc_linux.c +++ b/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc_linux.c @@ -178,6 +178,8 @@ MODULE_DEVICE_TABLE(sdio, bcmsdh_sdmmc_ids); static int bcmsdh_sdmmc_suspend(struct device *pdev) { struct sdio_func *func = dev_to_sdio_func(pdev); + mmc_pm_flag_t sdio_flags; + int ret; if (func->num != 2) return 0; @@ -186,6 +188,21 @@ static int bcmsdh_sdmmc_suspend(struct device *pdev) if (dhd_os_check_wakelock(bcmsdh_get_drvdata())) return -EBUSY; + + sdio_flags = sdio_get_host_pm_caps(func); + + if (!(sdio_flags & MMC_PM_KEEP_POWER)) { + sd_err(("%s: can't keep power while host is suspended\n", __FUNCTION__)); + return -EINVAL; + } + + /* keep power while host suspended */ + ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); + if (ret) { + sd_err(("%s: error while trying to keep power\n", __FUNCTION__)); + return ret; + } + #if defined(OOB_INTR_ONLY) bcmsdh_oob_intr_set(0); #endif /* defined(OOB_INTR_ONLY) */