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 --- sound/x86/intel_hdmi_audio.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c index 2ed0a34bc19e..8b6e1c728798 100644 --- a/sound/x86/intel_hdmi_audio.c +++ b/sound/x86/intel_hdmi_audio.c @@ -1374,18 +1374,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); }
@@ -1394,14 +1391,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;
}
@@ -1414,16 +1408,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; }
/*