rk2928: a720: usb wifi: add power control
authorkfx <kfx@rock-chips.com>
Tue, 11 Sep 2012 03:18:06 +0000 (11:18 +0800)
committerkfx <kfx@rock-chips.com>
Tue, 11 Sep 2012 03:18:06 +0000 (11:18 +0800)
arch/arm/mach-rk2928/board-rk2928-a720-tps65910.c
arch/arm/mach-rk2928/include/mach/board.h
drivers/net/wireless/rkusbwifi/wifi_power_ops.c

index 3193edb5e40e28df096b13b6cf3def1d7353fc4d..6e9598fefc05c4fac6bd69f6d847aa13a4771876 100755 (executable)
@@ -224,6 +224,28 @@ int tps65910_pre_init(struct tps65910 *tps65910){
        return 0;
 
 }
+void rk2928_usb_wifi_on(void)
+{
+       struct regulator *ldo;
+        ldo = regulator_get(NULL, "vmmc");  //vccio_wl
+       regulator_enable(ldo); 
+       printk("%s: vccio_wl enable\n", __func__);
+       regulator_put(ldo);
+       udelay(100);
+}
+EXPORT_SYMBOL(rk2928_usb_wifi_on);
+void rk2928_usb_wifi_off(void)
+{
+       struct regulator *ldo;
+        ldo = regulator_get(NULL, "vmmc");  //vccio_wl
+       printk("%s: vccio_wl disable\n", __func__);
+       regulator_disable(ldo); 
+       regulator_put(ldo);
+       udelay(100);
+}
+EXPORT_SYMBOL(rk2928_usb_wifi_off);
+
+
 int tps65910_post_init(struct tps65910 *tps65910)
 {
        struct regulator *dcdc;
@@ -308,6 +330,7 @@ int tps65910_post_init(struct tps65910 *tps65910)
        regulator_set_voltage(ldo,3300000,3300000);
        regulator_enable(ldo); 
        printk("%s set vmmc vccio_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
+       regulator_disable(ldo); 
        regulator_put(ldo);
        udelay(100);
 
@@ -315,7 +338,6 @@ int tps65910_post_init(struct tps65910 *tps65910)
        
        return 0;
 }
-
 static struct regulator_consumer_supply tps65910_smps1_supply[] = {
        {
                .supply = "vdd1",
index f6d6e99b2bddfc9aa0b3534f690bff28460faaac..42b2072538318f83311403cbdf2adce506da51fb 100644 (file)
@@ -29,6 +29,10 @@ void board_gpio_suspend(void);
 void board_gpio_resume(void);
 void __sramfunc board_pmu_suspend(void);
 void __sramfunc board_pmu_resume(void);
+#ifdef CONFIG_MACH_RK2928_A720
+void rk2928_usb_wifi_on(void);
+void rk2928_usb_wifi_off(void);
+#endif
 
 extern struct sys_timer rk2928_timer;
 
index 4096bdac15fd23f8e79f1b0dfabb78ad9a634644..6897ddd3ffaad20027b445a8e4600a2b8bb3c702 100644 (file)
@@ -21,6 +21,7 @@
 #include <mach/gpio.h>\r
 #include <mach/iomux.h>\r
 #endif\r
+#include <mach/board.h>\r
 \r
 \r
 #if (WIFI_GPIO_POWER_CONTROL == 1)\r
@@ -74,7 +75,11 @@ 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
+#endif\r
        if (power_gpio.use_gpio != POWER_NOT_USE_GPIO)\r
                msleep(1000);\r
        \r
@@ -92,7 +97,11 @@ 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
+#endif\r
        msleep(5);\r
 \r
        wifi_turn_off_callback();\r