Commit e660b351 authored by Abhishek Pandit-Subedi's avatar Abhishek Pandit-Subedi Committed by Marcel Holtmann

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: default avatarAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 76d4c130
...@@ -111,6 +111,9 @@ static int btmrvl_sdio_probe_of(struct device *dev, ...@@ -111,6 +111,9 @@ static int btmrvl_sdio_probe_of(struct device *dev,
"Failed to request irq_bt %d (%d)\n", "Failed to request irq_bt %d (%d)\n",
cfg->irq_bt, ret); cfg->irq_bt, ret);
} }
/* Configure wakeup (enabled by default) */
device_init_wakeup(dev, true);
disable_irq(cfg->irq_bt); disable_irq(cfg->irq_bt);
} }
} }
...@@ -1654,6 +1657,7 @@ static void btmrvl_sdio_remove(struct sdio_func *func) ...@@ -1654,6 +1657,7 @@ static void btmrvl_sdio_remove(struct sdio_func *func)
MODULE_SHUTDOWN_REQ); MODULE_SHUTDOWN_REQ);
btmrvl_sdio_disable_host_int(card); btmrvl_sdio_disable_host_int(card);
} }
BT_DBG("unregister dev"); BT_DBG("unregister dev");
card->priv->surprise_removed = true; card->priv->surprise_removed = true;
btmrvl_sdio_unregister_dev(card); btmrvl_sdio_unregister_dev(card);
...@@ -1690,7 +1694,8 @@ static int btmrvl_sdio_suspend(struct device *dev) ...@@ -1690,7 +1694,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
} }
/* Enable platform specific wakeup interrupt */ /* Enable platform specific wakeup interrupt */
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) { if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
device_may_wakeup(dev)) {
card->plt_wake_cfg->wake_by_bt = false; card->plt_wake_cfg->wake_by_bt = false;
enable_irq(card->plt_wake_cfg->irq_bt); enable_irq(card->plt_wake_cfg->irq_bt);
enable_irq_wake(card->plt_wake_cfg->irq_bt); enable_irq_wake(card->plt_wake_cfg->irq_bt);
...@@ -1707,7 +1712,8 @@ static int btmrvl_sdio_suspend(struct device *dev) ...@@ -1707,7 +1712,8 @@ static int btmrvl_sdio_suspend(struct device *dev)
BT_ERR("HS not activated, suspend failed!"); BT_ERR("HS not activated, suspend failed!");
/* Disable platform specific wakeup interrupt */ /* Disable platform specific wakeup interrupt */
if (card->plt_wake_cfg && if (card->plt_wake_cfg &&
card->plt_wake_cfg->irq_bt >= 0) { card->plt_wake_cfg->irq_bt >= 0 &&
device_may_wakeup(dev)) {
disable_irq_wake(card->plt_wake_cfg->irq_bt); disable_irq_wake(card->plt_wake_cfg->irq_bt);
disable_irq(card->plt_wake_cfg->irq_bt); disable_irq(card->plt_wake_cfg->irq_bt);
} }
...@@ -1767,7 +1773,8 @@ static int btmrvl_sdio_resume(struct device *dev) ...@@ -1767,7 +1773,8 @@ static int btmrvl_sdio_resume(struct device *dev)
hci_resume_dev(hcidev); hci_resume_dev(hcidev);
/* Disable platform specific wakeup interrupt */ /* Disable platform specific wakeup interrupt */
if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) { if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 &&
device_may_wakeup(dev)) {
disable_irq_wake(card->plt_wake_cfg->irq_bt); disable_irq_wake(card->plt_wake_cfg->irq_bt);
disable_irq(card->plt_wake_cfg->irq_bt); disable_irq(card->plt_wake_cfg->irq_bt);
if (card->plt_wake_cfg->wake_by_bt) if (card->plt_wake_cfg->wake_by_bt)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment