Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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.

+23 -35
+23 -35
sound/soc/generic/simple-card-utils.c
··· 1005 1005 1006 1006 int graph_util_is_ports0(struct device_node *np) 1007 1007 { 1008 - struct device_node *port, *ports, *ports0, *top; 1009 - int ret; 1008 + struct device_node *parent __free(device_node) = of_get_parent(np); 1009 + struct device_node *port; 1010 1010 1011 1011 /* np is "endpoint" or "port" */ 1012 - if (of_node_name_eq(np, "endpoint")) { 1013 - port = of_get_parent(np); 1014 - } else { 1012 + if (of_node_name_eq(np, "endpoint")) 1013 + port = parent; 1014 + else 1015 1015 port = np; 1016 - of_node_get(port); 1017 - } 1018 1016 1019 - ports = of_get_parent(port); 1020 - top = of_get_parent(ports); 1021 - ports0 = of_get_child_by_name(top, "ports"); 1017 + struct device_node *ports __free(device_node) = of_get_parent(port); 1018 + struct device_node *top __free(device_node) = of_get_parent(ports); 1019 + struct device_node *ports0 __free(device_node) = of_get_child_by_name(top, "ports"); 1022 1020 1023 - ret = ports0 == ports; 1024 - 1025 - of_node_put(port); 1026 - of_node_put(ports); 1027 - of_node_put(ports0); 1028 - of_node_put(top); 1029 - 1030 - return ret; 1021 + return ports0 == ports; 1031 1022 } 1032 1023 EXPORT_SYMBOL_GPL(graph_util_is_ports0); 1033 1024 1034 1025 static int graph_get_dai_id(struct device_node *ep) 1035 1026 { 1036 - struct device_node *node; 1037 - struct device_node *endpoint; 1027 + struct device_node *node __free(device_node) = of_graph_get_port_parent(ep); 1028 + struct device_node *port __free(device_node) = of_get_parent(ep); 1038 1029 struct of_endpoint info; 1039 1030 int i, id; 1040 1031 int ret; ··· 1044 1053 * only of_graph_parse_endpoint(). 1045 1054 * We need to check "reg" property 1046 1055 */ 1047 - if (of_property_present(ep, "reg")) 1048 - return info.id; 1049 1056 1050 - node = of_get_parent(ep); 1051 - ret = of_property_present(node, "reg"); 1052 - of_node_put(node); 1057 + /* check port first */ 1058 + ret = of_property_present(port, "reg"); 1053 1059 if (ret) 1054 1060 return info.port; 1061 + 1062 + /* check endpoint 2nd as backup */ 1063 + if (of_property_present(ep, "reg")) 1064 + return info.id; 1055 1065 } 1056 - node = of_graph_get_port_parent(ep); 1057 1066 1058 1067 /* 1059 1068 * Non HDMI sound case, counting port/endpoint on its DT ··· 1061 1070 */ 1062 1071 i = 0; 1063 1072 id = -1; 1064 - for_each_endpoint_of_node(node, endpoint) { 1065 - if (endpoint == ep) 1073 + for_each_of_graph_port(node, p) { 1074 + if (port == p) { 1066 1075 id = i; 1076 + break; 1077 + } 1067 1078 i++; 1068 1079 } 1069 - 1070 - of_node_put(node); 1071 1080 1072 1081 if (id < 0) 1073 1082 return -ENODEV; ··· 1078 1087 int graph_util_parse_dai(struct device *dev, struct device_node *ep, 1079 1088 struct snd_soc_dai_link_component *dlc, int *is_single_link) 1080 1089 { 1081 - struct device_node *node; 1082 1090 struct of_phandle_args args = {}; 1083 1091 struct snd_soc_dai *dai; 1084 1092 int ret; ··· 1085 1095 if (!ep) 1086 1096 return 0; 1087 1097 1088 - node = of_graph_get_port_parent(ep); 1098 + struct device_node *node __free(device_node) = of_graph_get_port_parent(ep); 1089 1099 1090 1100 /* 1091 1101 * Try to find from DAI node ··· 1126 1136 * if he unbinded CPU or Codec. 1127 1137 */ 1128 1138 ret = snd_soc_get_dlc(&args, dlc); 1129 - if (ret < 0) { 1130 - of_node_put(node); 1139 + if (ret < 0) 1131 1140 return ret; 1132 - } 1133 1141 1134 1142 parse_dai_end: 1135 1143 if (is_single_link)