aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch')
-rw-r--r--package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch b/package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch
new file mode 100644
index 0000000000..d46b300daa
--- /dev/null
+++ b/package/kernel/mac80211/patches/366-brcmfmac-prohibit-ACPI-power-management-for-brcmfmac.patch
@@ -0,0 +1,47 @@
+From: "Fu, Zhonghui" <zhonghui.fu@linux.intel.com>
+Date: Mon, 11 May 2015 10:41:32 +0800
+Subject: [PATCH] brcmfmac: prohibit ACPI power management for brcmfmac driver
+
+ACPI will manage WiFi chip's power state during suspend/resume
+process on some tablet platforms(such as ASUS T100TA). This is
+not supported by brcmfmac driver now, and the context of WiFi
+chip will be damaged after resume. This patch informs ACPI not
+to manage WiFi chip's power state.
+
+Signed-off-by: Zhonghui Fu <zhonghui.fu@linux.intel.com>
+Acked-by: Arend van Spriel <arend@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+
+--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
++++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
+@@ -33,6 +33,7 @@
+ #include <linux/suspend.h>
+ #include <linux/errno.h>
+ #include <linux/module.h>
++#include <linux/acpi.h>
+ #include <net/cfg80211.h>
+
+ #include <defs.h>
+@@ -1122,6 +1123,8 @@ static int brcmf_ops_sdio_probe(struct s
+ int err;
+ struct brcmf_sdio_dev *sdiodev;
+ struct brcmf_bus *bus_if;
++ struct device *dev;
++ struct acpi_device *adev;
+
+ brcmf_dbg(SDIO, "Enter\n");
+ brcmf_dbg(SDIO, "Class=%x\n", func->class);
+@@ -1129,6 +1132,12 @@ static int brcmf_ops_sdio_probe(struct s
+ brcmf_dbg(SDIO, "sdio device ID: 0x%04x\n", func->device);
+ brcmf_dbg(SDIO, "Function#: %d\n", func->num);
+
++ /* prohibit ACPI power management for this device */
++ dev = &func->dev;
++ adev = ACPI_COMPANION(dev);
++ if (adev)
++ adev->flags.power_manageable = 0;
++
+ /* Consume func num 1 but dont do anything with it. */
+ if (func->num == 1)
+ return 0;