mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
fix bug when disable disable bt auto sleep, and use gpio.enable replace is_falling
This commit is contained in:
@@ -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)
|
||||
{
|
||||
// <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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user