> -----Original Message----- > From: Pierre-Louis Bossart [mailto:pierre-louis.bossart@xxxxxxxxxxxxxxx] > Sent: Saturday, January 7, 2017 2:13 AM > To: Anand, Jerome <jerome.anand@xxxxxxxxx>; intel- > gfx@xxxxxxxxxxxxxxxxxxxxx; alsa-devel@xxxxxxxxxxxxxxxx > Cc: tiwai@xxxxxxx; broonie@xxxxxxxxxx; Ughreja, Rakesh A > <rakesh.a.ughreja@xxxxxxxxx>; ville.syrjala@xxxxxxxxxxxxxxx > Subject: Re: [alsa-devel] [PATCH V2 7/7] ALSA: x86: hdmi: continue playback > even when display resolution changes > > On 1/6/17 7:21 PM, Jerome Anand wrote: > > When the display resolution changes, the drm disables the display > > pipes due to which audio rendering stops. At this time, we need to > > ensure the existing audio pointers and buffers are cleared out so that > > the playback can restarted once the display pipe is enabled with a > > different N/CTS values > > Add comment that this patch series has only been tested on hardware with a > single HDMI connector/pipe and additional work may be needed for newer > machines with 2 connectors. > OK > > > > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > > Signed-off-by: Jerome Anand <jerome.anand@xxxxxxxxx> > > --- > > sound/x86/intel_hdmi_audio.c | 21 ++++++++++++++++++--- > > 1 file changed, 18 insertions(+), 3 deletions(-) > > > > diff --git a/sound/x86/intel_hdmi_audio.c > b/sound/x86/intel_hdmi_audio.c > > index 91efbeb..f4042f8 100644 > > --- a/sound/x86/intel_hdmi_audio.c > > +++ b/sound/x86/intel_hdmi_audio.c > > @@ -43,6 +43,7 @@ static DEFINE_MUTEX(had_mutex); > > static int hdmi_card_index = SNDRV_DEFAULT_IDX1; > > static char *hdmi_card_id = SNDRV_DEFAULT_STR1; > > static struct snd_intelhad *had_data; > > +static int underrun_count; > > > > module_param_named(index, hdmi_card_index, int, 0444); > > MODULE_PARM_DESC(index, > > @@ -1114,6 +1115,7 @@ static int snd_intelhad_open(struct > snd_pcm_substream *substream) > > intelhaddata = snd_pcm_substream_chip(substream); > > had_stream = intelhaddata->private_data; > > runtime = substream->runtime; > > + underrun_count = 0; > > > > pm_runtime_get(intelhaddata->dev); > > > > @@ -1503,10 +1505,23 @@ static snd_pcm_uframes_t > snd_intelhad_pcm_pointer( > > > > buf_id = intelhaddata->curr_buf % 4; > > had_read_register(AUD_BUF_A_LENGTH + (buf_id * > HAD_REG_WIDTH), &t); > > - if (t == 0) { > > - pr_debug("discovered buffer done for buf %d\n", buf_id); > > - /* had_process_buffer_done(intelhaddata); */ > > + > > + if ((t == 0) || (t == ((u32)-1L))) { > > + underrun_count++; > > + pr_debug("discovered buffer done for buf %d, count = > %d\n", > > + buf_id, underrun_count); > > + > > + if (underrun_count > (HAD_MIN_PERIODS/2)) { > > + pr_debug("assume audio_codec_reset, underrun = > %d - do xrun\n", > > + underrun_count); > > + underrun_count = 0; > > + return SNDRV_PCM_POS_XRUN; > > + } > > + } else { > > + /* Reset Counter */ > > + underrun_count = 0; > > } > > + > > t = intelhaddata->buf_info[buf_id].buf_size - t; > > > > if (intelhaddata->stream_info.buffer_rendered) > > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx