From ae03bbb8f93b9e2c85a58e7476b87f7fb1c063ab Mon Sep 17 00:00:00 2001 From: Dylan Reid Date: Mon, 15 Apr 2013 11:57:05 -0700 Subject: [PATCH] ALSA: hda - Add codec delay to the capture time stamp. For capture, the delay through the codec contributes to the time stamp of the sample recorded at the A to D. Rename the codec time stamp function appropriately. Signed-off-by: Dylan Reid Signed-off-by: Takashi Iwai --- sound/pci/hda/hda_intel.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 63734b5..7b213d5 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1889,7 +1889,7 @@ static void azx_timecounter_init(struct snd_pcm_substream *substream, tc->cycle_last = last; } -static u64 azx_subtract_codec_delay(struct snd_pcm_substream *substream, +static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream, u64 nsec) { struct azx_pcm *apcm = snd_pcm_substream_chip(substream); @@ -1903,6 +1903,9 @@ static u64 azx_subtract_codec_delay(struct snd_pcm_substream *substream, codec_nsecs = div_u64(codec_frames * 1000000000LL, substream->runtime->rate); + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) + return nsec + codec_nsecs; + return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0; } @@ -1914,7 +1917,7 @@ static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream, nsec = timecounter_read(&azx_dev->azx_tc); nsec = div_u64(nsec, 3); /* can be optimized */ - nsec = azx_subtract_codec_delay(substream, nsec); + nsec = azx_adjust_codec_delay(substream, nsec); *ts = ns_to_timespec(nsec); -- 2.7.4