ASoC: rsnd: fixup rsnd_dai_call() behavior for unimplemented method
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 22 Oct 2015 03:14:21 +0000 (03:14 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 22 Oct 2015 12:30:01 +0000 (13:30 +0100)
Current rsnd_dai_call didn't count callback-count if callback
wasn't implemented. Thus, it counts can be unbalance.
ex) .start : implemented
    .stop  : not implemented
This patch solve this issue

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/core.c

index c0182ac254c93022e8fcf0d0d683c7c004f9df72..5c6714481f59fc2df1dec2b5289e01c8b0dccb30 100644 (file)
@@ -300,7 +300,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
 /*
  *     rsnd_dai functions
  */
-#define __rsnd_mod_call(mod, io, func, param...)               \
+#define rsnd_mod_call(mod, io, func, param...)                 \
 ({                                                             \
        struct rsnd_priv *priv = rsnd_mod_to_priv(mod);         \
        struct device *dev = rsnd_priv_to_dev(priv);            \
@@ -308,7 +308,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
        u8 val  = (mod->status >> __rsnd_mod_shift_##func) & 0xF;       \
        u8 add  = ((val + __rsnd_mod_add_##func) & 0xF);                \
        int ret = 0;                                                    \
-       int call = (val == __rsnd_mod_call_##func);                     \
+       int call = (val == __rsnd_mod_call_##func) && (mod)->ops->func; \
        mod->status = (mod->status & ~mask) +                           \
                (add << __rsnd_mod_shift_##func);                       \
        dev_dbg(dev, "%s[%d]\t0x%08x %s\n",                             \
@@ -319,11 +319,6 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
        ret;                                                            \
 })
 
-#define rsnd_mod_call(mod, io, func, param...) \
-       (!(mod) ? -ENODEV :                     \
-        !((mod)->ops->func) ? 0 :              \
-        __rsnd_mod_call(mod, io, func, param))
-
 #define rsnd_dai_call(fn, io, param...)                                \
 ({                                                             \
        struct rsnd_mod *mod;                                   \