mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
fix bug when disable disable bt auto sleep, and use gpio.enable replace is_falling
This commit is contained in:
parent
6c2c81d2c8
commit
d6176267eb
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user