ASoC: ak4613: Improve counting DAI number
authorRyo Kodama <ryo.kodama.vz@renesas.com>
Wed, 7 Jun 2017 05:39:00 +0000 (14:39 +0900)
committerMark Brown <broonie@kernel.org>
Wed, 7 Jun 2017 19:24:00 +0000 (20:24 +0100)
Add the startup function to count DAI instead of hw_params.
This change matches the number of opened DAIs.
If this change isn't applied, you may get unexpected error due to
mismatching of count. Since the excution number of hw_params and
shutdown may be different, the mismatching happens.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Ryo Kodama <ryo.kodama.vz@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/ak4613.c

index 557ac16d43e2881377c82b0bbe0a48b308c96737..e3121ca3d1a2cf768eb561004d8ec779c34e9d0e 100644 (file)
@@ -252,6 +252,17 @@ static void ak4613_dai_shutdown(struct snd_pcm_substream *substream,
        mutex_unlock(&priv->lock);
 }
 
+static int ak4613_dai_startup(struct snd_pcm_substream *substream,
+                             struct snd_soc_dai *dai)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       struct ak4613_priv *priv = snd_soc_codec_get_drvdata(codec);
+
+       priv->cnt++;
+
+       return 0;
+}
+
 static int ak4613_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 {
        struct snd_soc_codec *codec = dai->codec;
@@ -349,7 +360,6 @@ static int ak4613_dai_hw_params(struct snd_pcm_substream *substream,
        if ((priv->iface == NULL) ||
            (priv->iface == iface)) {
                priv->iface = iface;
-               priv->cnt++;
                ret = 0;
        }
        mutex_unlock(&priv->lock);
@@ -398,6 +408,7 @@ static int ak4613_set_bias_level(struct snd_soc_codec *codec,
 }
 
 static const struct snd_soc_dai_ops ak4613_dai_ops = {
+       .startup        = ak4613_dai_startup,
        .shutdown       = ak4613_dai_shutdown,
        .set_fmt        = ak4613_dai_set_fmt,
        .hw_params      = ak4613_dai_hw_params,