Loading include/sound/pcm.h +1 −0 Original line number Diff line number Diff line Loading @@ -407,6 +407,7 @@ struct snd_pcm_substream { const struct snd_pcm_ops *ops; /* -- runtime information -- */ struct snd_pcm_runtime *runtime; spinlock_t runtime_lock; /* -- timer section -- */ struct snd_timer *timer; /* timer */ unsigned timer_running: 1; /* time is running */ Loading sound/core/pcm.c +4 −0 Original line number Diff line number Diff line Loading @@ -705,6 +705,7 @@ int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count) } substream->group = &substream->self_group; spin_lock_init(&substream->self_group.lock); spin_lock_init(&substream->runtime_lock); mutex_init(&substream->self_group.mutex); INIT_LIST_HEAD(&substream->self_group.substreams); list_add_tail(&substream->link_list, &substream->self_group.substreams); Loading Loading @@ -1001,9 +1002,11 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, void snd_pcm_detach_substream(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime; unsigned long flags = 0; if (PCM_RUNTIME_CHECK(substream)) return; spin_lock_irqsave(&substream->runtime_lock, flags); runtime = substream->runtime; if (runtime->private_free != NULL) runtime->private_free(runtime); Loading @@ -1020,6 +1023,7 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream) put_pid(substream->pid); substream->pid = NULL; substream->pstr->substream_opened--; spin_unlock_irqrestore(&substream->runtime_lock, flags); } static ssize_t show_pcm_class(struct device *dev, Loading sound/core/pcm_timer.c +8 −1 Original line number Diff line number Diff line Loading @@ -65,9 +65,16 @@ void snd_pcm_timer_resolution_change(struct snd_pcm_substream *substream) static unsigned long snd_pcm_timer_resolution(struct snd_timer * timer) { struct snd_pcm_substream *substream; unsigned long ret = 0, flags = 0; substream = timer->private_data; return substream->runtime ? substream->runtime->timer_resolution : 0; spin_lock_irqsave(&substream->runtime_lock, flags); if (substream->runtime) ret = substream->runtime->timer_resolution; else ret = 0; spin_unlock_irqrestore(&substream->runtime_lock, flags); return ret; } static int snd_pcm_timer_start(struct snd_timer * timer) Loading Loading
include/sound/pcm.h +1 −0 Original line number Diff line number Diff line Loading @@ -407,6 +407,7 @@ struct snd_pcm_substream { const struct snd_pcm_ops *ops; /* -- runtime information -- */ struct snd_pcm_runtime *runtime; spinlock_t runtime_lock; /* -- timer section -- */ struct snd_timer *timer; /* timer */ unsigned timer_running: 1; /* time is running */ Loading
sound/core/pcm.c +4 −0 Original line number Diff line number Diff line Loading @@ -705,6 +705,7 @@ int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count) } substream->group = &substream->self_group; spin_lock_init(&substream->self_group.lock); spin_lock_init(&substream->runtime_lock); mutex_init(&substream->self_group.mutex); INIT_LIST_HEAD(&substream->self_group.substreams); list_add_tail(&substream->link_list, &substream->self_group.substreams); Loading Loading @@ -1001,9 +1002,11 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, void snd_pcm_detach_substream(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime; unsigned long flags = 0; if (PCM_RUNTIME_CHECK(substream)) return; spin_lock_irqsave(&substream->runtime_lock, flags); runtime = substream->runtime; if (runtime->private_free != NULL) runtime->private_free(runtime); Loading @@ -1020,6 +1023,7 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream) put_pid(substream->pid); substream->pid = NULL; substream->pstr->substream_opened--; spin_unlock_irqrestore(&substream->runtime_lock, flags); } static ssize_t show_pcm_class(struct device *dev, Loading
sound/core/pcm_timer.c +8 −1 Original line number Diff line number Diff line Loading @@ -65,9 +65,16 @@ void snd_pcm_timer_resolution_change(struct snd_pcm_substream *substream) static unsigned long snd_pcm_timer_resolution(struct snd_timer * timer) { struct snd_pcm_substream *substream; unsigned long ret = 0, flags = 0; substream = timer->private_data; return substream->runtime ? substream->runtime->timer_resolution : 0; spin_lock_irqsave(&substream->runtime_lock, flags); if (substream->runtime) ret = substream->runtime->timer_resolution; else ret = 0; spin_unlock_irqrestore(&substream->runtime_lock, flags); return ret; } static int snd_pcm_timer_start(struct snd_timer * timer) Loading