Commit 94685763 authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mark Brown

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: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 7928b2cb
...@@ -1807,6 +1807,7 @@ int snd_soc_of_get_dai_name(struct device_node *of_node, ...@@ -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, int snd_soc_of_get_dai_link_codecs(struct device *dev,
struct device_node *of_node, struct device_node *of_node,
struct snd_soc_dai_link *dai_link); 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, int snd_soc_add_dai_link(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link); struct snd_soc_dai_link *dai_link);
......
...@@ -4397,6 +4397,26 @@ int snd_soc_of_get_dai_name(struct device_node *of_node, ...@@ -4397,6 +4397,26 @@ int snd_soc_of_get_dai_name(struct device_node *of_node,
} }
EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name); 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 * snd_soc_of_get_dai_link_codecs - Parse a list of CODECs in the devicetree
* @dev: Card device * @dev: Card device
...@@ -4406,7 +4426,8 @@ EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name); ...@@ -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 * Builds an array of CODEC DAI components from the DAI link property
* 'sound-dai'. * 'sound-dai'.
* The array is set in the DAI link and the number of DAIs is set accordingly. * 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 * Returns 0 for success
*/ */
...@@ -4454,14 +4475,7 @@ int snd_soc_of_get_dai_link_codecs(struct device *dev, ...@@ -4454,14 +4475,7 @@ int snd_soc_of_get_dai_link_codecs(struct device *dev,
} }
return 0; return 0;
err: err:
for (index = 0, component = dai_link->codecs; snd_soc_of_put_dai_link_codecs(dai_link);
index < dai_link->num_codecs;
index++, component++) {
if (!component->of_node)
break;
of_node_put(component->of_node);
component->of_node = NULL;
}
dai_link->codecs = NULL; dai_link->codecs = NULL;
dai_link->num_codecs = 0; dai_link->num_codecs = 0;
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment