From: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
Same DVC might be used few times if system/platform is using MIX. For example below case.
DAI0 playback = <&src0 &ctu02 &mix0 &dvc0 &ssi0>; DAI1 playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
This case, ALSA will have DVC,0 and DVC,1 kcontrol interfaces, but these are same DVC. This is confusable. This patch adds new flags and avoid such case.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Tested-by: Hiroyuki Yokoyama hiroyuki.yokoyama.vx@renesas.com --- v1 -> v2
- no change
sound/soc/sh/rcar/dvc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c index 1743ade..b4c4ff2 100644 --- a/sound/soc/sh/rcar/dvc.c +++ b/sound/soc/sh/rcar/dvc.c @@ -44,8 +44,11 @@ struct rsnd_dvc { struct rsnd_kctrl_cfg_s ren; /* Ramp Enable */ struct rsnd_kctrl_cfg_s rup; /* Ramp Rate Up */ struct rsnd_kctrl_cfg_s rdown; /* Ramp Rate Down */ + u32 flags; };
+#define KCTRL_INITIALIZEED (1 << 0) + #define rsnd_dvc_get(priv, id) ((struct rsnd_dvc *)(priv->dvc) + id) #define rsnd_dvc_nr(priv) ((priv)->dvc_nr)
@@ -254,6 +257,9 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, int channels = rsnd_rdai_channels_get(rdai); int ret;
+ if (rsnd_flags_has(dvc, KCTRL_INITIALIZEED)) + return 0; + /* Volume */ ret = rsnd_kctrl_new_m(mod, io, rtd, is_play ? @@ -307,6 +313,8 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, if (ret < 0) return ret;
+ rsnd_flags_set(dvc, KCTRL_INITIALIZEED); + return 0; }