ASoC: add snd_soc_card_mutex_lock/unlock()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 6 Apr 2023 00:16:27 +0000 (00:16 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 17 Apr 2023 11:57:26 +0000 (12:57 +0100)
ASoC need to use card->mutex with _INIT or _RUNTIME,
but there is no helper function for it.

This patch adds its helper function and use it.

Because people might misunderstand that _init() is mutex initialization,
this patch renames _INIT to _ROOT and adds new
snd_soc_card_mutex_lock_root() for it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87a5zlx3tw.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-card.h
sound/soc/soc-compress.c
sound/soc/soc-core.c

index 9d31a5c..fc94dfb 100644 (file)
@@ -9,10 +9,25 @@
 #define __SOC_CARD_H
 
 enum snd_soc_card_subclass {
-       SND_SOC_CARD_CLASS_INIT         = 0,
+       SND_SOC_CARD_CLASS_ROOT         = 0,
        SND_SOC_CARD_CLASS_RUNTIME      = 1,
 };
 
+static inline void snd_soc_card_mutex_lock_root(struct snd_soc_card *card)
+{
+       mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_ROOT);
+}
+
+static inline void snd_soc_card_mutex_lock(struct snd_soc_card *card)
+{
+       mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+}
+
+static inline void snd_soc_card_mutex_unlock(struct snd_soc_card *card)
+{
+       mutex_unlock(&card->mutex);
+}
+
 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
                                               const char *name);
 int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
index 661e9d7..d8715db 100644 (file)
@@ -140,7 +140,7 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
        int stream = cstream->direction; /* SND_COMPRESS_xxx is same as SNDRV_PCM_STREAM_xxx */
        int ret;
 
-       mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+       snd_soc_card_mutex_lock(fe->card);
 
        ret = dpcm_path_get(fe, stream, &list);
        if (ret < 0)
@@ -184,7 +184,7 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
        snd_soc_runtime_activate(fe, stream);
        snd_soc_dpcm_mutex_unlock(fe);
 
-       mutex_unlock(&fe->card->mutex);
+       snd_soc_card_mutex_unlock(fe->card);
 
        return 0;
 
@@ -196,7 +196,7 @@ out:
        dpcm_path_put(&list);
 be_err:
        fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
-       mutex_unlock(&fe->card->mutex);
+       snd_soc_card_mutex_unlock(fe->card);
        return ret;
 }
 
@@ -207,7 +207,7 @@ static int soc_compr_free_fe(struct snd_compr_stream *cstream)
        struct snd_soc_dpcm *dpcm;
        int stream = cstream->direction; /* SND_COMPRESS_xxx is same as SNDRV_PCM_STREAM_xxx */
 
-       mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+       snd_soc_card_mutex_lock(fe->card);
 
        snd_soc_dpcm_mutex_lock(fe);
        snd_soc_runtime_deactivate(fe, stream);
@@ -237,7 +237,7 @@ static int soc_compr_free_fe(struct snd_compr_stream *cstream)
 
        snd_soc_dai_compr_shutdown(cpu_dai, cstream, 0);
 
-       mutex_unlock(&fe->card->mutex);
+       snd_soc_card_mutex_unlock(fe->card);
        return 0;
 }
 
@@ -284,7 +284,7 @@ static int soc_compr_trigger_fe(struct snd_compr_stream *cstream, int cmd)
            cmd == SND_COMPR_TRIGGER_DRAIN)
                return snd_soc_component_compr_trigger(cstream, cmd);
 
-       mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+       snd_soc_card_mutex_lock(fe->card);
 
        ret = snd_soc_dai_compr_trigger(cpu_dai, cstream, cmd);
        if (ret < 0)
@@ -315,7 +315,7 @@ static int soc_compr_trigger_fe(struct snd_compr_stream *cstream, int cmd)
 
 out:
        fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
-       mutex_unlock(&fe->card->mutex);
+       snd_soc_card_mutex_unlock(fe->card);
        return ret;
 }
 
@@ -373,7 +373,7 @@ static int soc_compr_set_params_fe(struct snd_compr_stream *cstream,
        int stream = cstream->direction; /* SND_COMPRESS_xxx is same as SNDRV_PCM_STREAM_xxx */
        int ret;
 
-       mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+       snd_soc_card_mutex_lock(fe->card);
 
        /*
         * Create an empty hw_params for the BE as the machine driver must
@@ -411,7 +411,7 @@ static int soc_compr_set_params_fe(struct snd_compr_stream *cstream,
 
 out:
        fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
-       mutex_unlock(&fe->card->mutex);
+       snd_soc_card_mutex_unlock(fe->card);
        return ret;
 }
 
index 4594505..b48efc3 100644 (file)
@@ -1938,7 +1938,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
        int ret;
 
        mutex_lock(&client_mutex);
-       mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
+       snd_soc_card_mutex_lock_root(card);
 
        snd_soc_dapm_init(&card->dapm, card, NULL);
 
@@ -2093,7 +2093,7 @@ probe_end:
        if (ret < 0)
                soc_cleanup_card_resources(card);
 
-       mutex_unlock(&card->mutex);
+       snd_soc_card_mutex_unlock(card);
        mutex_unlock(&client_mutex);
 
        return ret;