| From dcb5af252ffd7b1284841db11e56a4dedd96a346 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 17 Apr 2020 17:30:17 +0200 |
| Subject: ASoC: rsnd: Fix "status check failed" spam for multi-SSI |
| |
| From: Matthias Blankertz <matthias.blankertz@cetitec.com> |
| |
| [ Upstream commit 54cb6221688660670a2e430892d7f4e6370263b8 ] |
| |
| Fix the rsnd_ssi_stop function to skip disabling the individual SSIs of |
| a multi-SSI setup, as the actual stop is performed by rsnd_ssiu_stop_gen2 |
| - the same logic as in rsnd_ssi_start. The attempt to disable these SSIs |
| was harmless, but caused a "status check failed" message to be printed |
| for every SSI in the multi-SSI setup. |
| The disabling of interrupts is still performed, as they are enabled for |
| all SSIs in rsnd_ssi_init, but care is taken to not accidentally set the |
| EN bit for an SSI where it was not set by rsnd_ssi_start. |
| |
| Signed-off-by: Matthias Blankertz <matthias.blankertz@cetitec.com> |
| Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Link: https://lore.kernel.org/r/20200417153017.1744454-3-matthias.blankertz@cetitec.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/sh/rcar/ssi.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c |
| index d5f663bb965f1..a6cf2ac223e42 100644 |
| --- a/sound/soc/sh/rcar/ssi.c |
| +++ b/sound/soc/sh/rcar/ssi.c |
| @@ -566,10 +566,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod, |
| * Capture: It might not receave data. Do nothing |
| */ |
| if (rsnd_io_is_play(io)) { |
| - rsnd_mod_write(mod, SSICR, cr | EN); |
| + rsnd_mod_write(mod, SSICR, cr | ssi->cr_en); |
| rsnd_ssi_status_check(mod, DIRQ); |
| } |
| |
| + /* In multi-SSI mode, stop is performed by setting ssi0129 in |
| + * SSI_CONTROL to 0 (in rsnd_ssio_stop_gen2). Do nothing here. |
| + */ |
| + if (rsnd_ssi_multi_slaves_runtime(io)) |
| + return 0; |
| + |
| /* |
| * disable SSI, |
| * and, wait idle state |
| -- |
| 2.20.1 |
| |