ALSA: control: Introduce snd_ctl_find_id_mixer_locked()
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Mon, 1 Apr 2024 10:02:08 +0000 (10:02 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 2 Apr 2024 14:54:47 +0000 (15:54 +0100)
Adds wrapper function snd_ctl_find_id_mixer_locked(). This is
identical to snd_ctl_find_id_mixer() except that it can be called
from code that is already holding controls_rwsem.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Link: https://msgid.link/r/20240401100210.61277-2-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/control.h

index 9a4f4f7138da8f2ade296bae400de006c09c8451..c1659036c4a77805376717159ace29a4503bf561 100644 (file)
@@ -167,6 +167,29 @@ snd_ctl_find_id_mixer(struct snd_card *card, const char *name)
        return snd_ctl_find_id(card, &id);
 }
 
+/**
+ * snd_ctl_find_id_mixer_locked - find the control instance with the given name string
+ * @card: the card instance
+ * @name: the name string
+ *
+ * Finds the control instance with the given name and
+ * @SNDRV_CTL_ELEM_IFACE_MIXER. Other fields are set to zero.
+ *
+ * This is merely a wrapper to snd_ctl_find_id_locked().
+ * The caller must down card->controls_rwsem before calling this function.
+ *
+ * Return: The pointer of the instance if found, or %NULL if not.
+ */
+static inline struct snd_kcontrol *
+snd_ctl_find_id_mixer_locked(struct snd_card *card, const char *name)
+{
+       struct snd_ctl_elem_id id = {};
+
+       id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+       strscpy(id.name, name, sizeof(id.name));
+       return snd_ctl_find_id_locked(card, &id);
+}
+
 int snd_ctl_create(struct snd_card *card);
 
 int snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn);