forked from Minki/linux
ALSA: control: add snd_ctl_rename()
Add a snd_ctl_rename() function that takes care of updating the control
hash entries for callers that already have the relevant struct snd_kcontrol
at hand and hold the control write lock (or simply haven't registered the
card yet).
Fixes: c27e1efb61
("ALSA: control: Use xarray for faster lookups")
Cc: stable@vger.kernel.org
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
Link: https://lore.kernel.org/r/4170b71117ea81357a4f7eb8410f7cde20836c70.1666296963.git.maciej.szmigiero@oracle.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4881bda5ea
commit
966f015fe4
@ -138,6 +138,7 @@ int snd_ctl_remove(struct snd_card * card, struct snd_kcontrol * kcontrol);
|
||||
int snd_ctl_replace(struct snd_card *card, struct snd_kcontrol *kcontrol, bool add_on_replace);
|
||||
int snd_ctl_remove_id(struct snd_card * card, struct snd_ctl_elem_id *id);
|
||||
int snd_ctl_rename_id(struct snd_card * card, struct snd_ctl_elem_id *src_id, struct snd_ctl_elem_id *dst_id);
|
||||
void snd_ctl_rename(struct snd_card *card, struct snd_kcontrol *kctl, const char *name);
|
||||
int snd_ctl_activate_id(struct snd_card *card, struct snd_ctl_elem_id *id, int active);
|
||||
struct snd_kcontrol *snd_ctl_find_numid(struct snd_card * card, unsigned int numid);
|
||||
struct snd_kcontrol *snd_ctl_find_id(struct snd_card * card, struct snd_ctl_elem_id *id);
|
||||
|
@ -753,6 +753,29 @@ int snd_ctl_rename_id(struct snd_card *card, struct snd_ctl_elem_id *src_id,
|
||||
}
|
||||
EXPORT_SYMBOL(snd_ctl_rename_id);
|
||||
|
||||
/**
|
||||
* snd_ctl_rename - rename the control on the card
|
||||
* @card: the card instance
|
||||
* @kctl: the control to rename
|
||||
* @name: the new name
|
||||
*
|
||||
* Renames the specified control on the card to the new name.
|
||||
*
|
||||
* Make sure to take the control write lock - down_write(&card->controls_rwsem).
|
||||
*/
|
||||
void snd_ctl_rename(struct snd_card *card, struct snd_kcontrol *kctl,
|
||||
const char *name)
|
||||
{
|
||||
remove_hash_entries(card, kctl);
|
||||
|
||||
if (strscpy(kctl->id.name, name, sizeof(kctl->id.name)) < 0)
|
||||
pr_warn("ALSA: Renamed control new name '%s' truncated to '%s'\n",
|
||||
name, kctl->id.name);
|
||||
|
||||
add_hash_entries(card, kctl);
|
||||
}
|
||||
EXPORT_SYMBOL(snd_ctl_rename);
|
||||
|
||||
#ifndef CONFIG_SND_CTL_FAST_LOOKUP
|
||||
static struct snd_kcontrol *
|
||||
snd_ctl_find_numid_slow(struct snd_card *card, unsigned int numid)
|
||||
|
Loading…
Reference in New Issue
Block a user