struct snd_kcontrol *snd_soc_card_get_kcontrol_locked(struct snd_soc_card *soc_card,
                                                      const char *name)
 {
-       struct snd_card *card = soc_card->snd_card;
-       struct snd_kcontrol *kctl;
-
-       /* must be held read or write */
-       lockdep_assert_held(&card->controls_rwsem);
-
        if (unlikely(!name))
                return NULL;
 
-       list_for_each_entry(kctl, &card->controls, list)
-               if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name)))
-                       return kctl;
-       return NULL;
+       return snd_ctl_find_id_mixer_locked(soc_card->snd_card, name);
 }
 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol_locked);
 
 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
                                               const char *name)
 {
-       struct snd_card *card = soc_card->snd_card;
-       struct snd_kcontrol *kctl;
-
-       down_read(&card->controls_rwsem);
-       kctl = snd_soc_card_get_kcontrol_locked(soc_card, name);
-       up_read(&card->controls_rwsem);
+       if (unlikely(!name))
+               return NULL;
 
-       return kctl;
+       return snd_ctl_find_id_mixer(soc_card->snd_card, name);
 }
 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol);