Skip to content

Commit e660b35

Browse files
apanditholtmann
authored andcommitted
Bluetooth: btmrvl_sdio: Refactor irq wakeup
Use device_init_wakeup to allow the Bluetooth dev to wake the system from suspend. Currently, the device can wake the system but no power/wakeup entry is created in sysfs to allow userspace to disable wakeup. Signed-off-by: Abhishek Pandit-Subedi <[email protected]> Reviewed-by: Douglas Anderson <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent 76d4c13 commit e660b35

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

drivers/bluetooth/btmrvl_sdio.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ static int btmrvl_sdio_probe_of(struct device *dev,
111111
"Failed to request irq_bt %d (%d)\n",
112112
cfg->irq_bt, ret);
113113
}
114+
115+
/* Configure wakeup (enabled by default) */
116+
device_init_wakeup(dev, true);
114117
disable_irq(cfg->irq_bt);
115118
}
116119
}
@@ -1654,6 +1657,7 @@ static void btmrvl_sdio_remove(struct sdio_func *func)
16541657
MODULE_SHUTDOWN_REQ);
16551658
btmrvl_sdio_disable_host_int(card);
16561659
}
1660+
16571661
BT_DBG("unregister dev");
16581662
card->priv->surprise_removed = true;
16591663
btmrvl_sdio_unregister_dev(card);
@@ -1690,7 +1694,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
16901694
}
16911695

16921696
/* Enable platform specific wakeup interrupt */
1693-
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
1697+
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
1698+
device_may_wakeup(dev)) {
16941699
card->plt_wake_cfg->wake_by_bt = false;
16951700
enable_irq(card->plt_wake_cfg->irq_bt);
16961701
enable_irq_wake(card->plt_wake_cfg->irq_bt);
@@ -1707,7 +1712,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
17071712
BT_ERR("HS not activated, suspend failed!");
17081713
/* Disable platform specific wakeup interrupt */
17091714
if (card->plt_wake_cfg &&
1710-
card->plt_wake_cfg->irq_bt >= 0) {
1715+
card->plt_wake_cfg->irq_bt >= 0 &&
1716+
device_may_wakeup(dev)) {
17111717
disable_irq_wake(card->plt_wake_cfg->irq_bt);
17121718
disable_irq(card->plt_wake_cfg->irq_bt);
17131719
}
@@ -1767,7 +1773,8 @@ static int btmrvl_sdio_resume(struct device *dev)
17671773
hci_resume_dev(hcidev);
17681774

17691775
/* Disable platform specific wakeup interrupt */
1770-
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
1776+
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
1777+
device_may_wakeup(dev)) {
17711778
disable_irq_wake(card->plt_wake_cfg->irq_bt);
17721779
disable_irq(card->plt_wake_cfg->irq_bt);
17731780
if (card->plt_wake_cfg->wake_by_bt)

0 commit comments

Comments
 (0)