This patch seems incomplete to me? On the one hand you're saying, you only 
work with i.MX27, but you've left

static void mx27_camera_frame_done(struct mx2_camera_dev *pcdev, int state)
{
        struct videobuf_buffer *vb;

TBH, I don't understand how you've tested this patch: it doesn't compile 
for me for i.MX27. And to use EMMA CONFIG_MACH_MX27 has to be on too, 
right? Confused...

On Fri, 20 Jan 2012, Javier Martin wrote:

> 
> Signed-off-by: Javier Martin <javier.mar...@vista-silicon.com>
> ---
>  drivers/media/video/mx2_camera.c |  277 
> ++++++++++++++++++--------------------
>  1 files changed, 128 insertions(+), 149 deletions(-)
> 
> diff --git a/drivers/media/video/mx2_camera.c 
> b/drivers/media/video/mx2_camera.c
> index 68038e7..290ac9d 100644
> --- a/drivers/media/video/mx2_camera.c
> +++ b/drivers/media/video/mx2_camera.c

[snip]

> @@ -256,13 +257,25 @@ struct mx2_camera_dev {
>       size_t                  discard_size;
>       struct mx2_fmt_cfg      *emma_prp;
>       u32                     frame_count;
> +     struct vb2_alloc_ctx    *alloc_ctx;
> +};
> +
> +enum mx2_buffer_state {
> +     MX2_STATE_NEEDS_INIT = 0,
> +     MX2_STATE_PREPARED   = 1,
> +     MX2_STATE_QUEUED     = 2,
> +     MX2_STATE_ACTIVE     = 3,
> +     MX2_STATE_DONE       = 4,
> +     MX2_STATE_ERROR      = 5,
> +     MX2_STATE_IDLE       = 6,

Are the numerical values important? If not - please, drop. And actually, 
you don't need most of these states, I wouldn't be surprised, if you 
didn't need them at all. You might want to revise them in a future patch.

[snip]

> @@ -467,59 +479,47 @@ static irqreturn_t mx25_camera_irq(int irq_csi, void 
> *data)
>  /*
>   *  Videobuf operations
>   */
> -static int mx2_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
> -                           unsigned int *size)
> +static int mx2_videobuf_setup(struct vb2_queue *vq,
> +                     const struct v4l2_format *fmt,
> +                     unsigned int *count, unsigned int *num_planes,
> +                     unsigned int sizes[], void *alloc_ctxs[])
>  {
> -     struct soc_camera_device *icd = vq->priv_data;
> +     struct soc_camera_device *icd = soc_camera_from_vb2q(vq);
> +     struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
> +     struct mx2_camera_dev *pcdev = ici->priv;
>       int bytes_per_line = soc_mbus_bytes_per_line(icd->user_width,
>                       icd->current_fmt->host_fmt);

You choose not to support VIDIOC_CREATE_BUFS? You have to at least return 
an error if fmt != NULL. Or consider supporting it - look at mx3_camera.c 
or sh_mobile_ceu_camera.c (btw, atmel-isi.c has to be fixed with this 
respect too). If you decide to support it, you'll also have to drop 
.buf_prepare() (see, e.g., 07f92448045a23d27dbc3ece3abcb6bafc618d43)

[snip]

> @@ -529,46 +529,34 @@ static int mx2_videobuf_prepare(struct videobuf_queue 
> *vq,
>        * This can be useful if you want to see if we actually fill
>        * the buffer with something
>        */
> -     memset((void *)vb->baddr, 0xaa, vb->bsize);
> +     memset((void *)vb2_plane_vaddr(vb, 0),
> +            0xaa, vb2_get_plane_payload(vb, 0));
>  #endif
>  
> -     if (buf->code   != icd->current_fmt->code ||
> -         vb->width   != icd->user_width ||
> -         vb->height  != icd->user_height ||
> -         vb->field   != field) {
> +     if (buf->code   != icd->current_fmt->code) {
>               buf->code       = icd->current_fmt->code;
> -             vb->width       = icd->user_width;
> -             vb->height      = icd->user_height;
> -             vb->field       = field;
> -             vb->state       = VIDEOBUF_NEEDS_INIT;
> +             buf->state      = MX2_STATE_NEEDS_INIT;

This looks broken or most likely redundant to me. The check for a changed 
code was there to reallocate the buffer, doesn't seem to make much sense 
now.

[snip]

> @@ -686,10 +673,10 @@ static void mx2_videobuf_release(struct videobuf_queue 
> *vq,
>        * types.
>        */
>       spin_lock_irqsave(&pcdev->lock, flags);
> -     if (vb->state == VIDEOBUF_QUEUED) {
> -             list_del(&vb->queue);
> -             vb->state = VIDEOBUF_ERROR;
> -     } else if (cpu_is_mx25() && vb->state == VIDEOBUF_ACTIVE) {
> +     if (buf->state == MX2_STATE_QUEUED || buf->state == MX2_STATE_ACTIVE) {
> +             list_del_init(&buf->queue);
> +             buf->state = MX2_STATE_NEEDS_INIT;
> +     } else if (cpu_is_mx25() && buf->state == MX2_STATE_ACTIVE) {

This doesn't look right. You already have " || buf->state == 
MX2_STATE_ACTIVE" above, so, this latter condition is never entered?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to