| From 771acc7e4a6e5dba779cb1a7fd851a164bc81033 Mon Sep 17 00:00:00 2001 |
| From: Brian Norris <briannorris@chromium.org> |
| Date: Tue, 9 Apr 2019 11:49:17 -0700 |
| Subject: Bluetooth: btusb: request wake pin with NOAUTOEN |
| |
| From: Brian Norris <briannorris@chromium.org> |
| |
| commit 771acc7e4a6e5dba779cb1a7fd851a164bc81033 upstream. |
| |
| Badly-designed systems might have (for example) active-high wake pins |
| that default to high (e.g., because of external pull ups) until they |
| have an active firmware which starts driving it low. This can cause an |
| interrupt storm in the time between request_irq() and disable_irq(). |
| |
| We don't support shared interrupts here, so let's just pre-configure the |
| interrupt to avoid auto-enabling it. |
| |
| Fixes: fd913ef7ce61 ("Bluetooth: btusb: Add out-of-band wakeup support") |
| Fixes: 5364a0b4f4be ("arm64: dts: rockchip: move QCA6174A wakeup pin into its USB node") |
| Signed-off-by: Brian Norris <briannorris@chromium.org> |
| Reviewed-by: Matthias Kaehlcke <mka@chromium.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/bluetooth/btusb.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/bluetooth/btusb.c |
| +++ b/drivers/bluetooth/btusb.c |
| @@ -2885,6 +2885,7 @@ static int btusb_config_oob_wake(struct |
| return 0; |
| } |
| |
| + irq_set_status_flags(irq, IRQ_NOAUTOEN); |
| ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler, |
| 0, "OOB Wake-on-BT", data); |
| if (ret) { |
| @@ -2899,7 +2900,6 @@ static int btusb_config_oob_wake(struct |
| } |
| |
| data->oob_wake_irq = irq; |
| - disable_irq(irq); |
| bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq); |
| return 0; |
| } |