]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: simple-card-utils: Don't use __free(device_node) at graph_util_parse_dai()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 28 Feb 2025 00:29:30 +0000 (00:29 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 13 Mar 2025 22:33:02 +0000 (22:33 +0000)
commit 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for
device node") uses __free(device_node) for dlc->of_node, but we need to
keep it while driver is in use.

Don't use __free(device_node) in graph_util_parse_dai().

Fixes: 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for device node")
Reported-by: Thuan Nguyen <thuan.nguyen-hong@banvien.com.vn>
Reported-by: Detlev Casanova <detlev.casanova@collabora.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Thuan Nguyen <thuan.nguyen-hong@banvien.com.vn>
Tested-by: Detlev Casanova <detlev.casanova@collabora.com>
Link: https://patch.msgid.link/87eczisyhh.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/generic/simple-card-utils.c

index c2445c5ccd84c24faa8aed5112227b6ca9a46949..32efb30c55d6959895f8f25c28532d1cd88a42c8 100644 (file)
@@ -1077,6 +1077,7 @@ static int graph_get_dai_id(struct device_node *ep)
 int graph_util_parse_dai(struct device *dev, struct device_node *ep,
                         struct snd_soc_dai_link_component *dlc, int *is_single_link)
 {
+       struct device_node *node;
        struct of_phandle_args args = {};
        struct snd_soc_dai *dai;
        int ret;
@@ -1084,7 +1085,7 @@ int graph_util_parse_dai(struct device *dev, struct device_node *ep,
        if (!ep)
                return 0;
 
-       struct device_node *node __free(device_node) = of_graph_get_port_parent(ep);
+       node = of_graph_get_port_parent(ep);
 
        /*
         * Try to find from DAI node
@@ -1126,8 +1127,10 @@ int graph_util_parse_dai(struct device *dev, struct device_node *ep,
         *    if he unbinded CPU or Codec.
         */
        ret = snd_soc_get_dlc(&args, dlc);
-       if (ret < 0)
+       if (ret < 0) {
+               of_node_put(node);
                return ret;
+       }
 
 parse_dai_end:
        if (is_single_link)