diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-02-15 22:08:21 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-02-16 09:22:44 +0100 |
commit | 2d42c033aec9f8e7e175c551ae62ea3f4dc200b9 (patch) | |
tree | 1eebd5ec887e0824cc5d4ed6e94ec1b8f6b72db1 /sound/x86 | |
parent | ALSA: x86: Stop the stream when buffer is processed after disconnection (diff) | |
download | linux-2d42c033aec9f8e7e175c551ae62ea3f4dc200b9.tar.xz linux-2d42c033aec9f8e7e175c551ae62ea3f4dc200b9.zip |
ALSA: x86: Minor code rearrangement
Put the stuff in the right order; notification should be at the end of
the action.
Also dropped a superfluous debug print and incorrect comments.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/x86')
-rw-r--r-- | sound/x86/intel_hdmi_audio.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c index 8d67031e8429..dd3baabd1e82 100644 --- a/sound/x86/intel_hdmi_audio.c +++ b/sound/x86/intel_hdmi_audio.c @@ -1384,18 +1384,15 @@ static void had_process_hot_plug(struct snd_intelhad *intelhaddata) __func__, __LINE__); spin_unlock_irq(&intelhaddata->had_spinlock); - /* Safety check */ + had_build_channel_allocation_map(intelhaddata); + + /* Report to above ALSA layer */ substream = had_substream_get(intelhaddata); if (substream) { - dev_dbg(intelhaddata->dev, - "Force to stop the active stream by disconnection\n"); - /* Set runtime->state to hw_params done */ snd_pcm_stop_xrun(substream); had_substream_put(intelhaddata); } - had_build_channel_allocation_map(intelhaddata); - snd_jack_report(intelhaddata->jack, SND_JACK_AVOUT); } @@ -1404,14 +1401,11 @@ static void had_process_hot_unplug(struct snd_intelhad *intelhaddata) { struct snd_pcm_substream *substream; - substream = had_substream_get(intelhaddata); - spin_lock_irq(&intelhaddata->had_spinlock); - if (!intelhaddata->connected) { dev_dbg(intelhaddata->dev, "Device already disconnected\n"); spin_unlock_irq(&intelhaddata->had_spinlock); - goto out; + return; } @@ -1424,16 +1418,17 @@ static void had_process_hot_unplug(struct snd_intelhad *intelhaddata) __func__, __LINE__); spin_unlock_irq(&intelhaddata->had_spinlock); + kfree(intelhaddata->chmap->chmap); + intelhaddata->chmap->chmap = NULL; + /* Report to above ALSA layer */ - if (substream) + substream = had_substream_get(intelhaddata); + if (substream) { snd_pcm_stop_xrun(substream); + had_substream_put(intelhaddata); + } - out: snd_jack_report(intelhaddata->jack, 0); - if (substream) - had_substream_put(intelhaddata); - kfree(intelhaddata->chmap->chmap); - intelhaddata->chmap->chmap = NULL; } /* |