Commit b1ef30e5 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: x86: Don't bail out from PCM ops when disconnected

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: default avatarTakashi Iwai <tiwai@suse.de>
parent 2d42c033
...@@ -1054,13 +1054,6 @@ static int had_pcm_open(struct snd_pcm_substream *substream) ...@@ -1054,13 +1054,6 @@ static int had_pcm_open(struct snd_pcm_substream *substream)
pm_runtime_get_sync(intelhaddata->dev); 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 */ /* set the runtime hw parameter with local snd_pcm_hardware struct */
runtime->hw = had_pcm_hardware; runtime->hw = had_pcm_hardware;
...@@ -1186,14 +1179,6 @@ static int had_pcm_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -1186,14 +1179,6 @@ static int had_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
case SNDRV_PCM_TRIGGER_RESUME: 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 */ /* Enable Audio */
had_ack_irqs(intelhaddata); /* FIXME: do we need this? */ had_ack_irqs(intelhaddata); /* FIXME: do we need this? */
had_enable_audio(intelhaddata, true); had_enable_audio(intelhaddata, true);
...@@ -1227,13 +1212,6 @@ static int had_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -1227,13 +1212,6 @@ static int had_pcm_prepare(struct snd_pcm_substream *substream)
intelhaddata = snd_pcm_substream_chip(substream); intelhaddata = snd_pcm_substream_chip(substream);
runtime = substream->runtime; 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", dev_dbg(intelhaddata->dev, "period_size=%d\n",
(int)frames_to_bytes(runtime, runtime->period_size)); (int)frames_to_bytes(runtime, runtime->period_size));
dev_dbg(intelhaddata->dev, "periods=%d\n", runtime->periods); dev_dbg(intelhaddata->dev, "periods=%d\n", runtime->periods);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment