]> Git Repo - linux.git/commitdiff
ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode
authorMatthias Blankertz <[email protected]>
Wed, 15 Apr 2020 14:10:16 +0000 (16:10 +0200)
committerMark Brown <[email protected]>
Thu, 16 Apr 2020 11:44:58 +0000 (12:44 +0100)
The parent SSI of a multi-SSI setup must be fully setup, started and
stopped since it is also part of the playback/capture setup. So only
skip the SSI (as per commit 203cdf51f288 ("ASoC: rsnd: SSI parent cares
SWSP bit") and commit 597b046f0d99 ("ASoC: rsnd: control SSICR::EN
correctly")) if the SSI is parent outside of a multi-SSI setup.

Signed-off-by: Matthias Blankertz <[email protected]>
Acked-by: Kuninori Morimoto <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
sound/soc/sh/rcar/ssi.c

index fc5d089868dfc084cfa4e3234259a57402cd8d5e..d51fb3a394486cc76f87c4aa01e0aaf852d796a0 100644 (file)
@@ -407,7 +407,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
         * We shouldn't exchange SWSP after running.
         * This means, parent needs to care it.
         */
-       if (rsnd_ssi_is_parent(mod, io))
+       if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
                goto init_end;
 
        if (rsnd_io_is_play(io))
@@ -559,7 +559,7 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
         * EN is for data output.
         * SSI parent EN is not needed.
         */
-       if (rsnd_ssi_is_parent(mod, io))
+       if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
                return 0;
 
        ssi->cr_en = EN;
@@ -582,7 +582,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
        if (!rsnd_ssi_is_run_mods(mod, io))
                return 0;
 
-       if (rsnd_ssi_is_parent(mod, io))
+       if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
                return 0;
 
        cr  =   ssi->cr_own     |
@@ -620,7 +620,7 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
        if (rsnd_is_gen1(priv))
                return 0;
 
-       if (rsnd_ssi_is_parent(mod, io))
+       if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
                return 0;
 
        if (!rsnd_ssi_is_run_mods(mod, io))
This page took 0.068297 seconds and 4 git commands to generate.