#define BTUSB_OOB_WAKE_ENABLED 11
 #define BTUSB_HW_RESET_ACTIVE  12
 #define BTUSB_TX_WAIT_VND_EVT  13
-#define BTUSB_WAKEUP_DISABLE   14
+#define BTUSB_WAKEUP_AUTOSUSPEND       14
 #define BTUSB_USE_ALT3_FOR_WBS 15
 
 struct btusb_data {
 
        data->intf->needs_remote_wakeup = 1;
 
-       /* Disable device remote wakeup when host is suspended
-        * For Realtek chips, global suspend without
-        * SET_FEATURE (DEVICE_REMOTE_WAKEUP) can save more power in device.
-        */
-       if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags))
-               device_wakeup_disable(&data->udev->dev);
-
        if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
                goto done;
 
        data->intf->needs_remote_wakeup = 0;
 
        /* Enable remote wake up for auto-suspend */
-       if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags))
+       if (test_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags))
                data->intf->needs_remote_wakeup = 1;
 
        usb_autopm_put_interface(data->intf);
 {
        struct btusb_data *data = hci_get_drvdata(hdev);
 
-       if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags))
-               return true;
-
        return !device_may_wakeup(&data->udev->dev);
 }
 
                hdev->shutdown = btrtl_shutdown_realtek;
                hdev->cmd_timeout = btusb_rtl_cmd_timeout;
 
-               /* Realtek devices lose their updated firmware over global
-                * suspend that means host doesn't send SET_FEATURE
-                * (DEVICE_REMOTE_WAKEUP)
-                */
-               set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
+               /* Realtek devices need to set remote wakeup on auto-suspend */
+               set_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags);
                set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags);
        }
 
         * Actually, it depends on whether the usb host sends
         * set feature (enable wakeup) or not.
         */
-       if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags)) {
+       if (test_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags)) {
                if (PMSG_IS_AUTO(message) &&
                    device_can_wakeup(&data->udev->dev))
                        data->udev->do_remote_wakeup = 1;
-               else if (!PMSG_IS_AUTO(message))
+               else if (!PMSG_IS_AUTO(message) &&
+                        !device_may_wakeup(&data->udev->dev)) {
+                       data->udev->do_remote_wakeup = 0;
                        data->udev->reset_resume = 1;
+               }
        }
 
        return 0;