mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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
					
				
					 1 changed files with 32 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue