mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
ALSA: dummy: Use the standard PCM sync_stop callback for hrtimer
The hrtimer backend code in ALSA dummy driver calls explicitly the synchronization of hrtimer cancel from prepare and free callbacks, and this is exactly what the standard PCM sync_stop callback serves for. Replace the open-code with the standard PCM sync_stop callback. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20260720135356.1779857-2-tiwai@suse.de
This commit is contained in:
parent
2d07693875
commit
b9dada6bb7
|
|
@ -100,6 +100,7 @@ struct dummy_timer_ops {
|
|||
int (*prepare)(struct snd_pcm_substream *);
|
||||
int (*start)(struct snd_pcm_substream *);
|
||||
int (*stop)(struct snd_pcm_substream *);
|
||||
int (*sync_stop)(struct snd_pcm_substream *);
|
||||
snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);
|
||||
};
|
||||
|
||||
|
|
@ -407,9 +408,12 @@ static int dummy_hrtimer_stop(struct snd_pcm_substream *substream)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm)
|
||||
static int dummy_hrtimer_sync_stop(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data;
|
||||
|
||||
hrtimer_cancel(&dpcm->timer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static snd_pcm_uframes_t
|
||||
|
|
@ -435,7 +439,6 @@ static int dummy_hrtimer_prepare(struct snd_pcm_substream *substream)
|
|||
long sec;
|
||||
unsigned long nsecs;
|
||||
|
||||
dummy_hrtimer_sync(dpcm);
|
||||
period = runtime->period_size;
|
||||
rate = runtime->rate;
|
||||
sec = period / rate;
|
||||
|
|
@ -463,7 +466,7 @@ static int dummy_hrtimer_create(struct snd_pcm_substream *substream)
|
|||
static void dummy_hrtimer_free(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data;
|
||||
dummy_hrtimer_sync(dpcm);
|
||||
|
||||
kfree(dpcm);
|
||||
}
|
||||
|
||||
|
|
@ -473,6 +476,7 @@ static const struct dummy_timer_ops dummy_hrtimer_ops = {
|
|||
.prepare = dummy_hrtimer_prepare,
|
||||
.start = dummy_hrtimer_start,
|
||||
.stop = dummy_hrtimer_stop,
|
||||
.sync_stop = dummy_hrtimer_sync_stop,
|
||||
.pointer = dummy_hrtimer_pointer,
|
||||
};
|
||||
|
||||
|
|
@ -495,6 +499,13 @@ static int dummy_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int dummy_pcm_sync_stop(struct snd_pcm_substream *substream)
|
||||
{
|
||||
if (get_dummy_ops(substream)->sync_stop)
|
||||
return get_dummy_ops(substream)->sync_stop(substream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dummy_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
{
|
||||
return get_dummy_ops(substream)->prepare(substream);
|
||||
|
|
@ -646,6 +657,7 @@ static const struct snd_pcm_ops dummy_pcm_ops = {
|
|||
.hw_params = dummy_pcm_hw_params,
|
||||
.prepare = dummy_pcm_prepare,
|
||||
.trigger = dummy_pcm_trigger,
|
||||
.sync_stop = dummy_pcm_sync_stop,
|
||||
.pointer = dummy_pcm_pointer,
|
||||
};
|
||||
|
||||
|
|
@ -655,6 +667,7 @@ static const struct snd_pcm_ops dummy_pcm_ops_no_buf = {
|
|||
.hw_params = dummy_pcm_hw_params,
|
||||
.prepare = dummy_pcm_prepare,
|
||||
.trigger = dummy_pcm_trigger,
|
||||
.sync_stop = dummy_pcm_sync_stop,
|
||||
.pointer = dummy_pcm_pointer,
|
||||
.copy = dummy_pcm_copy,
|
||||
.fill_silence = dummy_pcm_silence,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user