Hello,
thank you for your answer. I think there is a problem, but I did not
describe it correctly. See my comments
On Thu, 2 Dec 2010, Markus Niebel wrote:
Hello,
we're working with a special cameraboard (CCD + Analog Frontend IC). Using the
soc_camera stack on the i.MX35 (mx3_camera) the following problem arises:
VIDIOC_STREAMON calls soc_camera_streamon which calls videobuf_streamon - when
iterating the buffers in the queue the function mx3_videobuf_queue is called
for every buffer. This sends the buffers to the omage DMA (IDMAC) using the
tx_submit method. The function ipu_init_channel_buffer (DMA driver ipu_core)
gets only one buffer from the scatterlist, this leads to a single buffer
capture.
What I wanted to say was, that tx_submit (in case of ipu_core
idmac_tx_submit) calls ipu_init_channel_buffer if channel status is <
IPU_CHANNEL_READY. Since only one buffer is submitted
(mx3_videobuf_queue is called in a loop for every single buffer in the
videobuf_queue) in the IPU_CHA_DB_MODE_SEL register double buffering
will not be enabled for the channel. When I put a debug message in
ipu_init_channel_buffer I saw that phyaddr_1 is set to NULL.
In the code of mx3_videobuf_prepare there is a comment, that the first
buffer's scatterlist needs to contain two buffers but this is not implemented.
I try to understand the interworking of the parts (soc_camera, videobuf,
ipu_core and mx3_camera) and would help to fix it.
Here's the comment, you are referring to:
/*
* We will have to configure the IDMAC channel. It has two slots
* for DMA buffers, we shall enter the first two buffers there,
* and then submit new buffers in DMA-ready interrupts
*/
It says nothing about the scatter-list. Each buffer is submitted in an own
sg-list with one element. They get queued in the ipu_idmac dmaengine
driver. So, you just have to queue several buffers in your application
before going to the dequeue stage. Look at contrib/test/capture-example.c
from http://git.linuxtv.org/v4l-utils.git for an example.
Yes we do it this way - queing all buffers and then start stream. The
function idmac_tx_submit tries to get a second buffer address from the
list in case of channel is not ready yet. This happens only for the very
first buffer, since ipu_init_channel_buffer sets status to
IPU_CHANNEL_READY.
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Thanks and best regards
Markus
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html