ASoC: rsnd: Refactor port handling with helper for endpoint node selection

Refactor the code responsible for selecting the correct device node for
audio endpoint parsing in the rsnd driver. A new helper function
`rsnd_pick_endpoint_node_for_ports()` is introduced to handle the
selection of the endpoint node by checking whether the port is named
'port' or 'ports'.

This change simplifies the logic in both `rsnd_dai_of_node()` and
`rsnd_dai_probe()` functions by replacing repetitive condition checks
with the new helper.

Suggested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/20241011175346.1093649-1-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Lad Prabhakar 2024-10-11 18:53:46 +01:00 committed by Mark Brown
parent 43916d9288
commit daf5e3c681
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -1233,6 +1233,19 @@ int rsnd_node_count(struct rsnd_priv *priv, struct device_node *node, char *name
return i;
}
static struct device_node*
rsnd_pick_endpoint_node_for_ports(struct device_node *e_ports,
struct device_node *e_port)
{
if (of_node_name_eq(e_ports, "ports"))
return e_ports;
if (of_node_name_eq(e_ports, "port"))
return e_port;
return NULL;
}
static int rsnd_dai_of_node(struct rsnd_priv *priv, int *is_graph)
{
struct device *dev = rsnd_priv_to_dev(priv);
@ -1278,12 +1291,10 @@ audio_graph:
* Audio-Graph-Card
*/
for_each_child_of_node(np, ports) {
if (!of_node_name_eq(ports, "ports") &&
!of_node_name_eq(ports, "port"))
node = rsnd_pick_endpoint_node_for_ports(ports, np);
if (!node)
continue;
priv->component_dais[i] =
of_graph_get_endpoint_count(of_node_name_eq(ports, "ports") ?
ports : np);
priv->component_dais[i] = of_graph_get_endpoint_count(node);
nr += priv->component_dais[i];
i++;
if (i >= RSND_MAX_COMPONENT) {
@ -1488,15 +1499,16 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
*/
dai_i = 0;
if (is_graph) {
struct device_node *dai_np_port;
struct device_node *ports;
struct device_node *dai_np;
for_each_child_of_node(np, ports) {
if (!of_node_name_eq(ports, "ports") &&
!of_node_name_eq(ports, "port"))
dai_np_port = rsnd_pick_endpoint_node_for_ports(ports, np);
if (!dai_np_port)
continue;
for_each_endpoint_of_node(of_node_name_eq(ports, "ports") ?
ports : np, dai_np) {
for_each_endpoint_of_node(dai_np_port, dai_np) {
__rsnd_dai_probe(priv, dai_np, dai_np, 0, dai_i);
if (!rsnd_is_gen1(priv) && !rsnd_is_gen2(priv)) {
rdai = rsnd_rdai_get(priv, dai_i);