
On May 16 2017 14:46, Takashi Iwai wrote:
In this case, the problem is that the mmap control allows the appl_ptr being changed silently without interaction with the driver. If the driver requires some explicit action for changing the appl_ptr, it won't work.
I think 'struct snd_pcm_ops.pointer' is available for this purpose, too.
static snd_pcm_sframes_t snd_pcm_playback_rewind(...) { ... hw_avail = snd_pcm_playback_hw_avail(runtime); (->struct snd_pcm_ops.pointer()) ... (rewind PCM frames) ... + substream->ops->pointer(...); (->struct snd_pcm_ops.pointer()) ... }
If drivers need to handle event to update the appl_ptr, it records value of the appl_ptr, then compare it to current value to get the updates.
I note that the callback is done in both of process/irq contexts.
On May 16 2017 14:46, Takashi Iwai wrote:
Worthless is a too strong word, but I agree that more clarification would be more helpful.
Sorry to use such strong expression. I'll care of it.
Regards
Takashi Sakamoto