ALSA: ice1712: Use the standard snd_ctl_add_followers() helper
authorTakashi Iwai <tiwai@suse.de>
Fri, 21 Jul 2023 07:16:43 +0000 (09:16 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 21 Jul 2023 07:37:49 +0000 (09:37 +0200)
Instead of open-code, use the new standard helper to manage vmaster
stuff for code simplification.

Also, handle the errors from the helper more properly instead of
silently ignoring.

The code changes the call order of snd_ctl_add() of the vmaster object
and its followers for avoiding the possible memory leaks at error
path.  But there should be no difference in the functionality.

Link: https://lore.kernel.org/r/20230721071643.3631-5-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/juli.c
sound/pci/ice1712/quartet.c

index d80ecf1edc16290d7b14c5625770d8fc0236c9a9..d679842ae1bd7a844aace1e8b90a9b03640f9537 100644 (file)
@@ -408,21 +408,6 @@ static const char * const follower_vols[] = {
 static
 DECLARE_TLV_DB_SCALE(juli_master_db_scale, -6350, 50, 1);
 
-static void add_followers(struct snd_card *card,
-                         struct snd_kcontrol *master,
-                         const char * const *list)
-{
-       for (; *list; list++) {
-               struct snd_kcontrol *follower =
-                       snd_ctl_find_id_mixer(card, *list);
-               /* dev_dbg(card->dev, "add_followers - %s\n", *list); */
-               if (follower) {
-                       /* dev_dbg(card->dev, "follower %s found\n", *list); */
-                       snd_ctl_add_follower(master, follower);
-               }
-       }
-}
-
 static int juli_add_controls(struct snd_ice1712 *ice)
 {
        struct juli_spec *spec = ice->spec;
@@ -445,8 +430,10 @@ static int juli_add_controls(struct snd_ice1712 *ice)
                                              juli_master_db_scale);
        if (!vmaster)
                return -ENOMEM;
-       add_followers(ice->card, vmaster, follower_vols);
        err = snd_ctl_add(ice->card, vmaster);
+       if (err < 0)
+               return err;
+       err = snd_ctl_add_followers(ice->card, vmaster, follower_vols);
        if (err < 0)
                return err;
 
index 9450c4b104f7ba500e4fa2ce6c41ac083c184bc5..f61ee9f5c754e0f5e69049712467385295ef8d4a 100644 (file)
@@ -766,17 +766,6 @@ static const char * const follower_vols[] = {
 static
 DECLARE_TLV_DB_SCALE(qtet_master_db_scale, -6350, 50, 1);
 
-static void add_followers(struct snd_card *card,
-                         struct snd_kcontrol *master, const char * const *list)
-{
-       for (; *list; list++) {
-               struct snd_kcontrol *follower =
-                       snd_ctl_find_id_mixer(card, *list);
-               if (follower)
-                       snd_ctl_add_follower(master, follower);
-       }
-}
-
 static int qtet_add_controls(struct snd_ice1712 *ice)
 {
        struct qtet_spec *spec = ice->spec;
@@ -797,8 +786,10 @@ static int qtet_add_controls(struct snd_ice1712 *ice)
                        qtet_master_db_scale);
        if (!vmaster)
                return -ENOMEM;
-       add_followers(ice->card, vmaster, follower_vols);
        err = snd_ctl_add(ice->card, vmaster);
+       if (err < 0)
+               return err;
+       err = snd_ctl_add_followers(ice->card, vmaster, follower_vols);
        if (err < 0)
                return err;
        /* only capture SPDIF over AK4113 */