From d6176267ebcf08baaf5909461e98409e67fd895c Mon Sep 17 00:00:00 2001 From: CMY Date: Fri, 8 Jun 2012 11:11:10 +0800 Subject: [PATCH] fix bug when disable disable bt auto sleep, and use gpio.enable replace is_falling --- arch/arm/mach-rk30/board-rk30-sdk.c | 2 +- include/linux/rfkill-rk.h | 1 - net/rfkill/rfkill-rk.c | 11 +++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/arm/mach-rk30/board-rk30-sdk.c b/arch/arm/mach-rk30/board-rk30-sdk.c index 481f6da93a60..0eead113a8a2 100755 --- a/arch/arm/mach-rk30/board-rk30-sdk.c +++ b/arch/arm/mach-rk30/board-rk30-sdk.c @@ -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 diff --git a/include/linux/rfkill-rk.h b/include/linux/rfkill-rk.h index cb78dc0f93bf..14241c4b8fa1 100644 --- a/include/linux/rfkill-rk.h +++ b/include/linux/rfkill-rk.h @@ -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; }; diff --git a/net/rfkill/rfkill-rk.c b/net/rfkill/rfkill-rk.c index 7d004b20178d..31d12b312359 100644 --- a/net/rfkill/rfkill-rk.c +++ b/net/rfkill/rfkill-rk.c @@ -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); } -- 2.34.1