Hi, On 27 January 2012 16:53, Guennadi Liakhovetski <g.liakhovetski@xxxxxx> wrote: > On Thu, 26 Jan 2012, Javier Martin wrote: > >> Add "start_stream" and "stop_stream" callback in order to enable >> and disable the eMMa-PrP properly and save CPU usage avoiding >> IRQs when the device is not streaming. This also makes the driver >> return 0 as the sequence number of the first frame. >> >> Signed-off-by: Javier Martin <javier.martin@xxxxxxxxxxxxxxxxx> >> --- >> Merge "media i.MX27 camera: properly detect frame loss" >> >> --- >> drivers/media/video/mx2_camera.c | 104 +++++++++++++++++++++++++++++--------- >> 1 files changed, 79 insertions(+), 25 deletions(-) >> >> diff --git a/drivers/media/video/mx2_camera.c b/drivers/media/video/mx2_camera.c >> index 898f98f..045c018 100644 >> --- a/drivers/media/video/mx2_camera.c >> +++ b/drivers/media/video/mx2_camera.c >> @@ -377,7 +377,7 @@ static int mx2_camera_add_device(struct soc_camera_device *icd) >> writel(pcdev->csicr1, pcdev->base_csi + CSICR1); >> >> pcdev->icd = icd; >> - pcdev->frame_count = 0; >> + pcdev->frame_count = -1; >> >> dev_info(icd->parent, "Camera driver attached to camera %d\n", >> icd->devnum); >> @@ -647,11 +647,83 @@ static void mx2_videobuf_release(struct vb2_buffer *vb) >> spin_unlock_irqrestore(&pcdev->lock, flags); >> } >> >> +static int mx2_start_streaming(struct vb2_queue *q, unsigned int count) >> +{ >> + struct soc_camera_device *icd = soc_camera_from_vb2q(q); >> + struct soc_camera_host *ici = >> + to_soc_camera_host(icd->parent); >> + struct mx2_camera_dev *pcdev = ici->priv; >> + struct mx2_fmt_cfg *prp = pcdev->emma_prp; >> + unsigned long flags; >> + int ret = 0; >> + >> + spin_lock_irqsave(&pcdev->lock, flags); >> + if (mx27_camera_emma(pcdev)) { >> + if (count < 2) { >> + ret = -EINVAL; >> + goto err; >> + } > > How about: > > if (mx27_camera_emma(pcdev)) { > unsigned long flags; > if (count < 2) > return -EINVAL; > > spin_lock_irqsave(&pcdev->lock, flags); > ... > spin_unlock_irqrestore(&pcdev->lock, flags); > } > > return 0; OK, this is definitely cleaner. I'll do it for v3. > Another point: in v1 of this patch you also removed "goto out" from > mx2_videobuf_queue(). I understand this is probably unrelated to this > patch now. Anyway, if you don't find a patch out of your 4 now, where it > logically would fit, you could either make an additional patch, or I could > do it myself, if I don't forget:-) Don't worry, I'll send a new series including that patch after this one gets merged. Regards. -- Javier Martin Vista Silicon S.L. CDTUC - FASE C - Oficina S-345 Avda de los Castros s/n 39005- Santander. Cantabria. Spain +34 942 25 32 60 www.vista-silicon.com -- 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