fix bug for rk903 work in rk29
authorCMY <cmy@rock-chips.com>
Fri, 18 May 2012 12:21:51 +0000 (20:21 +0800)
committerCMY <cmy@rock-chips.com>
Fri, 18 May 2012 12:21:51 +0000 (20:21 +0800)
arch/arm/mach-rk29/board-rk29sdk-rfkill.c
arch/arm/mach-rk30/board-rk30-sdk-rfkill.c

index 05c28a24a9464ab24e5eb21515b37497bb1e1f3f..30909abbd3ad3b93421359e5f5c76cc84fa678d2 100755 (executable)
 #define DBG(x...)
 #endif
 
-// IO Configuration for RK29
-#ifdef CONFIG_ARCH_RK29
-
+#ifdef CONFIG_BCM4329
 #define WIFI_BT_POWER_TOGGLE   1
-#define BT_WAKE_HOST_SUPPORT   0
+#else
+#define WIFI_BT_POWER_TOGGLE   0
+#endif
+
+#define BT_WAKE_LOCK_TIMEOUT    10 //s
+
+/*
+ * IO Configuration for RK29
+ */
+#ifdef CONFIG_ARCH_RK29
 
+#define BT_WAKE_HOST_SUPPORT    0
 
+/* IO configuration */
+// BT power pin
 #define BT_GPIO_POWER           RK29_PIN5_PD6
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
-#define BT_GPIO_RESET                  RK29_PIN6_PC4
-#define IOMUX_BT_GPIO_RESET
+#define IOMUX_BT_GPIO_POWER()     rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
 
-#ifdef CONFIG_BT_HCIBCM4325
+// BT reset pin
+#define BT_GPIO_RESET           RK29_PIN6_PC4
+#define IOMUX_BT_GPIO_RESET()
+
+// BT wakeup pin
 #define BT_GPIO_WAKE_UP         RK29_PIN6_PC5
 #define IOMUX_BT_GPIO_WAKE_UP()
-#endif
-
-#if BT_WAKE_HOST_SUPPORT
 
+// BT wakeup host pin
 #define BT_GPIO_WAKE_UP_HOST
 #define IOMUX_BT_GPIO_WAKE_UP_HOST()
 
-#define BT_WAKE_LOCK_TIMEOUT    10 //s
-
 //bt cts paired to uart rts
 #define UART_RTS                RK29_PIN2_PA7
-#define IOMUX_UART_RTS_GPIO     rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7);
-#define IOMUX_UART_RTS          rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N);
-#endif
+#define IOMUX_UART_RTS_GPIO()   rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7)
+#define IOMUX_UART_RTS()        rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N)
 
-// IO Configuration for RK30
+/*
+ * IO Configuration for RK30
+ */
 #elif defined (CONFIG_ARCH_RK30)
 
-#define WIFI_BT_POWER_TOGGLE    0
-#define BT_WAKE_HOST_SUPPORT   1
+#define BT_WAKE_HOST_SUPPORT    1
 
-#ifdef CONFIG_RK903
+/* IO configuration */
+// BT power pin
 #define BT_GPIO_POWER           RK30_PIN3_PC7
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
+#define IOMUX_BT_GPIO_POWER()     rk29_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
+
+// BT reset pin
 #define BT_GPIO_RESET           RK30_PIN3_PD1
-#define IOMUX_BT_GPIO_RESET     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
-#else
-#define BT_GPIO_POWER           RK30_PIN3_PD1
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
-#endif
+#define IOMUX_BT_GPIO_RESET()     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
 
-#ifdef CONFIG_BT_HCIBCM4325
+// BT wakeup pin
 #define BT_GPIO_WAKE_UP         RK30_PIN3_PC6
 #define IOMUX_BT_GPIO_WAKE_UP() rk29_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_GPIO3C6);
-#endif
 
-#if BT_WAKE_HOST_SUPPORT
+// BT wakeup host pin
 #define BT_GPIO_WAKE_UP_HOST    RK30_PIN6_PA7
 #define IOMUX_BT_GPIO_WAKE_UP_HOST()
 
-#define BT_WAKE_LOCK_TIMEOUT    10 //s
-
 //bt cts paired to uart rts
 #define UART_RTS                RK30_PIN1_PA3
