diff options
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/pcm_lib.c | 6 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index b75db8e9cc0f..bc57501c584a 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c | |||
@@ -373,6 +373,11 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream, | |||
373 | (unsigned long)new_hw_ptr, | 373 | (unsigned long)new_hw_ptr, |
374 | (unsigned long)runtime->hw_ptr_base); | 374 | (unsigned long)runtime->hw_ptr_base); |
375 | } | 375 | } |
376 | |||
377 | /* without period interrupts, there are no regular pointer updates */ | ||
378 | if (runtime->no_period_wakeup) | ||
379 | goto no_delta_check; | ||
380 | |||
376 | /* something must be really wrong */ | 381 | /* something must be really wrong */ |
377 | if (delta >= runtime->buffer_size + runtime->period_size) { | 382 | if (delta >= runtime->buffer_size + runtime->period_size) { |
378 | hw_ptr_error(substream, | 383 | hw_ptr_error(substream, |
@@ -442,6 +447,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream, | |||
442 | (long)old_hw_ptr); | 447 | (long)old_hw_ptr); |
443 | } | 448 | } |
444 | 449 | ||
450 | no_delta_check: | ||
445 | if (runtime->status->hw_ptr == new_hw_ptr) | 451 | if (runtime->status->hw_ptr == new_hw_ptr) |
446 | return 0; | 452 | return 0; |
447 | 453 | ||
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 8bc7cb3db330..f91a439f675c 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -423,6 +423,9 @@ static int snd_pcm_hw_params(struct snd_pcm_substream *substream, | |||
423 | runtime->info = params->info; | 423 | runtime->info = params->info; |
424 | runtime->rate_num = params->rate_num; | 424 | runtime->rate_num = params->rate_num; |
425 | runtime->rate_den = params->rate_den; | 425 | runtime->rate_den = params->rate_den; |
426 | runtime->no_period_wakeup = | ||
427 | (params->info & SNDRV_PCM_INFO_NO_PERIOD_WAKEUP) && | ||
428 | (params->flags & SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP); | ||
426 | 429 | ||
427 | bits = snd_pcm_format_physical_width(runtime->format); | 430 | bits = snd_pcm_format_physical_width(runtime->format); |
428 | runtime->sample_bits = bits; | 431 | runtime->sample_bits = bits; |