fix bug when disable disable bt auto sleep, and use gpio.enable replace is_falling

This commit is contained in:
CMY
2012-06-08 11:11:10 +08:00
parent 6c2c81d2c8
commit d6176267eb
3 changed files with 8 additions and 6 deletions

View File

@@ -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

View 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;
};

View 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)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>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)
{
// <20><><EFBFBD>õ<EFBFBD> BT_WAKE_HOST IRQ<52><51>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>Ѻ󲻻<D1BA><F3B2BBBB><EFBFBD>BT<42>IJ<EFBFBD><C4B2><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
DBG("** disable bt wakeup host\n");
LOG("** disable irq\n");
disable_irq(wake_host_irq->irq);
}