-#define IOMUX_UART_RTS_GPIO     rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3);
-#define IOMUX_UART_RTS          rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N);
-#endif
+#define IOMUX_UART_RTS_GPIO()     rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3)
+#define IOMUX_UART_RTS()          rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N)
 
 #endif
 
@@ -167,7 +170,7 @@ static void rfkill_do_wakeup(struct work_struct *work)
 {
     DBG("Enable UART_RTS\n");
     gpio_set_value(UART_RTS, GPIO_LOW);
-    IOMUX_UART_RTS;
+    IOMUX_UART_RTS();
 }
 
 static DECLARE_DELAYED_WORK(wakeup_work, rfkill_do_wakeup);
@@ -182,7 +185,7 @@ static int bcm4329_rfkill_suspend(struct platform_device *pdev, pm_message_t sta
 
     DBG("Disable UART_RTS\n");
        //To prevent uart to receive bt data when suspended
-       IOMUX_UART_RTS_GPIO;
+       IOMUX_UART_RTS_GPIO();
        gpio_request(UART_RTS, "uart_rts");
        gpio_set_value(UART_RTS, GPIO_HIGH);
 
@@ -223,7 +226,6 @@ static irqreturn_t bcm4329_wake_host_irq(int irq, void *dev)
 }
 #endif
 
-#ifdef CONFIG_BT_HCIBCM4325
 int bcm4325_sleep(int bSleep)
 {
     DBG("************* bt enter sleep: %d ***************\n", bSleep);
@@ -233,27 +235,27 @@ int bcm4325_sleep(int bSleep)
     gpio_set_value(BT_GPIO_WAKE_UP, bSleep?GPIO_LOW:GPIO_HIGH);
     return 0;
 }
-#endif
   
 static int bcm4329_set_block(void *data, bool blocked)
 {
-       DBG("%s---blocked :%d\n", __FUNCTION__, blocked);
+       DBG("%s---blocked :%d\n", __FUNCTION__, blocked);
 
-        IOMUX_BT_GPIO_POWER;
-        IOMUX_BT_GPIO_RESET;
+    IOMUX_BT_GPIO_POWER();
+    IOMUX_BT_GPIO_RESET();
 
-       if (false == blocked) { 
-                       gpio_set_value(BT_GPIO_POWER, GPIO_HIGH);  /* bt power on */
-#ifdef BT_GPIO_RESET            
-            gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
-            mdelay(20);
-               gpio_set_value(BT_GPIO_RESET, GPIO_HIGH);  /* bt reset deactive*/
-#endif
-               mdelay(20);
+       if (false == blocked) { 
+               gpio_set_value(BT_GPIO_POWER, GPIO_HIGH);  /* bt power on */
+               mdelay(20);
+
+        gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
+        mdelay(20);
+               gpio_set_value(BT_GPIO_RESET, GPIO_HIGH);  /* bt reset deactive*/
+
+        mdelay(20);
+        bcm4325_sleep(0); // ensure bt is wakeup
         
-               pr_info("bt turn on power\n");
-       }
-       else {
+       pr_info("bt turn on power\n");
+       } else {
 #if WIFI_BT_POWER_TOGGLE
                if (!rk29sdk_wifi_power_state) {
 #endif
@@ -265,19 +267,17 @@ static int bcm4329_set_block(void *data, bool blocked)
                        pr_info("bt shouldn't shut off power, wifi is using it!\n");
                }
 #endif
-#ifdef BT_GPIO_RESET
-               gpio_set_value(BT_GPIO_RESET, GPIO_LOW);  /* bt reset active*/
-               mdelay(20);
-#endif
-       }
+
+        gpio_set_value(BT_GPIO_RESET, GPIO_LOW);  /* bt reset active*/
+        mdelay(20);
+       }
 
 #if WIFI_BT_POWER_TOGGLE
-       rk29sdk_bt_power_state = !blocked;
+       rk29sdk_bt_power_state = !blocked;
 #endif
-       return 0;
+       return 0;
 }
 
-
 static const struct rfkill_ops bcm4329_rfk_ops = {
        .set_block = bcm4329_set_block,
 };
@@ -314,9 +314,7 @@ static int __devinit bcm4329_rfkill_probe(struct platform_device *pdev)
        }
        
        gpio_request(BT_GPIO_POWER, NULL);
-#ifdef BT_GPIO_RESET
        gpio_request(BT_GPIO_RESET, NULL);
