lkml.org 
[lkml]   [2019]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.0 255/262] ASoC: simple-card-utils: check "reg" property on asoc_simple_card_get_dai_id()
    Date
    From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

    [ Upstream commit a0c426fe143328760c9fd565cd203a37a7b4fde8 ]

    We will get DAI ID from "reg" property if it has on DT, otherwise get
    it by counting port/endpoint.

    But in below case, we need to get DAI ID = 0 via port reg = <0>, but
    current implementation returns ID = 1, because it can't judge ID = 0 was
    from "non reg" or "reg = <0>".
    Thus, it will count port/endpoint number as "non reg" case.

    of_graph_parse_endpoint() implementation itself is not a problem,
    but because asoc_simple_card_get_dai_id() need to count port/endpoint
    number when "non reg" case, it need to know ID = 0 was from
    "non reg" or "reg = <0>".
    This patch fix this issue.

    port {
    reg = <0>;
    xxxx: endpoint@0 {
    };
    => xxxx: endpoint@1 {
    };
    };

    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/generic/simple-card-utils.c | 14 +++++++++++---
    1 file changed, 11 insertions(+), 3 deletions(-)

    diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
    index b807a47515eb..336895f7fd1e 100644
    --- a/sound/soc/generic/simple-card-utils.c
    +++ b/sound/soc/generic/simple-card-utils.c
    @@ -283,12 +283,20 @@ static int asoc_simple_card_get_dai_id(struct device_node *ep)
    /* use endpoint/port reg if exist */
    ret = of_graph_parse_endpoint(ep, &info);
    if (ret == 0) {
    - if (info.id)
    + /*
    + * Because it will count port/endpoint if it doesn't have "reg".
    + * But, we can't judge whether it has "no reg", or "reg = <0>"
    + * only of_graph_parse_endpoint().
    + * We need to check "reg" property
    + */
    + if (of_get_property(ep, "reg", NULL))
    return info.id;
    - if (info.port)
    +
    + node = of_get_parent(ep);
    + of_node_put(node);
    + if (of_get_property(node, "reg", NULL))
    return info.port;
    }
    -
    node = of_graph_get_port_parent(ep);

    /*
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-03-27 20:14    [W:4.028 / U:0.504 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site