wifi: modify usb wifi control by pmu
authorhwg <hwg@rock-chips.com>
Thu, 20 Sep 2012 03:31:07 +0000 (11:31 +0800)
committerhwg <hwg@rock-chips.com>
Thu, 20 Sep 2012 03:33:52 +0000 (11:33 +0800)
arch/arm/mach-rk2928/board-rk2928-a720-tps65910.c
arch/arm/mach-rk2928/board-rk2928-sdk-act8931.c
arch/arm/mach-rk2928/board-rk2928-sdk-sdmmc.c
arch/arm/mach-rk2928/include/mach/board.h

index 2ba0ed047506f08fe467bc113519f39b286f5a04..9c0e20891a200e71d2b33a35d918bb7e834541da 100755 (executable)
@@ -224,7 +224,7 @@ int tps65910_pre_init(struct tps65910 *tps65910){
        return 0;
 
 }
-void rk2928_usb_wifi_on(void)
+void rk2928_tps_usb_wifi_on(void)
 {
        struct regulator *ldo;
         ldo = regulator_get(NULL, "vmmc");  //vccio_wl
@@ -233,8 +233,8 @@ void rk2928_usb_wifi_on(void)
        regulator_put(ldo);
        udelay(100);
 }
-EXPORT_SYMBOL(rk2928_usb_wifi_on);
-void rk2928_usb_wifi_off(void)
+EXPORT_SYMBOL(rk2928_tps_usb_wifi_on);
+void rk2928_tps_usb_wifi_off(void)
 {
        struct regulator *ldo;
         ldo = regulator_get(NULL, "vmmc");  //vccio_wl
@@ -243,7 +243,7 @@ void rk2928_usb_wifi_off(void)
        regulator_put(ldo);
        udelay(100);
 }
-EXPORT_SYMBOL(rk2928_usb_wifi_off);
+EXPORT_SYMBOL(rk2928_tps_usb_wifi_off);
 
 
 int tps65910_post_init(struct tps65910 *tps65910)
index 1b2ae491c15d1ab55271a64643e03ad0629f6aa6..2e63ad9245cc9d6f833f2b46309dfadacdbb9fd5 100755 (executable)
@@ -50,10 +50,11 @@ int act8931_set_init(struct act8931 *act8931)
        regulator_put(ldo);
        udelay(100);
 
-       ldo = regulator_get(NULL, "act_ldo4");   //vcc_lcd
+       ldo = regulator_get(NULL, "act_ldo4");   //vcc_wl
        regulator_set_voltage(ldo, 3300000, 3300000);
        regulator_enable(ldo);
        printk("%s set ldo4 vcc_lcd=%dmV end\n", __func__, regulator_get_voltage(ldo));
+       regulator_disable(ldo);
        regulator_put(ldo);
        udelay(100);
        
@@ -84,6 +85,27 @@ int act8931_set_init(struct act8931 *act8931)
        return 0;
 }
 
+void rk2928_act_usb_wifi_on(void)
+{
+        struct regulator *ldo;
+        ldo = regulator_get(NULL, "act_ldo4");  //vccio_wl
+        regulator_enable(ldo);
+        printk("%s: vccio_wl enable\n", __func__);
+        regulator_put(ldo);
+        udelay(100);
+}
+EXPORT_SYMBOL(rk2928_act_usb_wifi_on);
+void rk2928_act_usb_wifi_off(void)
+{
+        struct regulator *ldo;
+        ldo = regulator_get(NULL, "act_ldo4");  //vccio_wl
+        printk("%s: vccio_wl disable\n", __func__);
+        regulator_disable(ldo);
+        regulator_put(ldo);
+        udelay(100);
+}
+EXPORT_SYMBOL(rk2928_act_usb_wifi_off);
+
 static struct regulator_consumer_supply act8931_buck1_supply[] = {
        {
                .supply = "act_dcdc1",
index f6ab8ed2532dfe2e0fb9a72e9f86f5f276431ba0..6637965aceb5fd7c80974c6317716ba5e70fd982 100755 (executable)
@@ -364,17 +364,49 @@ static int __init rk29sdk_wifi_bt_gpio_control_init(void)
 }
 
 #if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) 
-int rk29sdk_wifi_power(int on)
-{
-        /*pr_info("%s: %d\n", __func__, on);
-        if (on){
-                pr_info("wifi turn on power\n");
-        }else{         
-                pr_info("wifi shut off power\n");
-        }*/
+void rk2928_act_usb_wifi_on(void);
+void rk2928_act_usb_wifi_off(void);
+void rk2928_tps_usb_wifi_on(void);
+void rk2928_tps_usb_wifi_off(void);
+
+static int usbwifi_power_status = 1;
+static void rk2928_usb_wifi_power(int on) {
+#if defined(CONFIG_MFD_TPS65910)       
+       if(g_pmic_type == PMIC_TYPE_TPS65910) {
+               if(on)
+                       rk2928_tps_usb_wifi_on();
+               else
+                       rk2928_tps_usb_wifi_off();
+       }
+#endif
+#if defined(CONFIG_REGULATOR_ACT8931)
+       if(g_pmic_type == PMIC_TYPE_ACT8931) {
+               if(on)
+                       rk2928_act_usb_wifi_on();
+               else
+                       rk2928_act_usb_wifi_off();
+       }
+#endif
+}
 
+ int rk29sdk_wifi_power(int on)
+ {
+        pr_info("%s: %d\n", __func__, on);
+         if (on){
+                /*if(usbwifi_power_status == 1) {
+                    rk2928_usb_wifi_power(0);
+                    mdelay(50);
+                }*/
+                rk2928_usb_wifi_power(1);
+                usbwifi_power_status = 1;
+                 pr_info("wifi turn on power\n");      
+        }else{
+                rk2928_usb_wifi_power(0);
+                usbwifi_power_status = 0;      
+                 pr_info("wifi shut off power\n");
+        }
         return 0;
-}
+ }
 #else
 int rk29sdk_wifi_power(int on)
 {
index 42b2072538318f83311403cbdf2adce506da51fb..f6d6e99b2bddfc9aa0b3534f690bff28460faaac 100644 (file)
@@ -29,10 +29,6 @@ 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;