-#endif
 #ifdef CONFIG_BT_HCIBCM4325
        gpio_request(BT_GPIO_WAKE_UP, NULL);
 #endif
index c89bf82fd9a191c0aaffe59fa84473fc75e24d92..30909abbd3ad3b93421359e5f5c76cc84fa678d2 100755 (executable)
 #define DBG(x...)
 #endif
 
-// IO Configuration for RK29
-#ifdef CONFIG_ARCH_RK29
-
+#ifdef CONFIG_BCM4329
 #define WIFI_BT_POWER_TOGGLE   1
-#define BT_WAKE_HOST_SUPPORT   0
+#else
+#define WIFI_BT_POWER_TOGGLE   0
+#endif
+
+#define BT_WAKE_LOCK_TIMEOUT    10 //s
+
+/*
+ * IO Configuration for RK29
+ */
+#ifdef CONFIG_ARCH_RK29
 
+#define BT_WAKE_HOST_SUPPORT    0
 
+/* IO configuration */
+// BT power pin
 #define BT_GPIO_POWER           RK29_PIN5_PD6
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
-#define BT_GPIO_RESET                  RK29_PIN6_PC4
-#define IOMUX_BT_GPIO_RESET
+#define IOMUX_BT_GPIO_POWER()     rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
 
-#ifdef CONFIG_BT_HCIBCM4325
+// BT reset pin
+#define BT_GPIO_RESET           RK29_PIN6_PC4
+#define IOMUX_BT_GPIO_RESET()
+
+// BT wakeup pin
 #define BT_GPIO_WAKE_UP         RK29_PIN6_PC5
 #define IOMUX_BT_GPIO_WAKE_UP()
-#endif
-
-#if BT_WAKE_HOST_SUPPORT
 
+// BT wakeup host pin
 #define BT_GPIO_WAKE_UP_HOST
 #define IOMUX_BT_GPIO_WAKE_UP_HOST()
 
-#define BT_WAKE_LOCK_TIMEOUT    10 //s
-
 //bt cts paired to uart rts
 #define UART_RTS                RK29_PIN2_PA7
-#define IOMUX_UART_RTS_GPIO     rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7);
-#define IOMUX_UART_RTS          rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N);
-#endif
+#define IOMUX_UART_RTS_GPIO()   rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7)
+#define IOMUX_UART_RTS()        rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N)
 
-// IO Configuration for RK30
+/*
+ * IO Configuration for RK30
+ */
 #elif defined (CONFIG_ARCH_RK30)
 
-#define WIFI_BT_POWER_TOGGLE    0
-#define BT_WAKE_HOST_SUPPORT   1
+#define BT_WAKE_HOST_SUPPORT    1
 
-#ifdef CONFIG_RK903
+/* IO configuration */
+// BT power pin
 #define BT_GPIO_POWER           RK30_PIN3_PC7
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
+#define IOMUX_BT_GPIO_POWER()     rk29_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
+
+// BT reset pin
 #define BT_GPIO_RESET           RK30_PIN3_PD1
-#define IOMUX_BT_GPIO_RESET     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
-#else
-#define BT_GPIO_POWER           RK30_PIN3_PD1
-#define IOMUX_BT_GPIO_POWER     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
-#define IOMUX_BT_GPIO_RESET
-#endif
+#define IOMUX_BT_GPIO_RESET()     rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
 
-#ifdef CONFIG_BT_HCIBCM4325
+// BT wakeup pin
 #define BT_GPIO_WAKE_UP         RK30_PIN3_PC6
 #define IOMUX_BT_GPIO_WAKE_UP() rk29_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_GPIO3C6);
-#endif
 
-#if BT_WAKE_HOST_SUPPORT
+// BT wakeup host pin
 #define BT_GPIO_WAKE_UP_HOST    RK30_PIN6_PA7
 #define IOMUX_BT_GPIO_WAKE_UP_HOST()
 
-#define BT_WAKE_LOCK_TIMEOUT    10 //s
-
 //bt cts paired to uart rts
 #define UART_RTS                RK30_PIN1_PA3
-#define IOMUX_UART_RTS_GPIO     rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3);
-#define IOMUX_UART_RTS          rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N);
-#endif
+#define IOMUX_UART_RTS_GPIO()     rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3)
+#define IOMUX_UART_RTS()          rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N)
 
 #endif
 
@@ -168,7 +170,7 @@ static void rfkill_do_wakeup(struct work_struct *work)
 {
     DBG("Enable UART_RTS\n");
     gpio_set_value(UART_RTS, GPIO_LOW);
-    IOMUX_UART_RTS;
+    IOMUX_UART_RTS();
 }
 
 static DECLARE_DELAYED_WORK(wakeup_work, rfkill_do_wakeup);
@@ -183,7 +185,7 @@ static int bcm4329_rfkill_suspend(struct platform_device *pdev, pm_message_t sta
 
     DBG("Disable UART_RTS\n");
        //To prevent uart to receive bt data when suspended
-       IOMUX_UART_RTS_GPIO;
+       IOMUX_UART_RTS_GPIO();
        gpio_request(UART_RTS, "uart_rts");
        gpio_set_value(UART_RTS, GPIO_HIGH);
 
@@ -224,7 +226,6 @@ static irqreturn_t bcm4329_wake_host_irq(int irq, void *dev)
 }
 #endif
 
-#ifdef CONFIG_BT_HCIBCM4325
 int bcm4325_sleep(int bSleep)
 {
     DBG("************* bt enter sleep: %d ***************\n", bSleep);
@@ -234,27 +235,27 @@ int bcm4325_sleep(int bSleep)
     gpio_set_value(BT_GPIO_WAKE_UP, bSleep?GPIO_LOW:GPIO_HIGH);
     return 0;
 }
-#endif
   
 static int bcm4329_set_block(void *data, bool blocked)
 {
-       DBG("%s---blocked :%d\n", __FUNCTION__, blocked);
+       DBG("%s---blocked :%d\n", __FUNCTION__, blocked);
 
-        IOMUX_BT_GPIO_POWER;
-        IOMUX_BT_GPIO_RESET;
+    IOMUX_BT_GPIO_POWER();
+    IOMUX_BT_GPIO_RESET();
 
-       if (false == blocked) { 
-                       gpio_set_value(BT_GPIO_POWER, GPIO_HIGH);  /* bt power on */
-#ifdef BT_GPIO_RESET            
-            gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
-            mdelay(20);
-               gpio_set_value(BT_GPIO_RESET, GPIO_HIGH);  /* bt reset deactive*/
-#endif
-               mdelay(20);
+       if (false == blocked) { 
+               gpio_set_value(BT_GPIO_POWER, GPIO_HIGH);  /* bt power on */
+               mdelay(20);
+
+        gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
+        mdelay(20);
+               gpio_set_value(BT_GPIO_RESET, GPIO_HIGH);  /* bt reset deactive*/
+
+        mdelay(20);
+        bcm4325_sleep(0); // ensure bt is wakeup
         
-               pr_info("bt turn on power\n");
-       }
-       else {
+       pr_info("bt turn on power\n");
+       } else {
 #if WIFI_BT_POWER_TOGGLE
                if (!rk29sdk_wifi_power_state) {
 #endif
@@ -266,19 +267,17 @@ static int bcm4329_set_block(void *data, bool blocked)
                        pr_info("bt shouldn't shut off power, wifi is using it!\n");
                }
 #endif
-#ifdef BT_GPIO_RESET
-               gpio_set_value(BT_GPIO_RESET, GPIO_LOW);  /* bt reset active*/
-               mdelay(20);
-#endif
-       }
+
+        gpio_set_value(BT_GPIO_RESET, GPIO_LOW);  /* bt reset active*/
+        mdelay(20);
+       }
 
 #if WIFI_BT_POWER_TOGGLE
-       rk29sdk_bt_power_state = !blocked;
+       rk29sdk_bt_power_state = !blocked;
 #endif
-       return 0;
+       return 0;
 }
 
-
 static const struct rfkill_ops bcm4329_rfk_ops = {
        .set_block = bcm4329_set_block,
 };
@@ -315,9 +314,7 @@ static int __devinit bcm4329_rfkill_probe(struct platform_device *pdev)
        }
        
        gpio_request(BT_GPIO_POWER, NULL);
-#ifdef BT_GPIO_RESET
        gpio_request(BT_GPIO_RESET, NULL);
-#endif
 #ifdef CONFIG_BT_HCIBCM4325
        gpio_request(BT_GPIO_WAKE_UP, NULL);
 #endif