fix bug when disable disable bt auto sleep, and use gpio.enable replace is_falling
authorCMY <cmy@rock-chips.com>
Fri, 8 Jun 2012 03:11:10 +0000 (11:11 +0800)
committerCMY <cmy@rock-chips.com>
Fri, 8 Jun 2012 03:12:55 +0000 (11:12 +0800)
arch/arm/mach-rk30/board-rk30-sdk.c
include/linux/rfkill-rk.h
net/rfkill/rfkill-rk.c

index 481f6da93a602f971412971d633430387ccf0b95..0eead113a8a2eb21e61cf200e5306450a9b966df 100755 (executable)
@@ -1256,11 +1256,11 @@ static struct rfkill_rk_platform_data rfkill_rk_platdata = {
     .wake_host_irq      = { // BT_HOST_WAKE, for bt wakeup host when it is in deep sleep
         .gpio           = {
             .io         = RK30_PIN6_PA7, // set io to INVALID_GPIO for disable it
+            .enable     = GPIO_LOW,      // set GPIO_LOW for falling, set 0 for rising
             .iomux      = {
                 .name   = NULL,
             },
         },
-        .is_falling     = 1, // trigger type, set 1 for falling, set 0 for rising
     },
 
     .rts_gpio           = { // UART_RTS, enable or disable BT's data coming
index cb78dc0f93bf319cf9134b5d266ab6e9f089aa67..14241c4b8fa1d29650bb80f09cf89f7681b0a426 100644 (file)
@@ -40,7 +40,6 @@ struct rfkill_rk_gpio {
 
 struct rfkill_rk_irq {
     char                    name[RFKILL_RK_GPIO_NAME_SIZE];
-    int                     is_falling;
     struct rfkill_rk_gpio   gpio;
     int                     irq;
 };
index 7d004b20178df2e49812a65615caae4cab481b49..31d12b312359c60f4c235a2c54b10328584526cb 100644 (file)
@@ -178,17 +178,18 @@ static int rfkill_rk_setup_wake_irq(struct rfkill_rk_data* rfkill)
 
     if (gpio_is_valid(irq->gpio.io))
     {
-        ret = gpio_pull_updown(irq->gpio.io, irq->is_falling?GPIOPullUp:GPIOPullDown);
+        ret = gpio_pull_updown(irq->gpio.io, (irq->gpio.enable==GPIO_LOW)?GPIOPullUp:GPIOPullDown);
         if (ret) goto fail2;
-        DBG("Request irq for bt wakeup host\n");
+        LOG("Request irq for bt wakeup host\n");
         irq->irq = gpio_to_irq(irq->gpio.io);
         sprintf(irq->name, "%s_irq", irq->gpio.name);
         ret = request_irq(irq->irq,
                     rfkill_rk_wake_host_irq,
-                    irq->is_falling?IRQF_TRIGGER_FALLING:IRQF_TRIGGER_RISING,
+                    (irq->gpio.enable==GPIO_LOW)?IRQF_TRIGGER_FALLING:IRQF_TRIGGER_RISING,
                     irq->name,
                     rfkill);
         if (ret) goto fail2;
+        LOG("** disable irq\n");
         disable_irq(irq->irq);
         ret = enable_irq_wake(irq->irq);
         if (ret) goto fail3;
@@ -257,12 +258,14 @@ void rfkill_rk_sleep_bt(bool sleep)
 
     rfkill_rk_sleep_bt_internal(rfkill, sleep);
 
+#ifdef CONFIG_BT_AUTOSLEEP
     if (sleep==BT_WAKEUP)
     {
         // ÖØÐÂÉèÖÃdelay work
         schedule_delayed_work(&rfkill->bt_sleep_delay_work, 
                             msecs_to_jiffies(BT_WAKEUP_TIMEOUT));
     }
+#endif
 }
 EXPORT_SYMBOL(rfkill_rk_sleep_bt);
 
@@ -388,7 +391,7 @@ static void rfkill_rk_pm_complete(struct device *dev)
     {
         // ½ûÓõô BT_WAKE_HOST IRQ£¬È·±£ÔÚϵͳ»½ÐѺ󲻻áÒòBTµÄ²Ù×÷
         // ¶ø¶à´Î´¥·¢¸ÃÖжÏ
-        DBG("** disable bt wakeup host\n");
+        LOG("** disable irq\n");
         disable_irq(wake_host_irq->irq);
     }