| From 8ce55797aec19d48fa9e54b57b09a32bd5e22095 Mon Sep 17 00:00:00 2001 |
| From: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> |
| Date: Wed, 1 Mar 2017 03:51:00 +0000 |
| Subject: [PATCH 117/255] ASoC: rsnd: fix sound route path when using SRC6/SRC9 |
| |
| This patch fixes the problem that the missing value of the route path |
| setting table and incorrect values are set in the CMD_ROUTE_SELECT |
| register. |
| |
| Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> |
| [Kuninori: shared data on MIX and non-MIX case] |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| |
| (cherry picked from commit a1c2ff53726907aff5feb37e4cfd45c1ff626431) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/cmd.c | 36 ++++++++++++++++++++---------------- |
| 1 file changed, 20 insertions(+), 16 deletions(-) |
| |
| --- a/sound/soc/sh/rcar/cmd.c |
| +++ b/sound/soc/sh/rcar/cmd.c |
| @@ -31,23 +31,24 @@ static int rsnd_cmd_init(struct rsnd_mod |
| struct rsnd_mod *mix = rsnd_io_to_mod_mix(io); |
| struct device *dev = rsnd_priv_to_dev(priv); |
| u32 data; |
| + u32 path[] = { |
| + [1] = 1 << 0, |
| + [5] = 1 << 8, |
| + [6] = 1 << 12, |
| + [9] = 1 << 15, |
| + }; |
| |
| if (!mix && !dvc) |
| return 0; |
| |
| + if (ARRAY_SIZE(path) < rsnd_mod_id(mod) + 1) |
| + return -ENXIO; |
| + |
| if (mix) { |
| struct rsnd_dai *rdai; |
| struct rsnd_mod *src; |
| struct rsnd_dai_stream *tio; |
| int i; |
| - u32 path[] = { |
| - [0] = 0, |
| - [1] = 1 << 0, |
| - [2] = 0, |
| - [3] = 0, |
| - [4] = 0, |
| - [5] = 1 << 8 |
| - }; |
| |
| /* |
| * it is assuming that integrater is well understanding about |
| @@ -70,16 +71,19 @@ static int rsnd_cmd_init(struct rsnd_mod |
| } else { |
| struct rsnd_mod *src = rsnd_io_to_mod_src(io); |
| |
| - u32 path[] = { |
| - [0] = 0x30000, |
| - [1] = 0x30001, |
| - [2] = 0x40000, |
| - [3] = 0x10000, |
| - [4] = 0x20000, |
| - [5] = 0x40100 |
| + u8 cmd_case[] = { |
| + [0] = 0x3, |
| + [1] = 0x3, |
| + [2] = 0x4, |
| + [3] = 0x1, |
| + [4] = 0x2, |
| + [5] = 0x4, |
| + [6] = 0x1, |
| + [9] = 0x2, |
| }; |
| |
| - data = path[rsnd_mod_id(src)]; |
| + data = path[rsnd_mod_id(src)] | |
| + cmd_case[rsnd_mod_id(src)] << 16; |
| } |
| |
| dev_dbg(dev, "ctu/mix path = 0x%08x", data); |