staging: greybus: audio_helper: Use snd_ctl_remove_id()
authorTakashi Iwai <tiwai@suse.de>
Tue, 18 Jul 2023 14:12:55 +0000 (16:12 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 20 Jul 2023 08:00:39 +0000 (10:00 +0200)
Use the standard snd_ctl_remove_id() helper function instead of open
code.  This allows us to reduce the manual card->rwsem lock in the
caller side.

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Johan Hovold <johan@kernel.org>
Cc: Alex Elder <elder@kernel.org>
Cc: greybus-dev@lists.linaro.org
Link: https://lore.kernel.org/r/20230718141304.1032-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
drivers/staging/greybus/audio_helper.c

index 223987616e074e7d8b972b65cd78ce9f27c9b0bc..97ce5b9ad7fd325d15b66d09c10c98e64652cbf0 100644 (file)
@@ -149,7 +149,6 @@ static int gbaudio_remove_controls(struct snd_card *card, struct device *dev,
        for (i = 0; i < num_controls; i++) {
                const struct snd_kcontrol_new *control = &controls[i];
                struct snd_ctl_elem_id id;
-               struct snd_kcontrol *kctl;
 
                if (prefix)
                        snprintf(id.name, sizeof(id.name), "%s %s", prefix,
@@ -161,17 +160,10 @@ static int gbaudio_remove_controls(struct snd_card *card, struct device *dev,
                id.device = control->device;
                id.subdevice = control->subdevice;
                id.index = control->index;
-               kctl = snd_ctl_find_id(card, &id);
-               if (!kctl) {
-                       dev_err(dev, "Failed to find %s\n", control->name);
-                       continue;
-               }
-               err = snd_ctl_remove(card, kctl);
-               if (err < 0) {
+               err = snd_ctl_remove_id(card, &id);
+               if (err < 0)
                        dev_err(dev, "%d: Failed to remove %s\n", err,
                                control->name);
-                       continue;
-               }
        }
        return 0;
 }
@@ -181,11 +173,7 @@ int gbaudio_remove_component_controls(struct snd_soc_component *component,
                                      unsigned int num_controls)
 {
        struct snd_card *card = component->card->snd_card;
-       int err;
 
-       down_write(&card->controls_rwsem);
-       err = gbaudio_remove_controls(card, component->dev, controls,
-                                     num_controls, component->name_prefix);
-       up_write(&card->controls_rwsem);
-       return err;
+       return gbaudio_remove_controls(card, component->dev, controls,
+                                      num_controls, component->name_prefix);
 }