[alsa-devel] [PATCH] ASoC: simple-card-utils: fixup asoc_simple_card_get_dai_id() ID method
Kunihiko Hayashi
hayashi.kunihiko at socionext.com
Sat Dec 15 01:16:54 CET 2018
Hi Morioto-san,
On 2018/12/14 11:29, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>
> commit b6f3fc005a2c8 ("ASoC: simple-card-utils: fixup
> asoc_simple_card_get_dai_id() counting") fixuped getting DAI ID method.
> It will get DAI ID from OF graph "port", but, we want to consider about
> "endpoint", too.
> And, we also want to keep compatibility.
>
> This patch fixup it as
>
> if (driver has specified DAI ID)
> use it as DAI ID
> else if (OF graph endpoint has reg)
> use it as DAI ID
> else if (OF graph port has reg)
> use it as DAI ID
> else
> use endpoint count as DAI ID
>
> Fixes: commit b6f3fc005a2c8 ("ASoC: simple-card-utils: fixup asoc_simple_card_get_dai_id() counting")
> Reported-by: Tony Lindgren <tony at atomide.com>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> Tested-by: Tony Lindgren <tony at atomide.com>
Sorry for late reply.
It works fine with our devicetree that doesn't have 'reg' properties.
Tested-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>
Thank you,
> ---
> sound/soc/generic/simple-card-utils.c | 32 ++++++++++++++++++++++++++++----
> 1 file changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
> index 17d8aee..b807a47 100644
> --- a/sound/soc/generic/simple-card-utils.c
> +++ b/sound/soc/generic/simple-card-utils.c
> @@ -269,22 +269,46 @@ EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dai);
>
> static int asoc_simple_card_get_dai_id(struct device_node *ep)
> {
> + struct device_node *node;
> + struct device_node *endpoint;
> struct of_endpoint info;
> + int i, id;
> int ret;
>
> + /* use driver specified DAI ID if exist */
> ret = snd_soc_get_dai_id(ep);
> if (ret != -ENOTSUPP)
> return ret;
>
> + /* use endpoint/port reg if exist */
> + ret = of_graph_parse_endpoint(ep, &info);
> + if (ret == 0) {
> + if (info.id)
> + return info.id;
> + if (info.port)
> + return info.port;
> + }
> +
> + node = of_graph_get_port_parent(ep);
> +
> /*
> * Non HDMI sound case, counting port/endpoint on its DT
> * is enough. Let's count it.
> */
> - ret = of_graph_parse_endpoint(ep, &info);
> - if (ret)
> - return -ENXIO;
> + i = 0;
> + id = -1;
> + for_each_endpoint_of_node(node, endpoint) {
> + if (endpoint == ep)
> + id = i;
> + i++;
> + }
> +
> + of_node_put(node);
> +
> + if (id < 0)
> + return -ENODEV;
>
> - return info.port;
> + return id;
> }
>
> int asoc_simple_card_parse_graph_dai(struct device_node *ep,
>
More information about the Alsa-devel
mailing list