]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
greybus: audio: Maintain proper codec state during shutdown sequence.
authorVaibhav Agarwal <vaibhav.agarwal@linaro.org>
Tue, 12 Jul 2016 09:56:00 +0000 (04:56 -0500)
committerAlex Elder <elder@linaro.org>
Wed, 13 Jul 2016 18:48:07 +0000 (13:48 -0500)
During shutdown sequence, in case all modules are already removed,
codec state is not updated. Though it's not causing any harm for now,
but it's good to maintain proper codec state. Fix this.

Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Reviewed-by: Mark Greer <mgreer@animalcreek.com>
Signed-off-by: Alex Elder <elder@linaro.org>
drivers/staging/greybus/audio_codec.c

index 5e05375bb71e2b5ae6bfb1b10b23e72f52f9bb89..9c7bec73787522b05e90faf7bccdfdde10783ae6 100644 (file)
@@ -460,6 +460,8 @@ static void gbcodec_shutdown(struct snd_pcm_substream *substream,
 
        if (list_empty(&codec->module_list)) {
                dev_err(codec->dev, "No codec module available\n");
+               codec->stream[substream->stream].state = GBAUDIO_CODEC_SHUTDOWN;
+               codec->stream[substream->stream].dai_name = NULL;
                mutex_unlock(&codec->lock);
                pm_relax(dai->dev);
                return;
@@ -733,8 +735,14 @@ static int gbcodec_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
        mutex_lock(&codec->lock);
        if (list_empty(&codec->module_list)) {
                dev_err(codec->dev, "No codec module available\n");
+               if (mute) {
+                       codec->stream[stream].state = GBAUDIO_CODEC_STOP;
+                       ret = 0;
+               } else {
+                       ret = -ENODEV;
+               }
                mutex_unlock(&codec->lock);
-               return -ENODEV;
+               return ret;
        }
 
        list_for_each_entry(module, &codec->module_list, list) {