Skip to contentSkip to conversation

brcmfmac: prohibit ACPI power management for brcmfmac driver

PATCH Superseded Fu, Zhonghui 2 participants 4 messages May 3, 2015 – May 11, 2015

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 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.

---
Changes in v2:
- Another implementation.

 drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +8 -0
index 9b508bd..6c519e3 100644
@@ -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>
@@ -1114,6 +1115,8 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
 	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);
@@ -1121,6 +1124,11 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
 	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;
+	if (adev = ACPI_COMPANION(dev))
+		adev->flags.power_manageable = 0;
+
 	/* Consume func num 1 but dont do anything with it. */
 	if (func->num == 1)
 		return 0;

-- 1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#1 lore raw

Hi,

Any comments are welcome.

Thanks,
Zhonghui

Quoted 49 lines · Zhonghui

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.

---
Changes in v2:
- Another implementation.

 drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +8 -1
index 9b508bd..6c519e3 100644
@@ -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>
@@ -1114,6 +1115,8 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
 	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);
@@ -1121,6 +1124,11 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
 	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;
+	if (adev = ACPI_COMPANION(dev))
+		adev->flags.power_manageable = 0;
+
 	/* Consume func num 1 but dont do anything with it. */
 	if (func->num == 1)
 		return 0;
-- 1.7.1
#2 lore raw
Quoted 4 lines · Zhonghui

Hi,

Any comments are welcome.

Having some time to spare while spending my vacation so here it is.

Quoted 43 lines

Thanks,
Zhonghui

Quoted 39 lines · Zhonghui

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.

---
Changes in v2:
- Another implementation.

  drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c |    8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +3 -0
index 9b508bd..6c519e3 100644
@@ -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>
@@ -1114,6 +1115,8 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
  	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);
@@ -1121,6 +1124,11 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
  	brcmf_dbg(SDIO, "sdio device ID: 0x%04x\n", func->device);
  	brcmf_dbg(SDIO, "Function#: %d\n", func->num);
 
Quoted 3 lines

drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c static int brcmf_ops_sdio_probe(struct sdio_func *func, · line 1129

Quoted 3 lines
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +3 -0
+	/* prohibit ACPI power management for this device */
+	dev =&func->dev;
+	if (adev = ACPI_COMPANION(dev))

While I understand what you are doing here it makes someone reading the code wonder whether a mistake has been made. So I would prefer to have the assignment separate for the if statement.

For the update patch you may add:

Regards,
Arend

Quoted 8 lines
Quoted 7 lines
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +2 -1
+		adev->flags.power_manageable = 0;
+
  	/* Consume func num 1 but dont do anything with it. */
  	if (func->num == 1)
  		return 0;
-- 1.7.1
#3 lore raw
Quoted 57 lines · Arend van Spriel
Quoted 4 lines · Zhonghui

Hi,

Any comments are welcome.

Having some time to spare while spending my vacation so here it is.

Quoted 43 lines

Thanks,
Zhonghui

Quoted 39 lines · Zhonghui

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.

---
Changes in v2:
- Another implementation.

  drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c |    8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +3 -0
index 9b508bd..6c519e3 100644
@@ -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>
@@ -1114,6 +1115,8 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
      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);
@@ -1121,6 +1124,11 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
      brcmf_dbg(SDIO, "sdio device ID: 0x%04x\n", func->device);
      brcmf_dbg(SDIO, "Function#: %d\n", func->num);
 
Quoted 3 lines

drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c static int brcmf_ops_sdio_probe(struct sdio_func *func, · line 1129

Quoted 3 lines
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +3 -0
+    /* prohibit ACPI power management for this device */
+    dev =&func->dev;
+    if (adev = ACPI_COMPANION(dev))

While I understand what you are doing here it makes someone reading the code wonder whether a mistake has been made. So I would prefer to have the assignment separate for the if statement.

Quoted 3 lines

For the update patch you may add:

Many thanks for your comments. I have sent out the v3 patch.

Thanks,
Zhonghui

Quoted 16 lines

Regards,
Arend

Quoted 8 lines
Quoted 7 lines
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +2 -1
+        adev->flags.power_manageable = 0;
+
      /* Consume func num 1 but dont do anything with it. */
      if (func->num == 1)
          return 0;
-- 1.7.1
Signature · 3 lines
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html