diff options
| author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2018-03-09 18:48:54 +0100 | 
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2018-03-12 10:57:43 -0700 | 
| commit | 946857636d279486eaa47c930930185631f28fce (patch) | |
| tree | 4792c587b7b7fbf8fe020b4749e5ee09e780cc4f | |
| parent | 7928b2cbe55b2a410a0f5c1f154610059c57b1b2 (diff) | |
| download | linux-946857636d279486eaa47c930930185631f28fce.tar.bz2 | |
ASoC: Add snd_soc_of_put_dai_link_codecs() helper function
The code for dereferencing device nodes in the 'codecs' array is moved
to a separate function so we can avoid open coding that in drivers.
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | include/sound/soc.h | 1 | ||||
| -rw-r--r-- | sound/soc/soc-core.c | 32 | 
2 files changed, 24 insertions, 9 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h index 747fd583b9dc..4a387f0b3d56 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1807,6 +1807,7 @@ int snd_soc_of_get_dai_name(struct device_node *of_node,  int snd_soc_of_get_dai_link_codecs(struct device *dev,  				   struct device_node *of_node,  				   struct snd_soc_dai_link *dai_link); +void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link);  int snd_soc_add_dai_link(struct snd_soc_card *card,  				struct snd_soc_dai_link *dai_link); diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 96c44f6576c9..a1f86e85bff9 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -4398,6 +4398,26 @@ int snd_soc_of_get_dai_name(struct device_node *of_node,  EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name);  /* + * snd_soc_of_put_dai_link_codecs - Dereference device nodes in the codecs array + * @dai_link: DAI link + * + * Dereference device nodes acquired by snd_soc_of_get_dai_link_codecs(). + */ +void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link) +{ +	struct snd_soc_dai_link_component *component = dai_link->codecs; +	int index; + +	for (index = 0; index < dai_link->num_codecs; index++, component++) { +		if (!component->of_node) +			break; +		of_node_put(component->of_node); +		component->of_node = NULL; +	} +} +EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_codecs); + +/*   * snd_soc_of_get_dai_link_codecs - Parse a list of CODECs in the devicetree   * @dev: Card device   * @of_node: Device node @@ -4406,7 +4426,8 @@ EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name);   * Builds an array of CODEC DAI components from the DAI link property   * 'sound-dai'.   * The array is set in the DAI link and the number of DAIs is set accordingly. - * The device nodes in the array (of_node) must be dereferenced by the caller. + * The device nodes in the array (of_node) must be dereferenced by calling + * snd_soc_of_put_dai_link_codecs() on @dai_link.   *   * Returns 0 for success   */ @@ -4454,14 +4475,7 @@ int snd_soc_of_get_dai_link_codecs(struct device *dev,  	}  	return 0;  err: -	for (index = 0, component = dai_link->codecs; -	     index < dai_link->num_codecs; -	     index++, component++) { -		if (!component->of_node) -			break; -		of_node_put(component->of_node); -		component->of_node = NULL; -	} +	snd_soc_of_put_dai_link_codecs(dai_link);  	dai_link->codecs = NULL;  	dai_link->num_codecs = 0;  	return ret;  |