* if failed, give up and free the control instance.
  */
 
-static int add_control_to_empty(struct mixer_build *state, struct snd_kcontrol *kctl)
+int snd_usb_mixer_add_control(struct usb_mixer_interface *mixer,
+                             struct snd_kcontrol *kctl)
 {
        struct usb_mixer_elem_info *cval = kctl->private_data;
        int err;
 
-       while (snd_ctl_find_id(state->chip->card, &kctl->id))
+       while (snd_ctl_find_id(mixer->chip->card, &kctl->id))
                kctl->id.index++;
-       if ((err = snd_ctl_add(state->chip->card, kctl)) < 0) {
+       if ((err = snd_ctl_add(mixer->chip->card, kctl)) < 0) {
                snd_printd(KERN_ERR "cannot add control (err = %d)\n", err);
                return err;
        }
        cval->elem_id = &kctl->id;
-       cval->next_id_elem = state->mixer->id_elems[cval->id];
-       state->mixer->id_elems[cval->id] = cval;
+       cval->next_id_elem = mixer->id_elems[cval->id];
+       mixer->id_elems[cval->id] = cval;
        return 0;
 }
 
 
        snd_printdd(KERN_INFO "[%d] FU [%s] ch = %d, val = %d/%d/%d\n",
                    cval->id, kctl->id.name, cval->channels, cval->min, cval->max, cval->res);
-       add_control_to_empty(state, kctl);
+       snd_usb_mixer_add_control(state->mixer, kctl);
 }
 
 
 
        snd_printdd(KERN_INFO "[%d] MU [%s] ch = %d, val = %d/%d\n",
                    cval->id, kctl->id.name, cval->channels, cval->min, cval->max);
-       add_control_to_empty(state, kctl);
+       snd_usb_mixer_add_control(state->mixer, kctl);
 }
 
 
 
                snd_printdd(KERN_INFO "[%d] PU [%s] ch = %d, val = %d/%d\n",
                            cval->id, kctl->id.name, cval->channels, cval->min, cval->max);
-               if ((err = add_control_to_empty(state, kctl)) < 0)
+               if ((err = snd_usb_mixer_add_control(state->mixer, kctl)) < 0)
                        return err;
        }
        return 0;
 
        snd_printdd(KERN_INFO "[%d] SU [%s] items = %d\n",
                    cval->id, kctl->id.name, desc->bNrInPins);
-       if ((err = add_control_to_empty(state, kctl)) < 0)
+       if ((err = snd_usb_mixer_add_control(state->mixer, kctl)) < 0)
                return err;
 
        return 0;