wifi: modify usb wifi power control for rk2928
authorhwg <hwg@rock-chips.com>
Sun, 16 Sep 2012 04:41:20 +0000 (12:41 +0800)
committerhwg <hwg@rock-chips.com>
Sun, 16 Sep 2012 04:41:20 +0000 (12:41 +0800)
arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c [changed mode: 0644->0755]
drivers/net/wireless/rkusbwifi/wifi_power_ops.c

old mode 100644 (file)
new mode 100755 (executable)
index 69be61c..8512e1e
@@ -198,12 +198,31 @@ static void rk29_sdmmc_set_iomux(int device_id, unsigned int bus_width)
 #endif
 
 
-//int rk29sdk_wifi_power_state = 0;
-//int rk29sdk_bt_power_state = 0;
 
 #ifdef CONFIG_WIFI_CONTROL_FUNC
+
+//
+// Define wifi module's power and reset gpio, and gpio sensitive level 
+//
+
+#if defined(CONFIG_RK903) || defined(CONFIG_RK901)
+#define RK30SDK_WIFI_GPIO_POWER_N       RK2928_PIN0_PD6
+#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH 
+#define RK30SDK_WIFI_GPIO_RESET_N       RK2928_PIN3_PC2
+#define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH 
+#endif
+
+#if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) 
 #define RK30SDK_WIFI_GPIO_POWER_N       RK2928_PIN0_PD6
-#define RK29SDK_WIFI_GPIO_RESET_N       RK2928_PIN3_PC2
+#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW 
+#endif
+
+#if defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319) 
+#define RK30SDK_WIFI_GPIO_POWER_N       RK2928_PIN0_PD6
+#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH 
+#define RK30SDK_WIFI_GPIO_RESET_N       RK2928_PIN3_PC2
+#define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH 
+#endif
 
 #define PREALLOC_WLAN_SEC_NUM           4
 #define PREALLOC_WLAN_BUF_NUM           160
@@ -310,21 +329,18 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void)
            return -1;
     }
 
-    if (gpio_request(RK29SDK_WIFI_GPIO_RESET_N, "wifi reset")) {
+#ifdef RK30SDK_WIFI_GPIO_RESET_N
+    if (gpio_request(RK30SDK_WIFI_GPIO_RESET_N, "wifi reset")) {
            pr_info("%s: request wifi reset gpio failed\n", __func__);
            gpio_free(RK30SDK_WIFI_GPIO_POWER_N);
            return -1;
     }
-       /*
-    if (gpio_request(RK29SDK_BT_GPIO_RESET_N, "bt reset")) {
-          pr_info("%s: request bt reset gpio failed\n", __func__);
-          gpio_free(RK29SDK_WIFI_GPIO_RESET_N);
-          return -1;
-    }*/
+#endif    
 
-    gpio_direction_output(RK30SDK_WIFI_GPIO_POWER_N, GPIO_LOW);
-    gpio_direction_output(RK29SDK_WIFI_GPIO_RESET_N,    GPIO_LOW);
-    //gpio_direction_output(RK29SDK_BT_GPIO_RESET_N,      GPIO_LOW);
+    gpio_direction_output(RK30SDK_WIFI_GPIO_POWER_N, !RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE);
+#ifdef RK30SDK_WIFI_GPIO_RESET_N    
+    gpio_direction_output(RK30SDK_WIFI_GPIO_RESET_N, !RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE);
+#endif    
 
     #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
     
@@ -347,22 +363,26 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void)
     return 0;
 }
 
-static int rk29sdk_wifi_power(int on)
+#ifndef CONFIG_MACH_RK2928_A720
+int rk29sdk_wifi_power(int on)
 {
         pr_info("%s: %d\n", __func__, on);
         if (on){
-                gpio_set_value(RK30SDK_WIFI_GPIO_POWER_N, GPIO_HIGH);
-                               mdelay(50);
+                gpio_set_value(RK30SDK_WIFI_GPIO_POWER_N, RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE);
+                mdelay(50);
+
                 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)     
                 rk29_sdmmc_gpio_open(1, 1); //added by xbw at 2011-10-13
                 #endif
 
-                gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, GPIO_HIGH);
+#ifdef RK30SDK_WIFI_GPIO_RESET_N
+                gpio_set_value(RK30SDK_WIFI_GPIO_RESET_N, RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE);
+#endif                
                 mdelay(100);
                 pr_info("wifi turn on power\n");
         }else{
 //                if (!rk29sdk_bt_power_state){
-                        gpio_set_value(RK30SDK_WIFI_GPIO_POWER_N, GPIO_LOW);
+                        gpio_set_value(RK30SDK_WIFI_GPIO_POWER_N, !RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE);
 
                         #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)     
                         rk29_sdmmc_gpio_open(1, 0); //added by xbw at 2011-10-13
@@ -374,20 +394,37 @@ static int rk29sdk_wifi_power(int on)
 //                {
 //                        pr_info("wifi shouldn't shut off power, bt is using it!\n");
 //                }
-                  gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, GPIO_LOW);
+#ifdef RK30SDK_WIFI_GPIO_RESET_N
+                gpio_set_value(RK30SDK_WIFI_GPIO_RESET_N, !RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE);
+#endif 
 
         }
 
-//        rk29sdk_wifi_power_state = on;
+        //rk29sdk_wifi_power_state = on;
         return 0;
 }
+#else
+int rk29sdk_wifi_power(int on)
+{
+        pr_info("%s: %d\n", __func__, on);
+        if (on){
+                rk2928_usb_wifi_on();
+                pr_info("wifi turn on power\n");
+        }else{
+                rk2928_usb_wifi_off();         
+                pr_info("wifi shut off power\n");
+        }
+
+        return 0;
+}
+#endif
+EXPORT_SYMBOL(rk29sdk_wifi_power);
 
 static int rk29sdk_wifi_reset_state;
 static int rk29sdk_wifi_reset(int on)
 {
         pr_info("%s: %d\n", __func__, on);
-        gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, on);
-        mdelay(100);
+        //mdelay(100);
         rk29sdk_wifi_reset_state = on;
         return 0;
 }
index 855357498177970ea5c87ef324a92a3806897e75..2c289e92665ab4e71add5de14b42165fb3f2e4b8 100644 (file)
@@ -77,12 +77,8 @@ int wifi_gpio_operate(struct wifi_power *gpio, int flag)
  */\r
 int wifi_turn_on_rtl8192c_card(void)\r
 {\r
-#ifdef CONFIG_MACH_RK2928_A720\r
-        rk2928_usb_wifi_on();\r
-#else\r
        //wifi_gpio_operate(&power_gpio, GPIO_SWITCH_ON);\r
         rk29sdk_wifi_power(1);\r
-#endif\r
        if (power_gpio.use_gpio != POWER_NOT_USE_GPIO)\r
                msleep(1000);\r
        \r
@@ -100,12 +96,8 @@ int wifi_turn_on_card(int module)
 \r
 int wifi_turn_off_card(void)\r
 {\r
-#ifdef CONFIG_MACH_RK2928_A720\r
-        rk2928_usb_wifi_off();\r
-#else\r
        //wifi_gpio_operate(&power_gpio, GPIO_SWITCH_OFF);\r
         rk29sdk_wifi_power(0);\r
-#endif\r
        msleep(5);\r
 \r
        wifi_turn_off_callback();\r