static int hci_uart_setup(struct hci_dev *hdev)
 {
        struct hci_uart *hu = hci_get_drvdata(hdev);
+       struct hci_rp_read_local_version *ver;
+       struct sk_buff *skb;
 
        if (hu->proto->setup)
                return hu->proto->setup(hu);
 
+       if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags))
+               return 0;
+
+       skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
+                            HCI_INIT_TIMEOUT);
+       if (IS_ERR(skb)) {
+               BT_ERR("%s: Reading local version information failed (%ld)",
+                      hdev->name, PTR_ERR(skb));
+               return 0;
+       }
+
+       if (skb->len != sizeof(*ver)) {
+               BT_ERR("%s: Event length mismatch for version information",
+                      hdev->name);
+               goto done;
+       }
+
+       ver = (struct hci_rp_read_local_version *)skb->data;
+
+       switch (le16_to_cpu(ver->manufacturer)) {
+       }
+
+done:
+       kfree_skb(skb);
        return 0;
 }
 
                                    BIT(HCI_UART_RESET_ON_INIT) |
                                    BIT(HCI_UART_CREATE_AMP) |
                                    BIT(HCI_UART_INIT_PENDING) |
-                                   BIT(HCI_UART_EXT_CONFIG);
+                                   BIT(HCI_UART_EXT_CONFIG) |
+                                   BIT(HCI_UART_VND_DETECT);
 
        if (flags & ~valid_flags)
                return -EINVAL;