ASoC: Add snd_soc_of_put_dai_link_codecs() helper function
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Fri, 9 Mar 2018 17:48:54 +0000 (18:48 +0100)
committerJunghoon Kim <jhoon20.kim@samsung.com>
Thu, 14 Feb 2019 05:58:12 +0000 (14:58 +0900)
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.

Change-Id: I08f51d2a0ee3a6c412fb430ba97fe0fb1d011e5c
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc.h
sound/soc/soc-core.c

index d22de97..69e0689 100644 (file)
@@ -1703,6 +1703,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);
index 42c2a30..5b79a95 100644 (file)
@@ -4304,6 +4304,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
@@ -4312,7 +4332,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
  */
@@ -4360,14 +4381,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;