OSDN Git Service

ASoC: rsnd: attach SSIU when SSI was DMA mode
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 27 May 2021 02:40:47 +0000 (11:40 +0900)
committerMark Brown <broonie@kernel.org>
Thu, 27 May 2021 10:15:27 +0000 (11:15 +0100)
SSIU is not needed if SSI was PIO mode.
This patch ignores such case.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Message-Id: <874keonbkg.wl-kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/rsnd.h
sound/soc/sh/rcar/ssi.c
sound/soc/sh/rcar/ssiu.c

index 19e73a1..aec5455 100644 (file)
@@ -777,6 +777,7 @@ void rsnd_ssi_remove(struct rsnd_priv *priv);
 struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id);
 int rsnd_ssi_use_busif(struct rsnd_dai_stream *io);
 u32 rsnd_ssi_multi_secondaries_runtime(struct rsnd_dai_stream *io);
+int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod);
 
 #define rsnd_ssi_is_pin_sharing(io)    \
        __rsnd_ssi_is_pin_sharing(rsnd_io_to_mod_ssi(io))
index e29482c..bd47971 100644 (file)
@@ -117,8 +117,6 @@ struct rsnd_ssi {
        (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
 #define rsnd_ssi_can_output_clk(mod) (!__rsnd_ssi_is_pin_sharing(mod))
 
-static int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod);
-
 int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
 {
        struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
@@ -1147,7 +1145,7 @@ static struct rsnd_mod_ops rsnd_ssi_dma_ops = {
        .get_status     = rsnd_ssi_get_status,
 };
 
-static int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
+int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
 {
        return mod->ops == &rsnd_ssi_dma_ops;
 }
index 852cdee..6896ff0 100644 (file)
@@ -336,16 +336,20 @@ static void rsnd_parse_connect_ssiu_compatible(struct rsnd_priv *priv,
 {
        struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
        struct rsnd_ssiu *ssiu;
+       int is_dma_mode;
        int i;
 
        if (!ssi_mod)
                return;
 
+       is_dma_mode = rsnd_ssi_is_dma_mode(ssi_mod);
+
        /* select BUSIF0 */
        for_each_rsnd_ssiu(ssiu, priv, i) {
                struct rsnd_mod *mod = rsnd_mod_get(ssiu);
 
-               if ((rsnd_mod_id(ssi_mod) == rsnd_mod_id(mod)) &&
+               if (is_dma_mode &&
+                   (rsnd_mod_id(ssi_mod) == rsnd_mod_id(mod)) &&
                    (rsnd_mod_id_sub(mod) == 0)) {
                        rsnd_dai_connect(mod, io, mod->type);
                        return;