Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1bc2cba authored by Matthias Blankertz's avatar Matthias Blankertz Committed by Greg Kroah-Hartman
Browse files

ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode



[ Upstream commit a09fb3f28a60ba3e928a1fa94b0456780800299d ]

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 203cdf51 ("ASoC: rsnd: SSI parent cares
SWSP bit") and commit 597b046f ("ASoC: rsnd: control SSICR::EN
correctly")) if the SSI is parent outside of a multi-SSI setup.

Signed-off-by: default avatarMatthias Blankertz <matthias.blankertz@cetitec.com>
Acked-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/20200415141017.384017-2-matthias.blankertz@cetitec.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d1e32530
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -375,7 +375,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))
@@ -531,7 +531,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;
@@ -554,7 +554,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	|
@@ -592,7 +592,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))