Mani, Arun wrote:
It indeed gets initialized in the hw_params. But the runtime dma parameters are not populated with the substream private data information that is gets in hw_params for the first time. I am not sure why. Any ideas?
Thanks, Arun.
The real bug is in the routine davinci_i2s_startup.
The line
cpu_dai->dma_data = dev->dma_params[substream->stream];
This works, as long as both streams aren't open.
playback stream davinci_i2s_startup: P0 dma_params=c03a7680 davinci_pcm_dma_request: P0 dma_data=c03a7680 ^^ saves pointer
capture stream davinci_i2s_startup: C1 dma_params=c03a769c ^^ changes cpu_dai pointer davinci_pcm_dma_request: C1 dma_data=c03a769c ^^ saves pointer davinci_i2s_hw_params: data_type=2 C1 dma_params=c03a769c ^^ capture data_type=2
davinci_pcm_enqueue_dma: data_type=2 C1 c03a769c davinci_pcm_enqueue_dma: data_type=2 C1 c03a769c
playback stream davinci_i2s_hw_params: data_type=2 P0 dma_params=c03a769c ^^ playback dma_params is WRONG should be c03a7680
davinci_pcm_enqueue_dma: data_type=0 P0 c03a7680 ^^ This uses the save dma_params value, hence data_type is still 0
Division by zero in kernel.
It seems like a lot of drivers may have this bug.
Troy