[alsa-devel] [PATCH v4 7/9] ASoC: simple-card-utils: add asoc_simple_card_parse_graph_dai()
Rob Herring
robh+dt at kernel.org
Mon Mar 20 21:26:06 CET 2017
On Mon, Mar 13, 2017 at 12:54 AM, Kuninori Morimoto
<kuninori.morimoto.gx at renesas.com> wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>
> simple-card already has asoc_simple_card_parse_dai(),
> but graph base parsing needs graph specific version of it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
> v3 -> v4
>
> - no change
>
> include/sound/simple_card_utils.h | 10 ++++++++++
> sound/soc/generic/simple-card-utils.c | 36 +++++++++++++++++++++++++++++++++++
> 2 files changed, 46 insertions(+)
>
> diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
> index af58d23..efab584 100644
> --- a/include/sound/simple_card_utils.h
> +++ b/include/sound/simple_card_utils.h
> @@ -60,6 +60,16 @@ int asoc_simple_card_parse_dai(struct device_node *node,
> const char *cells_name,
> int *is_single_links);
>
> +#define asoc_simple_card_parse_graph_cpu(ep, dai_link) \
> + asoc_simple_card_parse_graph_dai(ep, &dai_link->cpu_of_node, \
> + &dai_link->cpu_dai_name)
> +#define asoc_simple_card_parse_graph_codec(ep, dai_link) \
> + asoc_simple_card_parse_graph_dai(ep, &dai_link->codec_of_node, \
> + &dai_link->codec_dai_name)
> +int asoc_simple_card_parse_graph_dai(struct device_node *ep,
> + struct device_node **endpoint_np,
> + const char **dai_name);
> +
> int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
> struct asoc_simple_dai *simple_dai);
>
> diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
> index 4dfd9a2..67c3fa4 100644
> --- a/sound/soc/generic/simple-card-utils.c
> +++ b/sound/soc/generic/simple-card-utils.c
> @@ -10,6 +10,7 @@
> #include <linux/clk.h>
> #include <linux/module.h>
> #include <linux/of.h>
> +#include <linux/of_graph.h>
> #include <sound/simple_card_utils.h>
>
> int asoc_simple_card_parse_daifmt(struct device *dev,
> @@ -174,6 +175,41 @@ int asoc_simple_card_parse_dai(struct device_node *node,
> }
> EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dai);
>
> +int asoc_simple_card_parse_graph_dai(struct device_node *ep,
> + struct device_node **dai_of_node,
> + const char **dai_name)
> +{
> + struct device_node *node;
> + struct of_phandle_args args;
> + int ret;
> +
> + if (!ep)
> + return 0;
> + if (!dai_name)
> + return 0;
> +
> + /*
> + * of_graph_get_port_parent() will call
> + * of_node_put(). So, call of_node_get() here
> + */
> + of_node_get(ep);
> + node = of_graph_get_port_parent(ep);
> +
> + /* Get dai->name */
> + args.np = node;
> + args.args[0] = snd_soc_get_dai_id(ep);
> + args.args_count = (of_graph_get_endpoint_count(node) > 1);
This is a bit pointless. It's not the kernel's job to validate the DT.
If you don't have a graph, then of_graph_get_port_parent would have
already failed.
> +
> + ret = snd_soc_get_dai_name(&args, dai_name);
> + if (ret < 0)
> + return ret;
> +
> + *dai_of_node = node;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(asoc_simple_card_parse_graph_dai);
> +
> int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
> struct asoc_simple_dai *simple_dai)
> {
> --
> 1.9.1
>
More information about the Alsa-devel
mailing list