ASoC: soc-core: tidyup soc_new_pcm_runtime() alloc order
This patch allocs dev first at soc_new_pcm_runtime(). This is prepare for rtd->dev, rtd->codec_dais alloc cleanup Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/877e6ef7m1.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
b7c5bc45ee
commit
d918a37610
@ -125,6 +125,9 @@ static umode_t soc_dev_attr_is_visible(struct kobject *kobj,
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
|
||||
|
||||
if (!rtd)
|
||||
return 0;
|
||||
|
||||
if (attr == &dev_attr_pmdown_time.attr)
|
||||
return attr->mode; /* always visible */
|
||||
return rtd->num_codecs ? attr->mode : 0; /* enabled only with codec */
|
||||
@ -374,9 +377,13 @@ static void soc_free_pcm_runtime(struct snd_soc_pcm_runtime *rtd)
|
||||
* we don't need to call kfree() for rtd->dev
|
||||
* see
|
||||
* soc_release_rtd_dev()
|
||||
*
|
||||
* We don't need rtd->dev NULL check, because
|
||||
* it is alloced *before* rtd.
|
||||
* see
|
||||
* soc_new_pcm_runtime()
|
||||
*/
|
||||
if (rtd->dev)
|
||||
device_unregister(rtd->dev);
|
||||
device_unregister(rtd->dev);
|
||||
kfree(rtd);
|
||||
}
|
||||
|
||||
@ -384,8 +391,28 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
|
||||
struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd;
|
||||
struct device *dev;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* for rtd->dev
|
||||
*/
|
||||
dev = kzalloc(sizeof(struct device), GFP_KERNEL);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
dev->parent = card->dev;
|
||||
dev->release = soc_release_rtd_dev;
|
||||
dev->groups = soc_dev_attr_groups;
|
||||
|
||||
dev_set_name(dev, "%s", dai_link->name);
|
||||
|
||||
ret = device_register(dev);
|
||||
if (ret < 0) {
|
||||
put_device(dev); /* soc_release_rtd_dev */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* for rtd
|
||||
*/
|
||||
@ -393,6 +420,9 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
|
||||
if (!rtd)
|
||||
goto free_rtd;
|
||||
|
||||
rtd->dev = dev;
|
||||
dev_set_drvdata(dev, rtd);
|
||||
|
||||
/*
|
||||
* for rtd->codec_dais
|
||||
*/
|
||||
@ -402,27 +432,6 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
|
||||
if (!rtd->codec_dais)
|
||||
goto free_rtd;
|
||||
|
||||
/*
|
||||
* for rtd->dev
|
||||
*/
|
||||
rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
|
||||
if (!rtd->dev)
|
||||
goto free_rtd;
|
||||
|
||||
rtd->dev->parent = card->dev;
|
||||
rtd->dev->release = soc_release_rtd_dev;
|
||||
rtd->dev->groups = soc_dev_attr_groups;
|
||||
|
||||
dev_set_name(rtd->dev, "%s", dai_link->name);
|
||||
dev_set_drvdata(rtd->dev, rtd);
|
||||
|
||||
ret = device_register(rtd->dev);
|
||||
if (ret < 0) {
|
||||
put_device(rtd->dev); /* soc_release_rtd_dev */
|
||||
rtd->dev = NULL;
|
||||
goto free_rtd;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtd remaining settings
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user