static int snd_usb_audio_create(struct usb_interface *intf,
                                struct usb_device *dev, int idx,
                                const struct snd_usb_audio_quirk *quirk,
+                               unsigned int usb_id,
                                struct snd_usb_audio **rchip)
 {
        struct snd_card *card;
        atomic_set(&chip->usage_count, 0);
        atomic_set(&chip->shutdown, 0);
 
-       chip->usb_id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
-                             le16_to_cpu(dev->descriptor.idProduct));
+       chip->usb_id = usb_id;
        INIT_LIST_HEAD(&chip->pcm_list);
        INIT_LIST_HEAD(&chip->ep_list);
        INIT_LIST_HEAD(&chip->midi_list);
                            (vid[i] == -1 || vid[i] == USB_ID_VENDOR(id)) &&
                            (pid[i] == -1 || pid[i] == USB_ID_PRODUCT(id))) {
                                err = snd_usb_audio_create(intf, dev, i, quirk,
-                                                          &chip);
+                                                          id, &chip);
                                if (err < 0)
                                        goto __error;
                                chip->pm_intf = intf;