"Failed to request irq_bt %d (%d)\n",
                                        cfg->irq_bt, ret);
                        }
+
+                       /* Configure wakeup (enabled by default) */
+                       device_init_wakeup(dev, true);
                        disable_irq(cfg->irq_bt);
                }
        }
                                                        MODULE_SHUTDOWN_REQ);
                                btmrvl_sdio_disable_host_int(card);
                        }
+
                        BT_DBG("unregister dev");
                        card->priv->surprise_removed = true;
                        btmrvl_sdio_unregister_dev(card);
        }
 
        /* 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;
                enable_irq(card->plt_wake_cfg->irq_bt);
                enable_irq_wake(card->plt_wake_cfg->irq_bt);
                        BT_ERR("HS not activated, suspend failed!");
                        /* Disable platform specific wakeup interrupt */
                        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(card->plt_wake_cfg->irq_bt);
                        }
        hci_resume_dev(hcidev);
 
        /* 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(card->plt_wake_cfg->irq_bt);
                if (card->plt_wake_cfg->wake_by_bt)