mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 09:13:38 +00:00
ASoC: audio-graph-card2: use new of_graph functions
Now we can use new port related functions for port parsing. Use it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Acked-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/87ed46b5sm.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
parent
75e3d9622f
commit
0d4f080e9f
@ -234,8 +234,6 @@ enum graph_type {
|
||||
#define GRAPH_NODENAME_DPCM "dpcm"
|
||||
#define GRAPH_NODENAME_C2C "codec2codec"
|
||||
|
||||
#define port_to_endpoint(port) of_get_child_by_name(port, "endpoint")
|
||||
|
||||
#define ep_to_port(ep) of_get_parent(ep)
|
||||
static struct device_node *port_to_ports(struct device_node *port)
|
||||
{
|
||||
@ -351,14 +349,9 @@ static struct device_node *graph_get_next_multi_ep(struct device_node **port)
|
||||
* port@1 { rep1 };
|
||||
* };
|
||||
*/
|
||||
do {
|
||||
*port = of_get_next_child(ports, *port);
|
||||
if (!*port)
|
||||
break;
|
||||
} while (!of_node_name_eq(*port, "port"));
|
||||
|
||||
*port = of_graph_get_next_port(ports, *port);
|
||||
if (*port) {
|
||||
ep = port_to_endpoint(*port);
|
||||
ep = of_graph_get_next_port_endpoint(*port, NULL);
|
||||
rep = of_graph_get_remote_endpoint(ep);
|
||||
}
|
||||
|
||||
@ -530,67 +523,66 @@ static int graph_parse_node_multi_nm(struct snd_soc_dai_link *dai_link,
|
||||
* };
|
||||
* };
|
||||
*/
|
||||
struct device_node *mcpu_ep = port_to_endpoint(mcpu_port);
|
||||
struct device_node *mcpu_ep_n = mcpu_ep;
|
||||
struct device_node *mcpu_port_top = of_get_next_child(port_to_ports(mcpu_port), NULL);
|
||||
struct device_node *mcpu_ep_top = port_to_endpoint(mcpu_port_top);
|
||||
struct device_node *mcpu_ep = of_graph_get_next_port_endpoint(mcpu_port, NULL);
|
||||
struct device_node *mcpu_ports = port_to_ports(mcpu_port);
|
||||
struct device_node *mcpu_port_top = of_graph_get_next_port(mcpu_ports, NULL);
|
||||
struct device_node *mcpu_ep_top = of_graph_get_next_port_endpoint(mcpu_port_top, NULL);
|
||||
struct device_node *mcodec_ep_top = of_graph_get_remote_endpoint(mcpu_ep_top);
|
||||
struct device_node *mcodec_port_top = ep_to_port(mcodec_ep_top);
|
||||
struct device_node *mcodec_ports = port_to_ports(mcodec_port_top);
|
||||
int nm_max = max(dai_link->num_cpus, dai_link->num_codecs);
|
||||
int ret = -EINVAL;
|
||||
int ret = 0;
|
||||
|
||||
if (cpu_idx > dai_link->num_cpus)
|
||||
if (cpu_idx > dai_link->num_cpus) {
|
||||
ret = -EINVAL;
|
||||
goto mcpu_err;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
for_each_of_graph_port_endpoint(mcpu_port, mcpu_ep_n) {
|
||||
struct device_node *mcodec_ep_n;
|
||||
struct device_node *mcodec_port_i;
|
||||
struct device_node *mcodec_port;
|
||||
int codec_idx;
|
||||
|
||||
/* ignore 1st ep which is for element */
|
||||
if (mcpu_ep_n == mcpu_ep)
|
||||
continue;
|
||||
|
||||
if (*nm_idx > nm_max)
|
||||
break;
|
||||
|
||||
mcpu_ep_n = of_get_next_child(mcpu_port, mcpu_ep_n);
|
||||
if (!mcpu_ep_n) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
mcodec_ep_n = of_graph_get_remote_endpoint(mcpu_ep_n);
|
||||
mcodec_port = ep_to_port(mcodec_ep_n);
|
||||
|
||||
if (mcodec_ports != port_to_ports(mcodec_port))
|
||||
if (mcodec_ports != port_to_ports(mcodec_port)) {
|
||||
ret = -EINVAL;
|
||||
goto mcpu_err;
|
||||
|
||||
codec_idx = 0;
|
||||
mcodec_port_i = of_get_next_child(mcodec_ports, NULL);
|
||||
while (1) {
|
||||
if (codec_idx > dai_link->num_codecs)
|
||||
goto mcodec_err;
|
||||
|
||||
mcodec_port_i = of_get_next_child(mcodec_ports, mcodec_port_i);
|
||||
|
||||
if (!mcodec_port_i)
|
||||
goto mcodec_err;
|
||||
|
||||
if (mcodec_port_i == mcodec_port)
|
||||
break;
|
||||
|
||||
codec_idx++;
|
||||
}
|
||||
|
||||
dai_link->ch_maps[*nm_idx].cpu = cpu_idx;
|
||||
dai_link->ch_maps[*nm_idx].codec = codec_idx;
|
||||
codec_idx = 0;
|
||||
ret = -EINVAL;
|
||||
for_each_of_graph_port(mcodec_ports, mcodec_port_i) {
|
||||
|
||||
(*nm_idx)++;
|
||||
/* ignore 1st port which is for pair connection */
|
||||
if (mcodec_port_top == mcodec_port_i)
|
||||
continue;
|
||||
|
||||
of_node_put(mcodec_port_i);
|
||||
mcodec_err:
|
||||
if (codec_idx > dai_link->num_codecs)
|
||||
break;
|
||||
|
||||
if (mcodec_port_i == mcodec_port) {
|
||||
dai_link->ch_maps[*nm_idx].cpu = cpu_idx;
|
||||
dai_link->ch_maps[*nm_idx].codec = codec_idx;
|
||||
|
||||
(*nm_idx)++;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
codec_idx++;
|
||||
}
|
||||
of_node_put(mcodec_port);
|
||||
of_node_put(mcpu_ep_n);
|
||||
of_node_put(mcodec_ep_n);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
mcpu_err:
|
||||
of_node_put(mcpu_ep);
|
||||
@ -674,7 +666,7 @@ static int graph_parse_node_single(struct simple_util_priv *priv,
|
||||
struct device_node *port,
|
||||
struct link_info *li, int is_cpu)
|
||||
{
|
||||
struct device_node *ep = port_to_endpoint(port);
|
||||
struct device_node *ep = of_graph_get_next_port_endpoint(port, NULL);
|
||||
int ret = __graph_parse_node(priv, gtype, ep, li, is_cpu, 0);
|
||||
|
||||
of_node_put(ep);
|
||||
@ -769,7 +761,7 @@ static void graph_link_init(struct simple_util_priv *priv,
|
||||
of_node_put(port_cpu);
|
||||
port_cpu = ep_to_port(ep_cpu);
|
||||
} else {
|
||||
ep_cpu = port_to_endpoint(port_cpu);
|
||||
ep_cpu = of_graph_get_next_port_endpoint(port_cpu, NULL);
|
||||
}
|
||||
ports_cpu = port_to_ports(port_cpu);
|
||||
|
||||
@ -779,7 +771,7 @@ static void graph_link_init(struct simple_util_priv *priv,
|
||||
of_node_put(port_cpu);
|
||||
port_codec = ep_to_port(ep_codec);
|
||||
} else {
|
||||
ep_codec = port_to_endpoint(port_codec);
|
||||
ep_codec = of_graph_get_next_port_endpoint(port_codec, NULL);
|
||||
}
|
||||
ports_codec = port_to_ports(port_codec);
|
||||
|
||||
@ -850,7 +842,7 @@ int audio_graph2_link_normal(struct simple_util_priv *priv,
|
||||
struct link_info *li)
|
||||
{
|
||||
struct device_node *cpu_port = lnk;
|
||||
struct device_node *cpu_ep = port_to_endpoint(cpu_port);
|
||||
struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, NULL);
|
||||
struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
|
||||
int ret;
|
||||
|
||||
@ -883,7 +875,7 @@ int audio_graph2_link_dpcm(struct simple_util_priv *priv,
|
||||
struct device_node *lnk,
|
||||
struct link_info *li)
|
||||
{
|
||||
struct device_node *ep = port_to_endpoint(lnk);
|
||||
struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
|
||||
struct device_node *rep = of_graph_get_remote_endpoint(ep);
|
||||
struct device_node *cpu_port = NULL;
|
||||
struct device_node *codec_port = NULL;
|
||||
@ -1007,7 +999,7 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
|
||||
of_node_get(lnk);
|
||||
port0 = lnk;
|
||||
ports = port_to_ports(port0);
|
||||
port1 = of_get_next_child(ports, lnk);
|
||||
port1 = of_graph_get_next_port(ports, port0);
|
||||
|
||||
/*
|
||||
* Card2 can use original Codec2Codec settings if DT has.
|
||||
@ -1037,8 +1029,8 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
|
||||
dai_link->num_c2c_params = 1;
|
||||
}
|
||||
|
||||
ep0 = port_to_endpoint(port0);
|
||||
ep1 = port_to_endpoint(port1);
|
||||
ep0 = of_graph_get_next_port_endpoint(port0, NULL);
|
||||
ep1 = of_graph_get_next_port_endpoint(port1, NULL);
|
||||
|
||||
codec0_port = of_graph_get_remote_port(ep0);
|
||||
codec1_port = of_graph_get_remote_port(ep1);
|
||||
@ -1144,7 +1136,7 @@ static int graph_counter(struct device_node *lnk)
|
||||
* CPU/Codec = N:M case has many endpoints.
|
||||
* We can't use of_graph_get_endpoint_count() here
|
||||
*/
|
||||
return of_get_child_count(ports) - 1;
|
||||
return of_graph_get_port_count(ports) - 1;
|
||||
}
|
||||
/*
|
||||
* Single CPU / Codec
|
||||
@ -1158,7 +1150,7 @@ static int graph_count_normal(struct simple_util_priv *priv,
|
||||
struct link_info *li)
|
||||
{
|
||||
struct device_node *cpu_port = lnk;
|
||||
struct device_node *cpu_ep = port_to_endpoint(cpu_port);
|
||||
struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, NULL);
|
||||
struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
|
||||
|
||||
/*
|
||||
@ -1186,7 +1178,7 @@ static int graph_count_dpcm(struct simple_util_priv *priv,
|
||||
struct device_node *lnk,
|
||||
struct link_info *li)
|
||||
{
|
||||
struct device_node *ep = port_to_endpoint(lnk);
|
||||
struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
|
||||
struct device_node *rport = of_graph_get_remote_port(ep);
|
||||
|
||||
/*
|
||||
@ -1228,9 +1220,9 @@ static int graph_count_c2c(struct simple_util_priv *priv,
|
||||
{
|
||||
struct device_node *ports = port_to_ports(lnk);
|
||||
struct device_node *port0 = lnk;
|
||||
struct device_node *port1 = of_get_next_child(ports, of_node_get(lnk));
|
||||
struct device_node *ep0 = port_to_endpoint(port0);
|
||||
struct device_node *ep1 = port_to_endpoint(port1);
|
||||
struct device_node *port1 = of_graph_get_next_port(ports, of_node_get(port0));
|
||||
struct device_node *ep0 = of_graph_get_next_port_endpoint(port0, NULL);
|
||||
struct device_node *ep1 = of_graph_get_next_port_endpoint(port1, NULL);
|
||||
struct device_node *codec0 = of_graph_get_remote_port(ep0);
|
||||
struct device_node *codec1 = of_graph_get_remote_port(ep1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user