ALSA: pcm: Add timestamp type to sw_params
authorTakashi Iwai <tiwai@suse.de>
Thu, 10 Jul 2014 07:50:19 +0000 (09:50 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 10 Jul 2014 14:58:15 +0000 (16:58 +0200)
For allowing adjusting the timestamp type on the fly, add it to
sw_params.  The existing ioctl is still kept for compatibility.

Along with this, increment the PCM protocol version.

The extension was suggested by Clemens Ladisch.

Acked-by: Jaroslav Kysela <perex@perex.cz>
Reviewed-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/uapi/sound/asound.h
sound/core/pcm_native.c

index cbf7dc850a4640da4430dbfd5032cb188caf8d3e..a7e062f91f3969c723936c8da04e13764d90bc70 100644 (file)
@@ -139,7 +139,7 @@ struct snd_hwdep_dsp_image {
  *                                                                           *
  *****************************************************************************/
 
-#define SNDRV_PCM_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 11)
+#define SNDRV_PCM_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 12)
 
 typedef unsigned long snd_pcm_uframes_t;
 typedef signed long snd_pcm_sframes_t;
@@ -391,7 +391,9 @@ struct snd_pcm_sw_params {
        snd_pcm_uframes_t silence_threshold;    /* min distance from noise for silence filling */
        snd_pcm_uframes_t silence_size;         /* silence block size */
        snd_pcm_uframes_t boundary;             /* pointers wrap point */
-       unsigned char reserved[64];             /* reserved for future */
+       unsigned int tstamp_type;               /* timestamp type */
+       int pads;                               /* alignment, reserved */
+       unsigned char reserved[56];             /* reserved for future */
 };
 
 struct snd_pcm_channel_info {
index 2372c49a8e84d9180928451d84735d50c5b962a5..81dedc381efd57eec02d045034ab88006e0adb10 100644 (file)
@@ -543,6 +543,8 @@ static int snd_pcm_sw_params(struct snd_pcm_substream *substream,
 
        if (params->tstamp_mode > SNDRV_PCM_TSTAMP_LAST)
                return -EINVAL;
+       if (params->tstamp_type > SNDRV_PCM_TSTAMP_TYPE_LAST)
+               return -EINVAL;
        if (params->avail_min == 0)
                return -EINVAL;
        if (params->silence_size >= runtime->boundary) {
@@ -557,6 +559,7 @@ static int snd_pcm_sw_params(struct snd_pcm_substream *substream,
        err = 0;
        snd_pcm_stream_lock_irq(substream);
        runtime->tstamp_mode = params->tstamp_mode;
+       runtime->tstamp_type = params->tstamp_type;
        runtime->period_step = params->period_step;
        runtime->control->avail_min = params->avail_min;
        runtime->start_threshold = params->start_threshold;