diff options
-rw-r--r-- | Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | 3 | ||||
-rw-r--r-- | include/sound/core.h | 23 | ||||
-rw-r--r-- | include/sound/pcm.h | 3 | ||||
-rw-r--r-- | sound/core/pcm_lib.c | 2 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 14 | ||||
-rw-r--r-- | sound/core/timer.c | 6 |
6 files changed, 10 insertions, 41 deletions
diff --git a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl index f3a2fdca9ad2..ab3dfe074fb1 100644 --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | |||
@@ -2190,8 +2190,7 @@ struct _snd_pcm_runtime { | |||
2190 | unsigned int rate_den; | 2190 | unsigned int rate_den; |
2191 | 2191 | ||
2192 | /* -- SW params -- */ | 2192 | /* -- SW params -- */ |
2193 | int tstamp_timespec; /* use timeval (0) or timespec (1) */ | 2193 | struct timespec tstamp_mode; /* mmap timestamp is updated */ |
2194 | snd_pcm_tstamp_t tstamp_mode; /* mmap timestamp is updated */ | ||
2195 | unsigned int period_step; | 2194 | unsigned int period_step; |
2196 | unsigned int sleep_min; /* min ticks to sleep */ | 2195 | unsigned int sleep_min; /* min ticks to sleep */ |
2197 | snd_pcm_uframes_t xfer_align; /* xfer size need to be a multiple */ | 2196 | snd_pcm_uframes_t xfer_align; /* xfer size need to be a multiple */ |
diff --git a/include/sound/core.h b/include/sound/core.h index f0f54407fe5c..fa8f4c9492cc 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/pm.h> /* pm_message_t */ | 29 | #include <linux/pm.h> /* pm_message_t */ |
30 | 30 | ||
31 | /* Typedef's */ | 31 | /* Typedef's */ |
32 | typedef struct timespec snd_timestamp_t; | ||
33 | typedef struct sndrv_interval snd_interval_t; | 32 | typedef struct sndrv_interval snd_interval_t; |
34 | typedef enum sndrv_card_type snd_card_type; | 33 | typedef enum sndrv_card_type snd_card_type; |
35 | typedef struct sndrv_xferi snd_xferi_t; | 34 | typedef struct sndrv_xferi snd_xferi_t; |
@@ -464,28 +463,6 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
464 | #endif | 463 | #endif |
465 | 464 | ||
466 | 465 | ||
467 | static inline void snd_timestamp_now(struct timespec *tstamp, int timespec) | ||
468 | { | ||
469 | struct timeval val; | ||
470 | /* FIXME: use a linear time source */ | ||
471 | do_gettimeofday(&val); | ||
472 | tstamp->tv_sec = val.tv_sec; | ||
473 | tstamp->tv_nsec = val.tv_usec; | ||
474 | if (timespec) | ||
475 | tstamp->tv_nsec *= 1000L; | ||
476 | } | ||
477 | |||
478 | static inline void snd_timestamp_zero(struct timespec *tstamp) | ||
479 | { | ||
480 | tstamp->tv_sec = 0; | ||
481 | tstamp->tv_nsec = 0; | ||
482 | } | ||
483 | |||
484 | static inline int snd_timestamp_null(struct timespec *tstamp) | ||
485 | { | ||
486 | return tstamp->tv_sec == 0 && tstamp->tv_nsec == 0; | ||
487 | } | ||
488 | |||
489 | #define SNDRV_OSS_VERSION ((3<<16)|(8<<8)|(1<<4)|(0)) /* 3.8.1a */ | 466 | #define SNDRV_OSS_VERSION ((3<<16)|(8<<8)|(1<<4)|(0)) /* 3.8.1a */ |
490 | 467 | ||
491 | /* for easier backward-porting */ | 468 | /* for easier backward-porting */ |
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 2b23a5967071..acc4fa9d5abe 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -281,7 +281,7 @@ typedef struct { | |||
281 | struct _snd_pcm_runtime { | 281 | struct _snd_pcm_runtime { |
282 | /* -- Status -- */ | 282 | /* -- Status -- */ |
283 | snd_pcm_substream_t *trigger_master; | 283 | snd_pcm_substream_t *trigger_master; |
284 | snd_timestamp_t trigger_tstamp; /* trigger timestamp */ | 284 | struct timespec trigger_tstamp; /* trigger timestamp */ |
285 | int overrange; | 285 | int overrange; |
286 | snd_pcm_uframes_t avail_max; | 286 | snd_pcm_uframes_t avail_max; |
287 | snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */ | 287 | snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */ |
@@ -306,7 +306,6 @@ struct _snd_pcm_runtime { | |||
306 | unsigned int rate_den; | 306 | unsigned int rate_den; |
307 | 307 | ||
308 | /* -- SW params -- */ | 308 | /* -- SW params -- */ |
309 | int tstamp_timespec; /* use timeval (0) or timespec (1) */ | ||
310 | snd_pcm_tstamp_t tstamp_mode; /* mmap timestamp is updated */ | 309 | snd_pcm_tstamp_t tstamp_mode; /* mmap timestamp is updated */ |
311 | unsigned int period_step; | 310 | unsigned int period_step; |
312 | unsigned int sleep_min; /* min ticks to sleep */ | 311 | unsigned int sleep_min; /* min ticks to sleep */ |
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index dfc5f45f2748..3dbf9bf2ac16 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c | |||
@@ -152,7 +152,7 @@ static inline snd_pcm_uframes_t snd_pcm_update_hw_ptr_pos(snd_pcm_substream_t *s | |||
152 | if (pos == SNDRV_PCM_POS_XRUN) | 152 | if (pos == SNDRV_PCM_POS_XRUN) |
153 | return pos; /* XRUN */ | 153 | return pos; /* XRUN */ |
154 | if (runtime->tstamp_mode & SNDRV_PCM_TSTAMP_MMAP) | 154 | if (runtime->tstamp_mode & SNDRV_PCM_TSTAMP_MMAP) |
155 | snd_timestamp_now((snd_timestamp_t*)&runtime->status->tstamp, runtime->tstamp_timespec); | 155 | getnstimeofday((struct timespec *)&runtime->status->tstamp); |
156 | #ifdef CONFIG_SND_DEBUG | 156 | #ifdef CONFIG_SND_DEBUG |
157 | if (pos >= runtime->buffer_size) { | 157 | if (pos >= runtime->buffer_size) { |
158 | snd_printk(KERN_ERR "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size); | 158 | snd_printk(KERN_ERR "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size); |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index e6e2b70314c0..a1924f12d8fc 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -565,9 +565,9 @@ int snd_pcm_status(snd_pcm_substream_t *substream, | |||
565 | if (runtime->tstamp_mode & SNDRV_PCM_TSTAMP_MMAP) | 565 | if (runtime->tstamp_mode & SNDRV_PCM_TSTAMP_MMAP) |
566 | status->tstamp = runtime->status->tstamp; | 566 | status->tstamp = runtime->status->tstamp; |
567 | else | 567 | else |
568 | snd_timestamp_now(&status->tstamp, runtime->tstamp_timespec); | 568 | getnstimeofday(&status->tstamp); |
569 | } else | 569 | } else |
570 | snd_timestamp_now(&status->tstamp, runtime->tstamp_timespec); | 570 | getnstimeofday(&status->tstamp); |
571 | status->appl_ptr = runtime->control->appl_ptr; | 571 | status->appl_ptr = runtime->control->appl_ptr; |
572 | status->hw_ptr = runtime->status->hw_ptr; | 572 | status->hw_ptr = runtime->status->hw_ptr; |
573 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { | 573 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
@@ -652,7 +652,7 @@ static void snd_pcm_trigger_tstamp(snd_pcm_substream_t *substream) | |||
652 | if (runtime->trigger_master == NULL) | 652 | if (runtime->trigger_master == NULL) |
653 | return; | 653 | return; |
654 | if (runtime->trigger_master == substream) { | 654 | if (runtime->trigger_master == substream) { |
655 | snd_timestamp_now(&runtime->trigger_tstamp, runtime->tstamp_timespec); | 655 | getnstimeofday(&runtime->trigger_tstamp); |
656 | } else { | 656 | } else { |
657 | snd_pcm_trigger_tstamp(runtime->trigger_master); | 657 | snd_pcm_trigger_tstamp(runtime->trigger_master); |
658 | runtime->trigger_tstamp = runtime->trigger_master->runtime->trigger_tstamp; | 658 | runtime->trigger_tstamp = runtime->trigger_master->runtime->trigger_tstamp; |
@@ -2446,14 +2446,8 @@ static int snd_pcm_common_ioctl1(snd_pcm_substream_t *substream, | |||
2446 | return put_user(SNDRV_PCM_VERSION, (int __user *)arg) ? -EFAULT : 0; | 2446 | return put_user(SNDRV_PCM_VERSION, (int __user *)arg) ? -EFAULT : 0; |
2447 | case SNDRV_PCM_IOCTL_INFO: | 2447 | case SNDRV_PCM_IOCTL_INFO: |
2448 | return snd_pcm_info_user(substream, arg); | 2448 | return snd_pcm_info_user(substream, arg); |
2449 | case SNDRV_PCM_IOCTL_TSTAMP: | 2449 | case SNDRV_PCM_IOCTL_TSTAMP: /* just for compatibility */ |
2450 | { | ||
2451 | int xarg; | ||
2452 | if (get_user(xarg, (int __user *)arg)) | ||
2453 | return -EFAULT; | ||
2454 | substream->runtime->tstamp_timespec = xarg ? 1 : 0; | ||
2455 | return 0; | 2450 | return 0; |
2456 | } | ||
2457 | case SNDRV_PCM_IOCTL_HW_REFINE: | 2451 | case SNDRV_PCM_IOCTL_HW_REFINE: |
2458 | return snd_pcm_hw_refine_user(substream, arg); | 2452 | return snd_pcm_hw_refine_user(substream, arg); |
2459 | case SNDRV_PCM_IOCTL_HW_PARAMS: | 2453 | case SNDRV_PCM_IOCTL_HW_PARAMS: |
diff --git a/sound/core/timer.c b/sound/core/timer.c index 128916c66085..8ecec9134acd 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c | |||
@@ -385,7 +385,7 @@ static void snd_timer_notify1(snd_timer_instance_t *ti, enum sndrv_timer_event e | |||
385 | struct list_head *n; | 385 | struct list_head *n; |
386 | struct timespec tstamp; | 386 | struct timespec tstamp; |
387 | 387 | ||
388 | snd_timestamp_now(&tstamp, 1); | 388 | getnstimeofday(&tstamp); |
389 | snd_assert(event >= SNDRV_TIMER_EVENT_START && event <= SNDRV_TIMER_EVENT_PAUSE, return); | 389 | snd_assert(event >= SNDRV_TIMER_EVENT_START && event <= SNDRV_TIMER_EVENT_PAUSE, return); |
390 | if (event == SNDRV_TIMER_EVENT_START || event == SNDRV_TIMER_EVENT_CONTINUE) | 390 | if (event == SNDRV_TIMER_EVENT_START || event == SNDRV_TIMER_EVENT_CONTINUE) |
391 | resolution = snd_timer_resolution(ti); | 391 | resolution = snd_timer_resolution(ti); |
@@ -1156,14 +1156,14 @@ static void snd_timer_user_tinterrupt(snd_timer_instance_t *timeri, | |||
1156 | struct timespec tstamp; | 1156 | struct timespec tstamp; |
1157 | int prev, append = 0; | 1157 | int prev, append = 0; |
1158 | 1158 | ||
1159 | snd_timestamp_zero(&tstamp); | 1159 | memset(&tstamp, 0, sizeof(tstamp)); |
1160 | spin_lock(&tu->qlock); | 1160 | spin_lock(&tu->qlock); |
1161 | if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION)|(1 << SNDRV_TIMER_EVENT_TICK))) == 0) { | 1161 | if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION)|(1 << SNDRV_TIMER_EVENT_TICK))) == 0) { |
1162 | spin_unlock(&tu->qlock); | 1162 | spin_unlock(&tu->qlock); |
1163 | return; | 1163 | return; |
1164 | } | 1164 | } |
1165 | if (tu->last_resolution != resolution || ticks > 0) | 1165 | if (tu->last_resolution != resolution || ticks > 0) |
1166 | snd_timestamp_now(&tstamp, 1); | 1166 | getnstimeofday(&tstamp); |
1167 | if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && tu->last_resolution != resolution) { | 1167 | if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && tu->last_resolution != resolution) { |
1168 | r1.event = SNDRV_TIMER_EVENT_RESOLUTION; | 1168 | r1.event = SNDRV_TIMER_EVENT_RESOLUTION; |
1169 | r1.tstamp = tstamp; | 1169 | r1.tstamp = tstamp; |