| From a6761a011417c9864e94a4b5ff410ccb9abefa18 Mon Sep 17 00:00:00 2001 |
| From: Matthias Blankertz <matthias.blankertz@cetitec.com> |
| Date: Wed, 15 Apr 2020 16:10:17 +0200 |
| Subject: [PATCH] ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode |
| |
| commit b94e164759b82d0c1c80d4b1c8f12c9bee83f11d upstream. |
| |
| The HDMI?_SEL register maps up to four stereo SSI data lanes onto the |
| sdata[0..3] inputs of the HDMI output block. The upper half of the |
| register contains four blocks of 4 bits, with the most significant |
| controlling the sdata3 line and the least significant the sdata0 line. |
| |
| The shift calculation has an off-by-one error, causing the parent SSI to |
| be mapped to sdata3, the first multi-SSI child to sdata0 and so forth. |
| As the parent SSI transmits the stereo L/R channels, and the HDMI core |
| expects it on the sdata0 line, this causes no audio to be output when |
| playing stereo audio on a multichannel capable HDMI out, and |
| multichannel audio has permutated channels. |
| |
| Fix the shift calculation to map the parent SSI to sdata0, the first |
| child to sdata1 etc. |
| |
| Signed-off-by: Matthias Blankertz <matthias.blankertz@cetitec.com> |
| Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Link: https://lore.kernel.org/r/20200415141017.384017-3-matthias.blankertz@cetitec.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c |
| index 2347f3404c06..e0ac791338a6 100644 |
| --- a/sound/soc/sh/rcar/ssiu.c |
| +++ b/sound/soc/sh/rcar/ssiu.c |
| @@ -225,7 +225,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod, |
| i; |
| |
| for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) { |
| - shift = (i * 4) + 16; |
| + shift = (i * 4) + 20; |
| val = (val & ~(0xF << shift)) | |
| rsnd_mod_id(pos) << shift; |
| } |
| -- |
| 2.7.4 |
| |