Disable WOW on bcmdhd and do automatic power on for wifi

http://forum.armbian.com/index.php/topic/872-beelink-x2-with-armbian-possible/?p=16785
This commit is contained in:
Igor Pecovnik 2016-10-02 20:42:37 +02:00
parent 073c8a7248
commit 47714a8abd
4 changed files with 86 additions and 2 deletions

View file

@ -2,7 +2,7 @@
BOARD_NAME="Banana Pi M2+" BOARD_NAME="Banana Pi M2+"
LINUXFAMILY=sun8i LINUXFAMILY=sun8i
BOOTCONFIG=Sinovoip_BPI_M2_plus_defconfig BOOTCONFIG=Sinovoip_BPI_M2_plus_defconfig
MODULES="#gpio-sunxi #w1-sunxi #w1-gpio #w1-therm #sunxi-cir hci_uart rfcomm hidp bcmdhd" MODULES="#gpio-sunxi #w1-sunxi #w1-gpio #w1-therm #sunxi-cir hci_uart rfcomm hidp"
MODULES_NEXT="brcmfmac" MODULES_NEXT="brcmfmac"
CPUMIN=240000 CPUMIN=240000
CPUMAX=1200000 CPUMAX=1200000

View file

@ -1529,7 +1529,8 @@ CONFIG_ATH6KL_USB=m
CONFIG_BCMDHD=m CONFIG_BCMDHD=m
CONFIG_BCMDHD_FW_PATH="/lib/firmware/ap6212/fw_bcmdhd.bin" CONFIG_BCMDHD_FW_PATH="/lib/firmware/ap6212/fw_bcmdhd.bin"
CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/ap6212/nvram.txt" CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/ap6212/nvram.txt"
CONFIG_BCMDHD_CONFIG_PATH="/lib/firmware/ap6212/config.txt" CONFIG_BCMDHD_DISABLE_WOWLAN=y
CONFIG_BCMDHD_SDIO=y
CONFIG_BCMDHD_OOB=y CONFIG_BCMDHD_OOB=y
# CONFIG_BCMDHD_SDIO_IRQ is not set # CONFIG_BCMDHD_SDIO_IRQ is not set
CONFIG_BRCMUTIL=m CONFIG_BRCMUTIL=m

View file

@ -0,0 +1,16 @@
diff -Nur a/drivers/net/wireless/bcmdhd/Kconfig b/drivers/net/wireless/bcmdhd/Kconfig
--- a/drivers/net/wireless/bcmdhd/Kconfig 2016-09-30 19:30:00.000000000 +0200
+++ b/drivers/net/wireless/bcmdhd/Kconfig 2016-10-02 10:52:10.220177127 +0200
@@ -26,6 +26,12 @@
help
Enables WEXT support
+config BCMDHD_DISABLE_WOWLAN
+ bool "Disable Wake on WLAN"
+ depends on BCMDHD
+ help
+ Disables Wake on WLAN
+
choice
prompt "Enable Chip Interface"
depends on BCMDHD

View file

@ -0,0 +1,67 @@
diff -Nur a/drivers/misc/rf_pm/wifi_pm.c b/drivers/misc/rf_pm/wifi_pm.c
--- a/drivers/misc/rf_pm/wifi_pm.c 2016-06-09 19:33:23.000000000 +0200
+++ b/drivers/misc/rf_pm/wifi_pm.c 2016-10-02 18:43:35.001633433 +0200
@@ -73,18 +73,6 @@
}
EXPORT_SYMBOL(wifi_pm_gpio_ctrl);
-#ifdef CONFIG_PROC_FS
-static int wifi_pm_power_stat(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- char *p = page;
-
-#if defined(CONFIG_ARCH_SUN8IW7P1)
- p += sprintf(p, "%s", wl_info.wl_power_state ? "0" : "1");
-#else
- p += sprintf(p, "%s", wl_info.wl_power_state ? "1" : "0");
-#endif
- return p - page;
-}
static void scan_device(int onoff)
{
int sdc_id = -1;
@@ -123,16 +111,31 @@
}
}
-static int wifi_pm_power_ctrl(struct file *file, const char __user *buffer, unsigned long count, void *data)
+static void wifi_power_ctrl(int power)
{
- int power = simple_strtoul(buffer, NULL, 10);
- power = power ? 1 : 0;
-
wifi_pm_power(power);
mdelay(100);
-
scan_device(power);
mdelay(100);
+}
+
+#ifdef CONFIG_PROC_FS
+static int wifi_pm_power_stat(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+ char *p = page;
+
+#if defined(CONFIG_ARCH_SUN8IW7P1)
+ p += sprintf(p, "%s", wl_info.wl_power_state ? "0" : "1");
+#else
+ p += sprintf(p, "%s", wl_info.wl_power_state ? "1" : "0");
+#endif
+ return p - page;
+}
+
+static int wifi_pm_power_ctrl(struct file *file, const char __user *buffer, unsigned long count, void *data)
+{
+ int power = simple_strtoul(buffer, NULL, 10);
+ wifi_power_ctrl(power ? 1 : 0);
return sizeof(power);
}
@@ -264,6 +267,7 @@
static int __devinit wifi_pm_probe(struct platform_device *pdev)
{
awwifi_procfs_attach();
+ wifi_power_ctrl(1);
wifi_pm_msg("wifi gpio init is OK !!\n");
return 0;
}