static bool ignore_ctl_error;
 static bool autoclock = true;
 static char *quirk_alias[SNDRV_CARDS];
+static char *delayed_register[SNDRV_CARDS];
 
 bool snd_usb_use_vmalloc = true;
 bool snd_usb_skip_validation;
 MODULE_PARM_DESC(autoclock, "Enable auto-clock selection for UAC2 devices (default: yes).");
 module_param_array(quirk_alias, charp, NULL, 0444);
 MODULE_PARM_DESC(quirk_alias, "Quirk aliases, e.g. 0123abcd:5678beef.");
+module_param_array(delayed_register, charp, NULL, 0444);
+MODULE_PARM_DESC(delayed_register, "Quirk for delayed registration, given by id:iface, e.g. 0123abcd:4.");
 module_param_named(use_vmalloc, snd_usb_use_vmalloc, bool, 0444);
 MODULE_PARM_DESC(use_vmalloc, "Use vmalloc for PCM intermediate buffers (default: yes).");
 module_param_named(skip_validation, snd_usb_skip_validation, bool, 0444);
        return false;
 }
 
+static bool check_delayed_register_option(struct snd_usb_audio *chip, int iface)
+{
+       int i;
+       unsigned int id, inum;
+
+       for (i = 0; i < ARRAY_SIZE(delayed_register); i++) {
+               if (delayed_register[i] &&
+                   sscanf(delayed_register[i], "%x:%x", &id, &inum) == 2 &&
+                   id == chip->usb_id)
+                       return inum != iface;
+       }
+
+       return false;
+}
+
 static const struct usb_device_id usb_audio_ids[]; /* defined below */
 
 /* look for the corresponding quirk */
        /* we are allowed to call snd_card_register() many times, but first
         * check to see if a device needs to skip it or do anything special
         */
-       if (!snd_usb_registration_quirk(chip, ifnum)) {
+       if (!snd_usb_registration_quirk(chip, ifnum) &&
+           !check_delayed_register_option(chip, ifnum)) {
                err = snd_card_register(chip->card);
                if (err < 0)
                        goto __error;