ALSA: x86: Use snd_pcm_stop_xrun() for connection / disconnection paths
authorTakashi Iwai <tiwai@suse.de>
Wed, 15 Feb 2017 20:36:38 +0000 (21:36 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 16 Feb 2017 08:22:42 +0000 (09:22 +0100)
This seems more friendly to user-space, as it's notified at least as
an error, instead of forcibly moving the PCM state to SETUP out of
sudden.

Moreover, snd_pcm_stop() needs an extra PCM spinlock I forgot, while
snd_pcm_stop_xrun() takes the spinlock by itself.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/x86/intel_hdmi_audio.c

index a30ca03e49aec133f50ae2ee773673abed5bf7bd..a7343f2d27303dff695bcd40aff017cf3af78f3f 100644 (file)
@@ -1378,7 +1378,7 @@ static void had_process_hot_plug(struct snd_intelhad *intelhaddata)
                dev_dbg(intelhaddata->dev,
                        "Force to stop the active stream by disconnection\n");
                /* Set runtime->state to hw_params done */
-               snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
+               snd_pcm_stop_xrun(substream);
                had_substream_put(intelhaddata);
        }
 
@@ -1414,7 +1414,7 @@ static void had_process_hot_unplug(struct snd_intelhad *intelhaddata)
 
        /* Report to above ALSA layer */
        if (substream)
-               snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
+               snd_pcm_stop_xrun(substream);
 
  out:
        snd_jack_report(intelhaddata->jack, 0);