[ALSA] hda-codec - Allow opening SPDIF while analog dup mode
authorTakashi Iwai <tiwai@suse.de>
Mon, 16 Apr 2007 09:23:56 +0000 (11:23 +0200)
committerJaroslav Kysela <perex@suse.cz>
Fri, 11 May 2007 14:55:59 +0000 (16:55 +0200)
Allow opening the dedicated SPDIF stream while running on analog dup
mode.  Then the SPDIF stream is once reset and assigned for the new
stream.  It's useful for exclusive SPDIF output like AC3/DTS.
(In the former version, you had to close once the analog stream to
 play the exclusive digital stream.)

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/hda/hda_codec.c

index 59dcd97bf83390e7ff683727dd45cdd6c4d45233..1fa93bd25a7b667ed2bf7c97af6531fb2b126229 100644 (file)
@@ -1916,10 +1916,9 @@ static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
 int snd_hda_multi_out_dig_open(struct hda_codec *codec, struct hda_multi_out *mout)
 {
        mutex_lock(&codec->spdif_mutex);
-       if (mout->dig_out_used) {
-               mutex_unlock(&codec->spdif_mutex);
-               return -EBUSY; /* already being used */
-       }
+       if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
+               /* already opened as analog dup; reset it once */
+               snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 0, 0, 0);
        mout->dig_out_used = HDA_DIG_EXCLUSIVE;
        mutex_unlock(&codec->spdif_mutex);
        return 0;