set_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
 
+       /* WMT cmd/event doesn't follow up the generic HCI cmd/event handling,
+        * it needs constantly polling control pipe until the host received the
+        * WMT event, thus, we should require to specifically acquire PM counter
+        * on the USB to prevent the interface from entering auto suspended
+        * while WMT cmd/event in progress.
+        */
+       err = usb_autopm_get_interface(data->intf);
+       if (err < 0)
+               goto err_free_wc;
+
        err = __hci_cmd_send(hdev, 0xfc6f, hlen, wc);
 
        if (err < 0) {
                clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
+               usb_autopm_put_interface(data->intf);
                goto err_free_wc;
        }
 
        /* Submit control IN URB on demand to process the WMT event */
        err = btusb_mtk_submit_wmt_recv_urb(hdev);
+
+       usb_autopm_put_interface(data->intf);
+
        if (err < 0)
                goto err_free_wc;