alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Anssi Hannula <anssi.hannula@iki.fi>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH] ALSA: hda - Avoid outputting HDMI audio before prepare() and after close()
Date: Sun, 17 Feb 2013 09:24:53 +0100	[thread overview]
Message-ID: <s5hd2vzcppm.wl%tiwai@suse.de> (raw)
In-Reply-To: <511FF33C.6050709@iki.fi>

At Sat, 16 Feb 2013 22:59:40 +0200,
Anssi Hannula wrote:
> 
> 16.02.2013 18:40, Anssi Hannula kirjoitti:
> > Some HDMI codecs (at least NVIDIA 0x10de000b:0x10de0101:0x100100) start
> > transmitting an empty audio stream as soon as PIN_OUT and AC_DIG1_ENABLE
> > are enabled.
> > 
> > Since commit 6169b673618bf0b2518ce413b54925782a603f06 ("ALSA: hda -
> > Always turn on pins for HDMI/DP") this happens at first open() time, and
> > will continue even after close().
> > 
> > Additionally, some codecs (at least Intel PantherPoint HDMI) currently
> > continue transmitting HDMI audio even after close() in case some actual
> > audio was output after open() (this happens regardless of PIN_OUT).
> > 
> > Empty HDMI audio transmission when not intended has the effect that a
> > possible HDMI audio sink/receiver may prefer the empty HDMI audio stream
> > over an actual audio stream on its S/PDIF inputs.
> > 
> > To avoid the issue before first prepare(), set stream format to 0 on
> > codec initialization. 0 is not a valid format value for HDMI and will
> > prevent the audio stream from being output.
> > 
> > Additionally, at close() time, make sure that the stream is cleaned up.
> > This will ensure that the format is reset to 0 at that time, preventing
> > audio from being output in that case.
> > 
> > Thanks to OpenELEC developers and users for their help in investigating
> > this issue on the affected NVIDIA "ION2" hardware, and for the initial
> > bug report of the issue. Testing of the final version on NVIDIA ION2 was
> > done by OpenELEC user "MrXIII". Testing on Intel PantherPoint was done
> > by myself.
> > 
> > Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
> > Cc: stable@vger.kernel.org
> > ---
> > 
> > This also supersedes the patch I attached yesterday as it fixes both
> > cases.
> > 
> > I guess the alternative to this approach would be to fiddle with
> > AC_DIG1_ENABLE when preparing and closing the device, but with a quick
> > look that seemed to be possibly more complex since AC_DIG1_ENABLE is
> > already meddled with at quite a few places in hda_codec.c.
> 
> Hmm... actually, that would not be so much more complex, just making
> sure AC_DIG1_ENABLE is off in hdmi_add_cvt() (by e.g. zeroing
> AC_VERB_SET_DIGI_CONVERT_1) and making snd_hda_spdif_ctls_unassign()
> call "set_spdif_ctls(codec, spdif->nid, 0, -1);".
> 
> However, it would still mean that just a simple snd_pcm_open() could
> cause an empty stream to be output (if format is valid), since iec958
> controls are assigned at open() time, and iec958 mute controls
> AC_DIG1_ENABLE. Or we could add additional code in hda_codec.c to
> prevent AC_DIG1_ENABLE being set if prepare() has not been called.

Is the problem fixed if you set codec->no_sticky_stream = 1?

Actually, the current behavior is intentional.  There have been bug
reports that just reopening a device causes the receiver not reacting
immediately.  In the worst case, it takes a few seconds to sync. So we
introduced a mechanism to keep the PCM stream assignment.

If your problem is solved by clearing codec->no_stick_stream, we may
provide an additional mixer control to turn it on/off, for example,
because we can't blindly disable/enable it globally if user's receiver
has a problem with the stream sync.


thanks,

Takashi

  reply	other threads:[~2013-02-17  8:24 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-16  2:23 HDMI regression on close (was: ALSA: hda - Always turn on pins for HDMI/DP) Anssi Hannula
2013-02-16 16:40 ` [PATCH] ALSA: hda - Avoid outputting HDMI audio before prepare() and after close() Anssi Hannula
2013-02-16 20:59   ` Anssi Hannula
2013-02-17  8:24     ` Takashi Iwai [this message]
2013-02-17 12:23       ` Anssi Hannula
2013-02-17 17:17         ` Takashi Iwai
2013-02-17 17:57           ` Anssi Hannula
2013-02-18 11:03             ` Takashi Iwai
2013-02-18 11:26               ` Anssi Hannula

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hd2vzcppm.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=anssi.hannula@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).