From 3a0b65a4a8b5b066595727e9fd1764d928adad6a Mon Sep 17 00:00:00 2001 From: hwg Date: Mon, 12 Dec 2011 20:24:09 +0800 Subject: [PATCH] reset g_onoff in wifi driver insmode, to avoid wifi driver error when rmmod with G_WLAN_SET_OFF status --- drivers/net/wireless/bcm4319/dhd_linux.c | 3 +++ drivers/net/wireless/bcm4319/wl_iw.c | 8 ++++++++ drivers/net/wireless/bcm4329/dhd_linux.c | 3 +++ drivers/net/wireless/bcm4329/wl_iw.c | 8 ++++++++ 4 files changed, 22 insertions(+) diff --git a/drivers/net/wireless/bcm4319/dhd_linux.c b/drivers/net/wireless/bcm4319/dhd_linux.c index 81eef135a16d..edfbc1080479 100644 --- a/drivers/net/wireless/bcm4319/dhd_linux.c +++ b/drivers/net/wireless/bcm4319/dhd_linux.c @@ -2527,6 +2527,7 @@ dhd_detach(dhd_pub_t *dhdp) } } +extern void reset_g_onoff(void); void rockchip_wifi_exit_module(void) { @@ -2563,6 +2564,8 @@ rockchip_wifi_init_module(void) return -EINVAL; } while (0); + reset_g_onoff(); + /* Call customer gpio to turn on power with WL_REG_ON signal */ dhd_customer_gpio_wlan_ctrl(WLAN_POWER_ON); diff --git a/drivers/net/wireless/bcm4319/wl_iw.c b/drivers/net/wireless/bcm4319/wl_iw.c index 146dffd52976..27d1210fea35 100644 --- a/drivers/net/wireless/bcm4319/wl_iw.c +++ b/drivers/net/wireless/bcm4319/wl_iw.c @@ -317,6 +317,14 @@ static void swap_key_to_BE( key->iv_initialized = dtoh32(key->iv_initialized); } +void reset_g_onoff(void) +{ + if(g_onoff == G_WLAN_SET_OFF) { + printk("g_onoff = G_WLAN_SET_OFF, need to reset to G_WLAN_SET_ON\n"); + g_onoff = G_WLAN_SET_ON; + } +} + static int dev_wlc_ioctl( struct net_device *dev, diff --git a/drivers/net/wireless/bcm4329/dhd_linux.c b/drivers/net/wireless/bcm4329/dhd_linux.c index 4058cbc02589..d45d5c97603f 100644 --- a/drivers/net/wireless/bcm4329/dhd_linux.c +++ b/drivers/net/wireless/bcm4329/dhd_linux.c @@ -2529,6 +2529,7 @@ dhd_detach(dhd_pub_t *dhdp) } } +extern void reset_g_onoff(void); void rockchip_wifi_exit_module(void) { @@ -2565,6 +2566,8 @@ rockchip_wifi_init_module(void) return -EINVAL; } while (0); + reset_g_onoff(); + /* Call customer gpio to turn on power with WL_REG_ON signal */ dhd_customer_gpio_wlan_ctrl(WLAN_POWER_ON); diff --git a/drivers/net/wireless/bcm4329/wl_iw.c b/drivers/net/wireless/bcm4329/wl_iw.c index 146dffd52976..27d1210fea35 100644 --- a/drivers/net/wireless/bcm4329/wl_iw.c +++ b/drivers/net/wireless/bcm4329/wl_iw.c @@ -317,6 +317,14 @@ static void swap_key_to_BE( key->iv_initialized = dtoh32(key->iv_initialized); } +void reset_g_onoff(void) +{ + if(g_onoff == G_WLAN_SET_OFF) { + printk("g_onoff = G_WLAN_SET_OFF, need to reset to G_WLAN_SET_ON\n"); + g_onoff = G_WLAN_SET_ON; + } +} + static int dev_wlc_ioctl( struct net_device *dev, -- 2.34.1