Unverified Commit c5607812 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: simple-card-utils: tidyup for Multi connection

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

These patches tidyup simple-card-utils for Multi connection of
Audio Graph Card, Because of DT node parsing, it should check port
1st instead of endpoint. Otherwise, it can't handle DAI correctly.
parents 527acf5d bd4a5c8d
Loading
Loading
Loading
Loading
+23 −35
Original line number Diff line number Diff line
@@ -1005,36 +1005,27 @@ EXPORT_SYMBOL_GPL(graph_util_card_probe);

int graph_util_is_ports0(struct device_node *np)
{
	struct device_node *port, *ports, *ports0, *top;
	int ret;
	struct device_node *parent __free(device_node) = of_get_parent(np);
	struct device_node *port;

	/* np is "endpoint" or "port" */
	if (of_node_name_eq(np, "endpoint")) {
		port = of_get_parent(np);
	} else {
	if (of_node_name_eq(np, "endpoint"))
		port = parent;
	else
		port = np;
		of_node_get(port);
	}

	ports	= of_get_parent(port);
	top	= of_get_parent(ports);
	ports0	= of_get_child_by_name(top, "ports");

	ret = ports0 == ports;

	of_node_put(port);
	of_node_put(ports);
	of_node_put(ports0);
	of_node_put(top);
	struct device_node *ports  __free(device_node) = of_get_parent(port);
	struct device_node *top    __free(device_node) = of_get_parent(ports);
	struct device_node *ports0 __free(device_node) = of_get_child_by_name(top, "ports");

	return ret;
	return ports0 == ports;
}
EXPORT_SYMBOL_GPL(graph_util_is_ports0);

static int graph_get_dai_id(struct device_node *ep)
{
	struct device_node *node;
	struct device_node *endpoint;
	struct device_node *node __free(device_node) = of_graph_get_port_parent(ep);
	struct device_node *port __free(device_node) = of_get_parent(ep);
	struct of_endpoint info;
	int i, id;
	int ret;
@@ -1053,16 +1044,16 @@ static int graph_get_dai_id(struct device_node *ep)
		 * only of_graph_parse_endpoint().
		 * We need to check "reg" property
		 */
		if (of_property_present(ep,   "reg"))
			return info.id;

		node = of_get_parent(ep);
		ret = of_property_present(node, "reg");
		of_node_put(node);
		/* check port first */
		ret = of_property_present(port, "reg");
		if (ret)
			return info.port;

		/* check endpoint 2nd as backup */
		if (of_property_present(ep,   "reg"))
			return info.id;
	}
	node = of_graph_get_port_parent(ep);

	/*
	 * Non HDMI sound case, counting port/endpoint on its DT
@@ -1070,14 +1061,14 @@ static int graph_get_dai_id(struct device_node *ep)
	 */
	i = 0;
	id = -1;
	for_each_endpoint_of_node(node, endpoint) {
		if (endpoint == ep)
	for_each_of_graph_port(node, p) {
		if (port == p) {
			id = i;
			break;
		}
		i++;
	}

	of_node_put(node);

	if (id < 0)
		return -ENODEV;

@@ -1087,7 +1078,6 @@ 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;
@@ -1095,7 +1085,7 @@ int graph_util_parse_dai(struct device *dev, struct device_node *ep,
	if (!ep)
		return 0;

	node = of_graph_get_port_parent(ep);
	struct device_node *node __free(device_node) = of_graph_get_port_parent(ep);

	/*
	 * Try to find from DAI node
@@ -1136,10 +1126,8 @@ 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) {
		of_node_put(node);
	if (ret < 0)
		return ret;
	}

parse_dai_end:
	if (is_single_link)