From b457b68a97a47efee922aca10ec478281a19dac1 Mon Sep 17 00:00:00 2001 From: Longjian Lin Date: Mon, 9 May 2022 06:08:56 +0000 Subject: [PATCH] net: rfkill-bt: match irq_wake to irq. Signed-off-by: Longjian Lin Change-Id: I5965b5d12bf3fa8bb13c9346fb8ee609800abdf6 Signed-off-by: Zou Dengming --- net/rfkill/rfkill-bt.c | 18 +++++++----------- net/rfkill/rfkill-wlan.c | 5 +++++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/net/rfkill/rfkill-bt.c b/net/rfkill/rfkill-bt.c index b3567912e24b..73b802c7faa4 100644 --- a/net/rfkill/rfkill-bt.c +++ b/net/rfkill/rfkill-bt.c @@ -175,15 +175,11 @@ static int rfkill_rk_setup_wake_irq(struct rfkill_rk_data *rfkill, int flag) rfkill->irq_req = 1; LOG("** disable irq\n"); disable_irq(irq->irq); - ret = enable_irq_wake(irq->irq); - if (ret) - goto fail3; + /*ret = disable_irq_wake(irq->irq);init irq wake is disabled,no need to disable*/ } return ret; -fail3: - free_irq(irq->irq, rfkill); fail2: gpio_free(irq->gpio.io); fail1: @@ -292,12 +288,6 @@ static int rfkill_rk_set_power(void *data, bool blocked) toggle = rfkill->pdata->power_toggle; - if (toggle) { - if (rfkill_get_wifi_power_state(&wifi_power)) { - LOG("%s: cannot get wifi power state!\n", __func__); - return -1; - } - } DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); @@ -372,6 +362,10 @@ static int rfkill_rk_set_power(void *data, bool blocked) } } if (toggle) { + if (rfkill_get_wifi_power_state(&wifi_power)) { + LOG("%s: cannot get wifi power state!\n", __func__); + return -EPERM; + } if (!wifi_power) { LOG("%s: bt will set vbat to low\n", __func__); rfkill_set_wifi_bt_power(0); @@ -413,6 +407,7 @@ static int rfkill_rk_pm_prepare(struct device *dev) if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { DBG("enable irq for bt wakeup host\n"); enable_irq(wake_host_irq->irq); + enable_irq_wake(wake_host_irq->irq); } #ifdef CONFIG_RFKILL_RESET @@ -442,6 +437,7 @@ static void rfkill_rk_pm_complete(struct device *dev) if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { LOG("** disable irq\n"); disable_irq(wake_host_irq->irq); + disable_irq_wake(wake_host_irq->irq); } if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) { diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index 89d9787b9ad9..338b59c53dbc 100644 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -319,6 +319,11 @@ int rockchip_wifi_power(int on) } wifi_power_state = 0; + + if (!rfkill_get_bt_power_state(&bt_power, &toggle)) { + LOG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); + } + if (toggle) { if (!bt_power) { LOG("%s: wifi will set vbat to low\n", __func__);