diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2016-01-21 04:56:18 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-01-22 20:12:25 +0300 |
commit | 6c001f3ab4ce20f01a1b3064b2bd1a9352c5d6b1 (patch) | |
tree | 8683e59c495162607cd7701ea82f74c4fa4da5b7 | |
parent | 4e880b2674a6d36d6c7b9741d88973e00a76922b (diff) | |
download | linux-6c001f3ab4ce20f01a1b3064b2bd1a9352c5d6b1.tar.xz |
ASoC: rsnd: don't update status if rsnd_mod_call() doesn't match
If system uses CTU/MUX, and if probe error happened, it will try to
call rsnd_dai_call(remove, ...). Then, MUX/DVC/SSIU/SSI might be called
without calling rsnd_dai_call(probe, ...). Then, each mod status might
be un-matched. It doesn't call un-matched remove function by this patch.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/sh/rcar/core.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index 691e22381280..3eb7e9a7b5dc 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c @@ -330,8 +330,11 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) u8 add = ((val + __rsnd_mod_add_##func) & 0xF); \ int ret = 0; \ int call = (val == __rsnd_mod_call_##func) && (mod)->ops->func; \ - *status = (*status & ~mask) + \ - (add << __rsnd_mod_shift_##func); \ + if (add == 0xF) \ + call = 0; \ + else \ + *status = (*status & ~mask) + \ + (add << __rsnd_mod_shift_##func); \ dev_dbg(dev, "%s[%d]\t0x%08x %s\n", \ rsnd_mod_name(mod), rsnd_mod_id(mod), \ *status, call ? #func : ""); \ |