1 From 20caa3607c972f5c28b3e9aceb0b8a1d2094c0a7 Mon Sep 17 00:00:00 2001
2 From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
3 Date: Tue, 24 Mar 2020 23:13:02 +0200
4 Subject: [PATCH] media: bcm2835-unicam: Add support for the FRAME_SYNC
7 The FRAME_SYNC event is useful for userspace image processing algorithms
8 to program the camera sensor as early as possible after frame start.
11 Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
12 Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
13 Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
14 Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
16 drivers/media/platform/bcm2835/bcm2835-unicam.c | 14 ++++++++++++++
17 1 file changed, 14 insertions(+)
19 --- a/drivers/media/platform/bcm2835/bcm2835-unicam.c
20 +++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c
21 @@ -772,6 +772,16 @@ static int unicam_all_nodes_disabled(str
22 !dev->node[METADATA_PAD].streaming;
25 +static void unicam_queue_event_sof(struct unicam_device *unicam)
27 + struct v4l2_event event = {
28 + .type = V4L2_EVENT_FRAME_SYNC,
29 + .u.frame_sync.frame_sequence = unicam->sequence,
32 + v4l2_event_queue(&unicam->node[IMAGE_PAD].video_dev, &event);
36 * unicam_isr : ISR handler for unicam capture
38 @@ -853,6 +863,8 @@ static irqreturn_t unicam_isr(int irq, v
40 unicam_schedule_dummy_buffer(&unicam->node[i]);
43 + unicam_queue_event_sof(unicam);
46 * Cannot swap buffer at frame end, there may be a race condition
47 @@ -2022,6 +2034,8 @@ static int unicam_subscribe_event(struct
48 const struct v4l2_event_subscription *sub)
51 + case V4L2_EVENT_FRAME_SYNC:
52 + return v4l2_event_subscribe(fh, sub, 2, NULL);
53 case V4L2_EVENT_SOURCE_CHANGE:
54 return v4l2_event_subscribe(fh, sub, 4, NULL);