ALSA: Add snd_ctl_activate_id()
Added a new API function snd_ctl_activate_id() for activate / inactivate the control element dynamically. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Este cometimento está contido em:

cometido por
Mark Brown

ascendente
80e1b84ffe
cometimento
3cbdd75331
@@ -465,6 +465,52 @@ error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* snd_ctl_activate_id - activate/inactivate the control of the given id
|
||||
* @card: the card instance
|
||||
* @id: the control id to activate/inactivate
|
||||
* @active: non-zero to activate
|
||||
*
|
||||
* Finds the control instance with the given id, and activate or
|
||||
* inactivate the control together with notification, if changed.
|
||||
*
|
||||
* Returns 0 if unchanged, 1 if changed, or a negative error code on failure.
|
||||
*/
|
||||
int snd_ctl_activate_id(struct snd_card *card, struct snd_ctl_elem_id *id,
|
||||
int active)
|
||||
{
|
||||
struct snd_kcontrol *kctl;
|
||||
struct snd_kcontrol_volatile *vd;
|
||||
unsigned int index_offset;
|
||||
int ret;
|
||||
|
||||
down_write(&card->controls_rwsem);
|
||||
kctl = snd_ctl_find_id(card, id);
|
||||
if (kctl == NULL) {
|
||||
ret = -ENOENT;
|
||||
goto unlock;
|
||||
}
|
||||
index_offset = snd_ctl_get_ioff(kctl, &kctl->id);
|
||||
vd = &kctl->vd[index_offset];
|
||||
ret = 0;
|
||||
if (active) {
|
||||
if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_INACTIVE))
|
||||
goto unlock;
|
||||
vd->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
|
||||
} else {
|
||||
if (vd->access & SNDRV_CTL_ELEM_ACCESS_INACTIVE)
|
||||
goto unlock;
|
||||
vd->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
|
||||
}
|
||||
ret = 1;
|
||||
unlock:
|
||||
up_write(&card->controls_rwsem);
|
||||
if (ret > 0)
|
||||
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO, id);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_ctl_activate_id);
|
||||
|
||||
/**
|
||||
* snd_ctl_rename_id - replace the id of a control on the card
|
||||
* @card: the card instance
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador