From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 08:20:59 +0000
Subject: [PATCH] kernel_5.10 no rt

---
 kernel/net/rfkill/rfkill-bt.c |   25 ++++++++++++-------------
 1 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/kernel/net/rfkill/rfkill-bt.c b/kernel/net/rfkill/rfkill-bt.c
index 719a23d..73b802c 100644
--- a/kernel/net/rfkill/rfkill-bt.c
+++ b/kernel/net/rfkill/rfkill-bt.c
@@ -175,15 +175,11 @@
 		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 @@
 
 	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");
 
@@ -323,8 +313,6 @@
 				gpio_direction_output(poweron->io,
 						      poweron->enable);
 				msleep(20);
-				if (gpio_is_valid(wake_host->io))
-					gpio_direction_input(wake_host->io);
 			}
 		}
 
@@ -335,6 +323,11 @@
 				msleep(20);
 				gpio_direction_output(reset->io, reset->enable);
 			}
+		}
+
+		if (gpio_is_valid(wake_host->io)) {
+			LOG("%s: set bt wake_host input!\n", __func__);
+			gpio_direction_input(wake_host->io);
 		}
 
 		if (pinctrl && gpio_is_valid(rts->io)) {
@@ -369,6 +362,10 @@
 			}
 		}
 		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);
@@ -410,6 +407,7 @@
 	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
@@ -439,6 +437,7 @@
 	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)) {

--
Gitblit v1.6.2