bcm27xx: add kernel 5.10 support
[openwrt/openwrt.git] / target / linux / bcm27xx / patches-5.10 / 950-0216-media-bcm2835-unicam-Add-support-for-the-FRAME_SYNC-.patch
1 From 6195ecf605368d29a9ef684da387a6929845f925 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
5 event
6
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.
9 Support it.
10
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>
15 ---
16 drivers/media/platform/bcm2835/bcm2835-unicam.c | 14 ++++++++++++++
17 1 file changed, 14 insertions(+)
18
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;
23 }
24
25 +static void unicam_queue_event_sof(struct unicam_device *unicam)
26 +{
27 + struct v4l2_event event = {
28 + .type = V4L2_EVENT_FRAME_SYNC,
29 + .u.frame_sync.frame_sequence = unicam->sequence,
30 + };
31 +
32 + v4l2_event_queue(&unicam->node[IMAGE_PAD].video_dev, &event);
33 +}
34 +
35 /*
36 * unicam_isr : ISR handler for unicam capture
37 * @irq: irq number
38 @@ -853,6 +863,8 @@ static irqreturn_t unicam_isr(int irq, v
39 */
40 unicam_schedule_dummy_buffer(&unicam->node[i]);
41 }
42 +
43 + unicam_queue_event_sof(unicam);
44 }
45 /*
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)
49 {
50 switch (sub->type) {
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);
55 }