ALSA: hda: replace .wallclock by .get_time_info
No real functional change, only take wall clock and system time in same routine and add accuracy report. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3179f62001
commit
9e94df3a62
|
@ -732,17 +732,32 @@ static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
|
||||||
azx_get_position(chip, azx_dev));
|
azx_get_position(chip, azx_dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
|
static int azx_get_time_info(struct snd_pcm_substream *substream,
|
||||||
struct timespec *ts)
|
struct timespec *system_ts, struct timespec *audio_ts,
|
||||||
|
struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
|
||||||
|
struct snd_pcm_audio_tstamp_report *audio_tstamp_report)
|
||||||
{
|
{
|
||||||
struct azx_dev *azx_dev = get_azx_dev(substream);
|
struct azx_dev *azx_dev = get_azx_dev(substream);
|
||||||
u64 nsec;
|
u64 nsec;
|
||||||
|
|
||||||
|
if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) &&
|
||||||
|
(audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) {
|
||||||
|
|
||||||
|
snd_pcm_gettime(substream->runtime, system_ts);
|
||||||
|
|
||||||
nsec = timecounter_read(&azx_dev->azx_tc);
|
nsec = timecounter_read(&azx_dev->azx_tc);
|
||||||
nsec = div_u64(nsec, 3); /* can be optimized */
|
nsec = div_u64(nsec, 3); /* can be optimized */
|
||||||
|
if (audio_tstamp_config->report_delay)
|
||||||
nsec = azx_adjust_codec_delay(substream, nsec);
|
nsec = azx_adjust_codec_delay(substream, nsec);
|
||||||
|
|
||||||
*ts = ns_to_timespec(nsec);
|
*audio_ts = ns_to_timespec(nsec);
|
||||||
|
|
||||||
|
audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK;
|
||||||
|
audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */
|
||||||
|
audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */
|
||||||
|
|
||||||
|
} else
|
||||||
|
audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -756,7 +771,8 @@ static struct snd_pcm_hardware azx_pcm_hw = {
|
||||||
/* SNDRV_PCM_INFO_RESUME |*/
|
/* SNDRV_PCM_INFO_RESUME |*/
|
||||||
SNDRV_PCM_INFO_PAUSE |
|
SNDRV_PCM_INFO_PAUSE |
|
||||||
SNDRV_PCM_INFO_SYNC_START |
|
SNDRV_PCM_INFO_SYNC_START |
|
||||||
SNDRV_PCM_INFO_HAS_WALL_CLOCK |
|
SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
|
||||||
|
SNDRV_PCM_INFO_HAS_LINK_ATIME |
|
||||||
SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
|
SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = SNDRV_PCM_RATE_48000,
|
.rates = SNDRV_PCM_RATE_48000,
|
||||||
|
@ -842,10 +858,12 @@ static int azx_pcm_open(struct snd_pcm_substream *substream)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* disable WALLCLOCK timestamps for capture streams
|
/* disable LINK_ATIME timestamps for capture streams
|
||||||
until we figure out how to handle digital inputs */
|
until we figure out how to handle digital inputs */
|
||||||
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
|
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
|
||||||
runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
|
runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */
|
||||||
|
runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||||
azx_dev->substream = substream;
|
azx_dev->substream = substream;
|
||||||
|
@ -877,7 +895,7 @@ static struct snd_pcm_ops azx_pcm_ops = {
|
||||||
.prepare = azx_pcm_prepare,
|
.prepare = azx_pcm_prepare,
|
||||||
.trigger = azx_pcm_trigger,
|
.trigger = azx_pcm_trigger,
|
||||||
.pointer = azx_pcm_pointer,
|
.pointer = azx_pcm_pointer,
|
||||||
.wall_clock = azx_get_wallclock_tstamp,
|
.get_time_info = azx_get_time_info,
|
||||||
.mmap = azx_pcm_mmap,
|
.mmap = azx_pcm_mmap,
|
||||||
.page = snd_pcm_sgbuf_ops_page,
|
.page = snd_pcm_sgbuf_ops_page,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue