};
 } __packed;
 
+static int btusb_set_bdaddr_mtk(struct hci_dev *hdev, const bdaddr_t *bdaddr)
+{
+       struct sk_buff *skb;
+       long ret;
+
+       skb = __hci_cmd_sync(hdev, 0xfc1a, sizeof(bdaddr), bdaddr, HCI_INIT_TIMEOUT);
+       if (IS_ERR(skb)) {
+               ret = PTR_ERR(skb);
+               bt_dev_err(hdev, "changing Mediatek device address failed (%ld)",
+                          ret);
+               return ret;
+       }
+       kfree_skb(skb);
+
+       return 0;
+}
+
 static void btusb_mtk_wmt_recv(struct urb *urb)
 {
        struct hci_dev *hdev = urb->context;
                hdev->shutdown = btusb_mtk_shutdown;
                hdev->manufacturer = 70;
                hdev->cmd_timeout = btusb_mtk_cmd_timeout;
+               hdev->set_bdaddr = btusb_set_bdaddr_mtk;
                set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
                data->recv_acl = btusb_recv_acl_mtk;
        }