]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge remote-tracking branches 'asoc/topic/tlv320aic32x4', 'asoc/topic/tlv320aic3x...
authorMark Brown <broonie@kernel.org>
Wed, 28 Mar 2018 02:31:04 +0000 (10:31 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 28 Mar 2018 02:31:04 +0000 (10:31 +0800)
1  2  3  4  5  6 
sound/soc/soc-topology.c

diff --combined sound/soc/soc-topology.c
index 782c580b7aa32e53eda7a7a46db832f4c6b1d6a6,01a50413c66f6612762791b2d1d905b077eb87a2,01a50413c66f6612762791b2d1d905b077eb87a2,01a50413c66f6612762791b2d1d905b077eb87a2,b363f2409f727083fd7298fa0fd0e9ac79b9ecdf,01a50413c66f6612762791b2d1d905b077eb87a2..fa27d0fca6dce10ed8befc8df9cdf7406dbcac75
@@@@@@@ -504,6 -504,6 -504,6 -504,6 -504,9 -504,6 +504,9 @@@@@@@ static void remove_widget(struct snd_so
        if (dobj->ops && dobj->ops->widget_unload)
                dobj->ops->widget_unload(comp, dobj);
      
++++ +  if (!w->kcontrols)
++++ +          goto free_news;
++++ +
        /*
         * Dynamic Widgets either have 1..N enum kcontrols or mixers.
         * The enum may either have an array of values or strings.
                                kfree(se->dobj.control.dtexts[j]);
      
                        kfree(se);
 +++++                  kfree(w->kcontrol_news[i].name);
                }
---- -          kfree(w->kcontrol_news);
        } else {
                /* volume mixer or bytes controls */
                for (i = 0; i < w->num_kcontrols; i++) {
                         */
                        kfree((void *)kcontrol->private_value);
                        snd_ctl_remove(card, kcontrol);
 +++++                  kfree(w->kcontrol_news[i].name);
                }
---- -          kfree(w->kcontrol_news);
        }
++++ +
++++ +free_news:
++++ +  kfree(w->kcontrol_news);
++++ +
        /* widget w is freed by soc-dapm.c */
      }
      
@@@@@@@ -1235,9 -1233,7 -1233,7 -1233,7 -1238,7 -1233,7 +1240,9 @@@@@@@ static struct snd_kcontrol_new *soc_tpl
                dev_dbg(tplg->dev, " adding DAPM widget mixer control %s at %d\n",
                        mc->hdr.name, i);
      
 -----          kc[i].name = mc->hdr.name;
 +++++          kc[i].name = kstrdup(mc->hdr.name, GFP_KERNEL);
 +++++          if (kc[i].name == NULL)
 +++++                  goto err_str;
                kc[i].private_value = (long)sm;
                kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER;
                kc[i].access = mc->hdr.access;
                        kfree(sm);
                        continue;
                }
++++ +
++++ +          /* create any TLV data */
++++ +          soc_tplg_create_tlv(tplg, &kc[i], &mc->hdr);
        }
        return kc;
      
      err_str:
        kfree(sm);
      err:
 -----  for (--i; i >= 0; i--)
 +++++  for (--i; i >= 0; i--) {
                kfree((void *)kc[i].private_value);
 +++++          kfree(kc[i].name);
 +++++  }
        kfree(kc);
        return NULL;
      }
@@@@@@@ -1316,9 -1310,7 -1310,7 -1310,7 -1318,7 -1310,7 +1324,9 @@@@@@@ static struct snd_kcontrol_new *soc_tpl
                dev_dbg(tplg->dev, " adding DAPM widget enum control %s\n",
                        ec->hdr.name);
      
 -----          kc[i].name = ec->hdr.name;
 +++++          kc[i].name = kstrdup(ec->hdr.name, GFP_KERNEL);
 +++++          if (kc[i].name == NULL)
 +++++                  goto err_se;
                kc[i].private_value = (long)se;
                kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER;
                kc[i].access = ec->hdr.access;
                        kfree(se->dobj.control.dtexts[j]);
      
                kfree(se);
 +++++          kfree(kc[i].name);
        }
      err:
        kfree(kc);
@@@@@@@ -1433,9 -1424,7 -1424,7 -1424,7 -1432,7 -1424,7 +1441,9 @@@@@@@ static struct snd_kcontrol_new *soc_tpl
                        "ASoC: adding bytes kcontrol %s with access 0x%x\n",
                        be->hdr.name, be->hdr.access);
      
 -----          kc[i].name = be->hdr.name;
 +++++          kc[i].name = kstrdup(be->hdr.name, GFP_KERNEL);
 +++++          if (kc[i].name == NULL)
 +++++                  goto err;
                kc[i].private_value = (long)sbe;
                kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER;
                kc[i].access = be->hdr.access;
        return kc;
      
      err:
 -----  for (--i; i >= 0; i--)
 +++++  for (--i; i >= 0; i--) {
                kfree((void *)kc[i].private_value);
 +++++          kfree(kc[i].name);
 +++++  }
      
        kfree(kc);
        return NULL;