hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/net/rfkill/rfkill-bt.c
....@@ -175,15 +175,11 @@
175175 rfkill->irq_req = 1;
176176 LOG("** disable irq\n");
177177 disable_irq(irq->irq);
178
- ret = enable_irq_wake(irq->irq);
179
- if (ret)
180
- goto fail3;
178
+ /*ret = disable_irq_wake(irq->irq);init irq wake is disabled,no need to disable*/
181179 }
182180
183181 return ret;
184182
185
-fail3:
186
- free_irq(irq->irq, rfkill);
187183 fail2:
188184 gpio_free(irq->gpio.io);
189185 fail1:
....@@ -292,12 +288,6 @@
292288
293289 toggle = rfkill->pdata->power_toggle;
294290
295
- if (toggle) {
296
- if (rfkill_get_wifi_power_state(&wifi_power)) {
297
- LOG("%s: cannot get wifi power state!\n", __func__);
298
- return -1;
299
- }
300
- }
301291
302292 DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false");
303293
....@@ -323,8 +313,6 @@
323313 gpio_direction_output(poweron->io,
324314 poweron->enable);
325315 msleep(20);
326
- if (gpio_is_valid(wake_host->io))
327
- gpio_direction_input(wake_host->io);
328316 }
329317 }
330318
....@@ -335,6 +323,11 @@
335323 msleep(20);
336324 gpio_direction_output(reset->io, reset->enable);
337325 }
326
+ }
327
+
328
+ if (gpio_is_valid(wake_host->io)) {
329
+ LOG("%s: set bt wake_host input!\n", __func__);
330
+ gpio_direction_input(wake_host->io);
338331 }
339332
340333 if (pinctrl && gpio_is_valid(rts->io)) {
....@@ -369,6 +362,10 @@
369362 }
370363 }
371364 if (toggle) {
365
+ if (rfkill_get_wifi_power_state(&wifi_power)) {
366
+ LOG("%s: cannot get wifi power state!\n", __func__);
367
+ return -EPERM;
368
+ }
372369 if (!wifi_power) {
373370 LOG("%s: bt will set vbat to low\n", __func__);
374371 rfkill_set_wifi_bt_power(0);
....@@ -410,6 +407,7 @@
410407 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
411408 DBG("enable irq for bt wakeup host\n");
412409 enable_irq(wake_host_irq->irq);
410
+ enable_irq_wake(wake_host_irq->irq);
413411 }
414412
415413 #ifdef CONFIG_RFKILL_RESET
....@@ -439,6 +437,7 @@
439437 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
440438 LOG("** disable irq\n");
441439 disable_irq(wake_host_irq->irq);
440
+ disable_irq_wake(wake_host_irq->irq);
442441 }
443442
444443 if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {