|
@@ -486,6 +486,16 @@ static void snd_pcm_set_state(struct snd_pcm_substream *substream, int state)
|
|
|
snd_pcm_stream_unlock_irq(substream);
|
|
|
}
|
|
|
|
|
|
+static inline void snd_pcm_timer_notify(struct snd_pcm_substream *substream,
|
|
|
+ int event)
|
|
|
+{
|
|
|
+#ifdef CONFIG_SND_PCM_TIMER
|
|
|
+ if (substream->timer)
|
|
|
+ snd_timer_notify(substream->timer, event,
|
|
|
+ &substream->runtime->trigger_tstamp);
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
static int snd_pcm_hw_params(struct snd_pcm_substream *substream,
|
|
|
struct snd_pcm_hw_params *params)
|
|
|
{
|
|
@@ -1043,9 +1053,7 @@ static void snd_pcm_post_start(struct snd_pcm_substream *substream, int state)
|
|
|
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
|
|
|
runtime->silence_size > 0)
|
|
|
snd_pcm_playback_silence(substream, ULONG_MAX);
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer, SNDRV_TIMER_EVENT_MSTART,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MSTART);
|
|
|
}
|
|
|
|
|
|
static struct action_ops snd_pcm_action_start = {
|
|
@@ -1093,9 +1101,7 @@ static void snd_pcm_post_stop(struct snd_pcm_substream *substream, int state)
|
|
|
if (runtime->status->state != state) {
|
|
|
snd_pcm_trigger_tstamp(substream);
|
|
|
runtime->status->state = state;
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer, SNDRV_TIMER_EVENT_MSTOP,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MSTOP);
|
|
|
}
|
|
|
wake_up(&runtime->sleep);
|
|
|
wake_up(&runtime->tsleep);
|
|
@@ -1209,18 +1215,12 @@ static void snd_pcm_post_pause(struct snd_pcm_substream *substream, int push)
|
|
|
snd_pcm_trigger_tstamp(substream);
|
|
|
if (push) {
|
|
|
runtime->status->state = SNDRV_PCM_STATE_PAUSED;
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer,
|
|
|
- SNDRV_TIMER_EVENT_MPAUSE,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MPAUSE);
|
|
|
wake_up(&runtime->sleep);
|
|
|
wake_up(&runtime->tsleep);
|
|
|
} else {
|
|
|
runtime->status->state = SNDRV_PCM_STATE_RUNNING;
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer,
|
|
|
- SNDRV_TIMER_EVENT_MCONTINUE,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MCONTINUE);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1268,9 +1268,7 @@ static void snd_pcm_post_suspend(struct snd_pcm_substream *substream, int state)
|
|
|
snd_pcm_trigger_tstamp(substream);
|
|
|
runtime->status->suspended_state = runtime->status->state;
|
|
|
runtime->status->state = SNDRV_PCM_STATE_SUSPENDED;
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer, SNDRV_TIMER_EVENT_MSUSPEND,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MSUSPEND);
|
|
|
wake_up(&runtime->sleep);
|
|
|
wake_up(&runtime->tsleep);
|
|
|
}
|
|
@@ -1374,9 +1372,7 @@ static void snd_pcm_post_resume(struct snd_pcm_substream *substream, int state)
|
|
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
|
|
snd_pcm_trigger_tstamp(substream);
|
|
|
runtime->status->state = runtime->status->suspended_state;
|
|
|
- if (substream->timer)
|
|
|
- snd_timer_notify(substream->timer, SNDRV_TIMER_EVENT_MRESUME,
|
|
|
- &runtime->trigger_tstamp);
|
|
|
+ snd_pcm_timer_notify(substream, SNDRV_TIMER_EVENT_MRESUME);
|
|
|
}
|
|
|
|
|
|
static struct action_ops snd_pcm_action_resume = {
|