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>
This commit is contained in:
parent
7928b2cbe5
commit
946857636d
@ -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,
|
|||||||
}
|
}
|
||||||
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);
|
|||||||
* 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,
|
|||||||
}
|
}
|
||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user