commit
c0ea089dbad4 ("ASoC: rsnd: rsnd_mod_name() handles both name and
ID") merged "name" and "ID" on rsnd_mod_name() to handle sub-ID
(= for CTU/BUSIF).
Then, it decided to share static char to avoid pointless memory.
But, it doesn't work correctry in below case, because last called
name will be used.
dev_xxx(dev, "%s is connected to %s\n",
rsnd_mod_name(mod_a), /* ssiu[00] */
rsnd_mod_name(mod_b)); /* ssi[0] */
->
rcar_sound
ec500000.sound: ssi[0] is connected to ssi[0]
~~~~~~ ~~~~~~
We still don't want to have pointless memory, so let's use ring buffer.
16byte x 5 is very enough for this purpose.
dev_xxx(dev, "%s is connected to %s\n",
rsnd_mod_name(mod_a), /* ssiu[00] */
rsnd_mod_name(mod_b)); /* ssi[0] */
->
rcar_sound
ec500000.sound: ssiu[00] is connected to ssi[0]
~~~~~~~~ ~~~~~~
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
return mod->ops->dma_req(io, mod);
}
+#define MOD_NAME_NUM 5
#define MOD_NAME_SIZE 16
char *rsnd_mod_name(struct rsnd_mod *mod)
{
- static char name[MOD_NAME_SIZE];
+ static char names[MOD_NAME_NUM][MOD_NAME_SIZE];
+ static int num;
+ char *name = names[num];
+
+ num++;
+ if (num >= MOD_NAME_NUM)
+ num = 0;
/*
* Let's use same char to avoid pointlessness memory