From: hwg Date: Sun, 16 Sep 2012 04:41:20 +0000 (+0800) Subject: wifi: modify usb wifi power control for rk2928 X-Git-Tag: firefly_0821_release~8630 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3056032b0d7da5cd11945645981812dcbd708fd6;p=firefly-linux-kernel-4.4.55.git wifi: modify usb wifi power control for rk2928 --- diff --git a/arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c b/arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c old mode 100644 new mode 100755 index 69be61c317f1..8512e1e06314 --- a/arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c +++ b/arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c @@ -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; } diff --git a/drivers/net/wireless/rkusbwifi/wifi_power_ops.c b/drivers/net/wireless/rkusbwifi/wifi_power_ops.c index 855357498177..2c289e92665a 100644 --- a/drivers/net/wireless/rkusbwifi/wifi_power_ops.c +++ b/drivers/net/wireless/rkusbwifi/wifi_power_ops.c @@ -77,12 +77,8 @@ int wifi_gpio_operate(struct wifi_power *gpio, int flag) */ 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); rk29sdk_wifi_power(1); -#endif if (power_gpio.use_gpio != POWER_NOT_USE_GPIO) msleep(1000); @@ -100,12 +96,8 @@ int wifi_turn_on_card(int module) int wifi_turn_off_card(void) { -#ifdef CONFIG_MACH_RK2928_A720 - rk2928_usb_wifi_off(); -#else //wifi_gpio_operate(&power_gpio, GPIO_SWITCH_OFF); rk29sdk_wifi_power(0); -#endif msleep(5); wifi_turn_off_callback();