[alsa-devel] [PATCH 8/8] ALSA: x86: Don't bail out from PCM ops when disconnected

Takashi Iwai tiwai at suse.de
Wed Feb 15 22:29:36 CET 2017


Currently the driver returns -ENODEV when the monitor is disconnected.
But PA alsa module doesn't like this and it starts playing Juliet,
kills itself as if it were a fatal tragedy.

Since we protect the whole read/write at disconnection, just allow the
PCM accesses even during disconnection.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 sound/x86/intel_hdmi_audio.c | 22 ----------------------
 1 file changed, 22 deletions(-)

diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c
index 8b6e1c728798..f8fa3197f6ef 100644
--- a/sound/x86/intel_hdmi_audio.c
+++ b/sound/x86/intel_hdmi_audio.c
@@ -1044,13 +1044,6 @@ static int had_pcm_open(struct snd_pcm_substream *substream)
 
 	pm_runtime_get_sync(intelhaddata->dev);
 
-	if (!intelhaddata->connected) {
-		dev_dbg(intelhaddata->dev, "%s: HDMI cable plugged-out\n",
-			__func__);
-		retval = -ENODEV;
-		goto error;
-	}
-
 	/* set the runtime hw parameter with local snd_pcm_hardware struct */
 	runtime->hw = had_pcm_hardware;
 
@@ -1176,14 +1169,6 @@ static int had_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
 	case SNDRV_PCM_TRIGGER_RESUME:
-		/* Disable local INTRs till register prgmng is done */
-		if (!intelhaddata->connected) {
-			dev_dbg(intelhaddata->dev,
-				"_START: HDMI cable plugged-out\n");
-			retval = -ENODEV;
-			break;
-		}
-
 		/* Enable Audio */
 		had_ack_irqs(intelhaddata); /* FIXME: do we need this? */
 		had_enable_audio(intelhaddata, true);
@@ -1217,13 +1202,6 @@ static int had_pcm_prepare(struct snd_pcm_substream *substream)
 	intelhaddata = snd_pcm_substream_chip(substream);
 	runtime = substream->runtime;
 
-	if (!intelhaddata->connected) {
-		dev_dbg(intelhaddata->dev, "%s: HDMI cable plugged-out\n",
-			__func__);
-		retval = -ENODEV;
-		goto prep_end;
-	}
-
 	dev_dbg(intelhaddata->dev, "period_size=%d\n",
 		(int)frames_to_bytes(runtime, runtime->period_size));
 	dev_dbg(intelhaddata->dev, "periods=%d\n", runtime->periods);
-- 
2.11.1



More information about the Alsa-devel mailing list