ALSA: usb-audio: rework add_control_to_empty()
This patch renames add_control_to_empty() to snd_usb_mixer_add_control() and exports it, so the quirks functions can make use of it. Also, as "struct mixer_build" is private to mixer.c, rewrite the function to take an argument of type "struct usb_mixer_interface" instead. Signed-off-by: Daniel Mack <zonque@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
5875c2cb76
Коммит
ef9d597089
|
@ -535,20 +535,21 @@ static int check_matrix_bitmap(unsigned char *bmap, int ich, int och, int num_ou
|
|||
* 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;
|
||||
}
|
||||
|
||||
|
@ -1176,7 +1177,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1340,7 +1341,7 @@ static void build_mixer_unit_ctl(struct mixer_build *state,
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1641,7 +1642,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid, void *raw
|
|||
|
||||
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;
|
||||
|
@ -1858,7 +1859,7 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid, void
|
|||
|
||||
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;
|
||||
|
|
|
@ -55,4 +55,7 @@ int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval,
|
|||
void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer);
|
||||
int snd_usb_mixer_activate(struct usb_mixer_interface *mixer);
|
||||
|
||||
int snd_usb_mixer_add_control(struct usb_mixer_interface *mixer,
|
||||
struct snd_kcontrol *kctl);
|
||||
|
||||
#endif /* __USBMIXER_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче