device_setup    - Device specific magic number (optional)
                     - Influence depends on the device
                     - Default: 0x0000 
+    ignore_ctl_error - Ignore any USB-controller regarding mixer
+                      interface (default: no)
 
     This module supports multiple devices, autoprobe and hotplugging.
 
        check.
     NB: async_unlink=0 would cause Oops.  It remains just for
         debugging purpose (if any).
+    NB: ignore_ctl_error=1 may help when you get an error at accessing
+        the mixer element such as URB error -22.  This happens on some
+        buggy USB device or the controller.
 
   Module snd-usb-caiaq
   --------------------
 
 static int nrpacks = 8;                /* max. number of packets per urb */
 static int async_unlink = 1;
 static int device_setup[SNDRV_CARDS]; /* device parameter for this card*/
+static int ignore_ctl_error;
 
 module_param_array(index, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for the USB audio adapter.");
 MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
 module_param_array(device_setup, int, NULL, 0444);
 MODULE_PARM_DESC(device_setup, "Specific device setup (if needed).");
-
+module_param(ignore_ctl_error, bool, 0444);
+MODULE_PARM_DESC(ignore_ctl_error,
+                "Ignore errors from USB controller for mixer interfaces.");
 
 /*
  * debug the h/w constraints
        if (err > 0) {
                /* create normal USB audio interfaces */
                if (snd_usb_create_streams(chip, ifnum) < 0 ||
-                   snd_usb_create_mixer(chip, ifnum) < 0) {
+                   snd_usb_create_mixer(chip, ifnum, ignore_ctl_error) < 0) {
                        goto __error;
                }
        }
 
                    __u8 request, __u8 requesttype, __u16 value, __u16 index,
                    void *data, __u16 size, int timeout);
 
-int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif);
+int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
+                        int ignore_error);
 void snd_usb_mixer_disconnect(struct list_head *p);
 
 int snd_usb_create_midi_interface(struct snd_usb_audio *chip, struct usb_interface *iface,
 
        }
 }
 
-int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
+int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
+                        int ignore_error)
 {
        static struct snd_device_ops dev_ops = {
                .dev_free = snd_usb_mixer_dev_free
                return -ENOMEM;
        mixer->chip = chip;
        mixer->ctrlif = ctrlif;
-#ifdef IGNORE_CTL_ERROR
-       mixer->ignore_ctl_error = 1;
-#endif
+       mixer->ignore_ctl_error = ignore_error;
        mixer->id_elems = kcalloc(256, sizeof(*mixer->id_elems), GFP_KERNEL);
        if (!mixer->id_elems) {
                kfree(mixer);