Unverified Commit 6a0d3607 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: simple-card / audio-graph:

Merge series from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>:

Introduce the ability for sound cards to manually order the startup of
the various components in the card.
parents 936abb09 e64343fa
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -25,6 +25,15 @@ definitions:
      capture-only:
        description: port connection used only for capture
        $ref: /schemas/types.yaml#/definitions/flag
      link-trigger-order:
        description: trigger order for both start/stop
        $ref: /schemas/types.yaml#/definitions/uint32-array
      link-trigger-order-start:
        description: trigger order for start
        $ref: /schemas/types.yaml#/definitions/uint32-array
      link-trigger-order-stop:
        description: trigger order for stop
        $ref: /schemas/types.yaml#/definitions/uint32-array

  endpoint-base:
    allOf:
+26 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0
 *
 * audio-graph.h
 *
 * Copyright (c) 2024 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
 */
#ifndef __AUDIO_GRAPH_H
#define __AUDIO_GRAPH_H

/*
 * used in
 *	link-trigger-order
 *	link-trigger-order-start
 *	link-trigger-order-stop
 *
 * default is
 *	link-trigger-order = <SND_SOC_TRIGGER_LINK
 *			      SND_SOC_TRIGGER_COMPONENT
 *			      SND_SOC_TRIGGER_DAI>;
 */
#define SND_SOC_TRIGGER_LINK		0
#define SND_SOC_TRIGGER_COMPONENT	1
#define SND_SOC_TRIGGER_DAI		2
#define SND_SOC_TRIGGER_SIZE		3	/* shoud be last */

#endif /* __AUDIO_GRAPH_H */
+4 −0
Original line number Diff line number Diff line
@@ -199,6 +199,10 @@ int graph_util_parse_dai(struct device *dev, struct device_node *ep,

void graph_util_parse_link_direction(struct device_node *np,
				    bool *is_playback_only, bool *is_capture_only);
void graph_util_parse_trigger_order(struct simple_util_priv *priv,
				    struct device_node *np,
				    enum snd_soc_trigger_order *trigger_start,
				    enum snd_soc_trigger_order *trigger_stop);

#ifdef DEBUG
static inline void simple_util_debug_dai(struct simple_util_priv *priv,
+13 −0
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ static int graph_link_init(struct simple_util_priv *priv,
	struct device_node *port_codec = ep_to_port(ep_codec);
	struct device_node *ports_cpu = port_to_ports(port_cpu);
	struct device_node *ports_codec = port_to_ports(port_codec);
	enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
	enum snd_soc_trigger_order trigger_stop  = SND_SOC_TRIGGER_ORDER_DEFAULT;
	bool playback_only = 0, capture_only = 0;
	int ret;

@@ -165,9 +167,20 @@ static int graph_link_init(struct simple_util_priv *priv,
	of_property_read_u32(ep_cpu,		"mclk-fs", &dai_props->mclk_fs);
	of_property_read_u32(ep_codec,		"mclk-fs", &dai_props->mclk_fs);

	graph_util_parse_trigger_order(priv, top,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ports_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ports_codec,	&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, port_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, port_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ep_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ep_codec,		&trigger_start, &trigger_stop);

	dai_link->playback_only	= playback_only;
	dai_link->capture_only	= capture_only;

	dai_link->trigger_start	= trigger_start;
	dai_link->trigger_stop	= trigger_stop;

	dai_link->init		= simple_util_dai_init;
	dai_link->ops		= &graph_ops;
	if (priv->ops)
+13 −0
Original line number Diff line number Diff line
@@ -759,6 +759,8 @@ static void graph_link_init(struct simple_util_priv *priv,
	struct device_node *ports_cpu, *ports_codec;
	unsigned int daifmt = 0, daiclk = 0;
	bool playback_only = 0, capture_only = 0;
	enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
	enum snd_soc_trigger_order trigger_stop  = SND_SOC_TRIGGER_ORDER_DEFAULT;
	unsigned int bit_frame = 0;

	of_node_get(port_cpu);
@@ -806,6 +808,14 @@ static void graph_link_init(struct simple_util_priv *priv,
	of_property_read_u32(ep_cpu,		"mclk-fs", &dai_props->mclk_fs);
	of_property_read_u32(ep_codec,		"mclk-fs", &dai_props->mclk_fs);

	graph_util_parse_trigger_order(priv, lnk,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ports_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ports_codec,	&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, port_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, port_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ep_cpu,		&trigger_start, &trigger_stop);
	graph_util_parse_trigger_order(priv, ep_codec,		&trigger_start, &trigger_stop);

	/*
	 * convert bit_frame
	 * We need to flip clock_provider if it was CPU node,
@@ -818,6 +828,9 @@ static void graph_link_init(struct simple_util_priv *priv,
	dai_link->playback_only	= playback_only;
	dai_link->capture_only	= capture_only;

	dai_link->trigger_start	= trigger_start;
	dai_link->trigger_stop	= trigger_stop;

	dai_link->dai_fmt	= daifmt | daiclk;
	dai_link->init		= simple_util_dai_init;
	dai_link->ops		= &graph_ops;
Loading