ALSA: control: Introduce snd_ctl_find_id_mixer()
authorTakashi Iwai <tiwai@suse.de>
Thu, 20 Jul 2023 08:20:58 +0000 (10:20 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 21 Jul 2023 07:10:38 +0000 (09:10 +0200)
A commonly seen pattern is to run snd_ctl_find_id() for a mixer
control element with a given string.  Let's provide a standard helper
for achieving that for simplifying the code.

Link: https://lore.kernel.org/r/20230720082108.31346-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/control.h

index 42e8dbb22d8e94945e973791f084a1a7c69cbbe1..69d950a34ca31945ecae3c457791e0935fb4859e 100644 (file)
@@ -145,6 +145,28 @@ struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numi
 struct snd_kcontrol *snd_ctl_find_id_locked(struct snd_card *card, const struct snd_ctl_elem_id *id);
 struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, const struct snd_ctl_elem_id *id);
 
+/**
+ * snd_ctl_find_id_mixer - 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().
+ *
+ * Return: The pointer of the instance if found, or %NULL if not.
+ */
+static inline struct snd_kcontrol *
+snd_ctl_find_id_mixer(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(card, &id);
+}
+
 int snd_ctl_create(struct snd_card *card);
 
 int snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn);