From 20caa3607c972f5c28b3e9aceb0b8a1d2094c0a7 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 24 Mar 2020 23:13:02 +0200 Subject: [PATCH] media: bcm2835-unicam: Add support for the FRAME_SYNC event The FRAME_SYNC event is useful for userspace image processing algorithms to program the camera sensor as early as possible after frame start. Support it. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham Reviewed-by: Jacopo Mondi Reviewed-by: Naushir Patuck --- drivers/media/platform/bcm2835/bcm2835-unicam.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) --- a/drivers/media/platform/bcm2835/bcm2835-unicam.c +++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c @@ -772,6 +772,16 @@ static int unicam_all_nodes_disabled(str !dev->node[METADATA_PAD].streaming; } +static void unicam_queue_event_sof(struct unicam_device *unicam) +{ + struct v4l2_event event = { + .type = V4L2_EVENT_FRAME_SYNC, + .u.frame_sync.frame_sequence = unicam->sequence, + }; + + v4l2_event_queue(&unicam->node[IMAGE_PAD].video_dev, &event); +} + /* * unicam_isr : ISR handler for unicam capture * @irq: irq number @@ -853,6 +863,8 @@ static irqreturn_t unicam_isr(int irq, v */ unicam_schedule_dummy_buffer(&unicam->node[i]); } + + unicam_queue_event_sof(unicam); } /* * Cannot swap buffer at frame end, there may be a race condition @@ -2022,6 +2034,8 @@ static int unicam_subscribe_event(struct const struct v4l2_event_subscription *sub) { switch (sub->type) { + case V4L2_EVENT_FRAME_SYNC: + return v4l2_event_subscribe(fh, sub, 2, NULL); case V4L2_EVENT_SOURCE_CHANGE: return v4l2_event_subscribe(fh, sub, 4, NULL); }