Commit 5451ea44 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: rsnd: count each mod (SSI/SRC/DVC)

Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths
if it supports MIXer. Then, we don't need to re-call each mod function
that had been called. This patch count each mod status.
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: default avatarKeita Kobayashi <keita.kobayashi.ym@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 04700027
...@@ -211,15 +211,20 @@ u32 rsnd_get_adinr(struct rsnd_mod *mod) ...@@ -211,15 +211,20 @@ u32 rsnd_get_adinr(struct rsnd_mod *mod)
({ \ ({ \
struct rsnd_priv *priv = rsnd_mod_to_priv(mod); \ struct rsnd_priv *priv = rsnd_mod_to_priv(mod); \
struct device *dev = rsnd_priv_to_dev(priv); \ struct device *dev = rsnd_priv_to_dev(priv); \
u32 mask = (1 << __rsnd_mod_shift_##func) & ~(1 << 31); \ u32 mask = 0xF << __rsnd_mod_shift_##func; \
u32 call = __rsnd_mod_call_##func << __rsnd_mod_shift_##func; \ u8 val = (mod->status >> __rsnd_mod_shift_##func) & 0xF; \
u8 add = ((val + __rsnd_mod_add_##func) & 0xF); \
int ret = 0; \ int ret = 0; \
if ((mod->status & mask) == call) { \ int called = 0; \
dev_dbg(dev, "%s[%d] %s\n", \ if (val == __rsnd_mod_call_##func) { \
rsnd_mod_name(mod), rsnd_mod_id(mod), #func); \ called = 1; \
ret = (mod)->ops->func(mod, param); \ ret = (mod)->ops->func(mod, param); \
mod->status = (mod->status & ~mask) | (~call & mask); \ mod->status = (mod->status & ~mask) + \
(add << __rsnd_mod_shift_##func); \
} \ } \
dev_dbg(dev, "%s[%d] 0x%08x %s\n", \
rsnd_mod_name(mod), rsnd_mod_id(mod), mod->status, \
called ? #func : ""); \
ret; \ ret; \
}) })
......
...@@ -259,25 +259,36 @@ struct rsnd_mod { ...@@ -259,25 +259,36 @@ struct rsnd_mod {
/* /*
* status * status
* *
* bit * 0xH0000CBA
* 0 0: probe 1: remove
* 1 0: init 1: quit
* 2 0: start 1: stop
* 3 0: pcm_new
* 4 0: fallback
* *
* 31 bit is always called (see __rsnd_mod_call) * A 0: probe 1: remove
* 31 0: hw_params * B 0: init 1: quit
* C 0: start 1: stop
*
* H is always called (see __rsnd_mod_call)
* H 0: pcm_new
* H 0: fallback
* H 0: hw_params
*/ */
#define __rsnd_mod_shift_probe 0 #define __rsnd_mod_shift_probe 0
#define __rsnd_mod_shift_remove 0 #define __rsnd_mod_shift_remove 0
#define __rsnd_mod_shift_init 1 #define __rsnd_mod_shift_init 4
#define __rsnd_mod_shift_quit 1 #define __rsnd_mod_shift_quit 4
#define __rsnd_mod_shift_start 2 #define __rsnd_mod_shift_start 8
#define __rsnd_mod_shift_stop 2 #define __rsnd_mod_shift_stop 8
#define __rsnd_mod_shift_pcm_new 3 #define __rsnd_mod_shift_pcm_new 28 /* always called */
#define __rsnd_mod_shift_fallback 4 #define __rsnd_mod_shift_fallback 28 /* always called */
#define __rsnd_mod_shift_hw_params 31 /* always called */ #define __rsnd_mod_shift_hw_params 28 /* always called */
#define __rsnd_mod_add_probe 1
#define __rsnd_mod_add_remove -1
#define __rsnd_mod_add_init 1
#define __rsnd_mod_add_quit -1
#define __rsnd_mod_add_start 1
#define __rsnd_mod_add_stop -1
#define __rsnd_mod_add_pcm_new 0
#define __rsnd_mod_add_fallback 0
#define __rsnd_mod_add_hw_params 0
#define __rsnd_mod_call_probe 0 #define __rsnd_mod_call_probe 0
#define __rsnd_mod_call_remove 1 #define __rsnd_mod_call_remove 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment