From e049351a09c78db8a08aa5c49ce8eba0a3d6824e Mon Sep 17 00:00:00 2001 From: hwg Date: Sun, 16 Sep 2012 12:16:04 +0800 Subject: [PATCH] wifi: modify wifi gpio control --- arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c | 58 +++++++++----- arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c | 76 ++++++++++--------- drivers/net/wireless/rkusbwifi/wifi_power.c | 10 +-- .../net/wireless/rkusbwifi/wifi_power_ops.c | 8 +- 4 files changed, 86 insertions(+), 66 deletions(-) mode change 100644 => 100755 arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c diff --git a/arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c b/arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c index 0c91aeeaf266..9a070a7914e0 100755 --- a/arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c +++ b/arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c @@ -230,11 +230,27 @@ static void (*wifi_status_cb)(int card_present, void *dev_id); static void *wifi_status_cb_devid; #ifdef CONFIG_WIFI_CONTROL_FUNC -//#define RK29SDK_WIFI_BT_GPIO_POWER_N RK30_PIN3_PD0 -//#define RK29SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD0 -//#define RK29SDK_BT_GPIO_RESET_N RK30_PIN3_PD1 + +// +// 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 RK30_PIN3_PD0 -//#define RK30SDK_BT_GPIO_POWER_N RK30_PIN3_PD1 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH +#endif + +#if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) +#define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW +#endif + +#if defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319) +#define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH +#define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1 +#define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH +#endif #define PREALLOC_WLAN_SEC_NUM 4 #define PREALLOC_WLAN_BUF_NUM 160 @@ -337,21 +353,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; } +#endif - 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; - }*/ - - 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) @@ -374,22 +387,24 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void) return 0; } -static int rk29sdk_wifi_power(int on) +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); + 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, 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 @@ -401,19 +416,20 @@ 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; return 0; } +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); rk29sdk_wifi_reset_state = on; return 0; diff --git a/arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c b/arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c old mode 100644 new mode 100755 index fc2a97b0d3a2..361d7e5278bf --- a/arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c +++ b/arch/arm/mach-rk30/board-rk3066b-sdk-sdmmc.c @@ -195,15 +195,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 RK29SDK_WIFI_BT_GPIO_POWER_N RK30_PIN3_PD0 -#define RK29SDK_WIFI_GPIO_RESET_N RK30_PIN2_PA7 -//#define RK29SDK_BT_GPIO_RESET_N RK30_PIN3_PD1 -#define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0 -//#define RK30SDK_BT_GPIO_POWER_N RK30_PIN3_PD1 + +// +// 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 RK30_PIN3_PD0 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH +#define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN2_PA7 +#define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH +#endif + +#if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) +#define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW +#endif + +#if defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319) +#define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0 +#define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH +#define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN2_PA7 +#define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH +#endif #define PREALLOC_WLAN_SEC_NUM 4 #define PREALLOC_WLAN_BUF_NUM 160 @@ -310,25 +326,19 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void) pr_info("%s: request wifi power gpio failed\n", __func__); return -1; } -#ifdef RK29SDK_WIFI_GPIO_RESET_N - 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; } -#endif +#endif - /*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; - }*/ - - gpio_direction_output(RK30SDK_WIFI_GPIO_POWER_N, GPIO_LOW); -#ifdef RK29SDK_WIFI_GPIO_RESET_N - gpio_direction_output(RK29SDK_WIFI_GPIO_RESET_N, GPIO_LOW); -#endif - //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) @@ -351,25 +361,25 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void) return 0; } -static int rk29sdk_wifi_power(int on) +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); + 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 -#ifdef RK29SDK_WIFI_GPIO_RESET_N - gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, GPIO_HIGH); -#endif +#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 @@ -381,24 +391,22 @@ static int rk29sdk_wifi_power(int on) // { // pr_info("wifi shouldn't shut off power, bt is using it!\n"); // } -#ifdef RK29SDK_WIFI_GPIO_RESET_N - gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, GPIO_LOW); -#endif +#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; return 0; } +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); -#ifdef RK29SDK_WIFI_GPIO_RESET_N - gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, on); - mdelay(100); -#endif + //mdelay(100); rk29sdk_wifi_reset_state = on; return 0; } diff --git a/drivers/net/wireless/rkusbwifi/wifi_power.c b/drivers/net/wireless/rkusbwifi/wifi_power.c index 68a9abd981a5..a0dd91b7ad5a 100755 --- a/drivers/net/wireless/rkusbwifi/wifi_power.c +++ b/drivers/net/wireless/rkusbwifi/wifi_power.c @@ -39,19 +39,11 @@ EXPORT_SYMBOL(init_channel_plan); */ struct wifi_power power_gpio = { - //POWER_NOT_USE_GPIO, 0, 0, 0, 0, 0 + POWER_NOT_USE_GPIO, 0, 0, 0, 0, 0 // RBOX //POWER_USE_GPIO, POWER_GPIO_IOMUX, //GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6, RK29_PIN5_PD6, GPIO_HIGH - -#if defined(CONFIG_ARCH_RK3066B) - //RK3066B M701 - POWER_USE_GPIO, 0, - 0, 0, RK30_PIN3_PD0, GPIO_HIGH -#else - POWER_NOT_USE_GPIO, 0, 0, 0, 0, 0 -#endif }; /* diff --git a/drivers/net/wireless/rkusbwifi/wifi_power_ops.c b/drivers/net/wireless/rkusbwifi/wifi_power_ops.c index 6897ddd3ffaa..855357498177 100644 --- a/drivers/net/wireless/rkusbwifi/wifi_power_ops.c +++ b/drivers/net/wireless/rkusbwifi/wifi_power_ops.c @@ -30,6 +30,8 @@ extern struct wifi_power power_gpio; extern struct wifi_power power_save_gpio; extern struct wifi_power power_reset_gpio; +extern int rk29sdk_wifi_power(int on); + #define OS_IOMUX(name, value) rk29_mux_api_set((name), (value)); int wifi_gpio_operate(struct wifi_power *gpio, int flag) @@ -78,7 +80,8 @@ int wifi_turn_on_rtl8192c_card(void) #ifdef CONFIG_MACH_RK2928_A720 rk2928_usb_wifi_on(); #else - wifi_gpio_operate(&power_gpio, GPIO_SWITCH_ON); + //wifi_gpio_operate(&power_gpio, GPIO_SWITCH_ON); + rk29sdk_wifi_power(1); #endif if (power_gpio.use_gpio != POWER_NOT_USE_GPIO) msleep(1000); @@ -100,7 +103,8 @@ int wifi_turn_off_card(void) #ifdef CONFIG_MACH_RK2928_A720 rk2928_usb_wifi_off(); #else - wifi_gpio_operate(&power_gpio, GPIO_SWITCH_OFF); + //wifi_gpio_operate(&power_gpio, GPIO_SWITCH_OFF); + rk29sdk_wifi_power(0); #endif msleep(5); -- 2.34.1