|
@@ -4392,6 +4392,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
|
|
@@ -4401,7 +4421,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
|
|
|
*/
|
|
@@ -4449,14 +4470,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;
|