1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter.git synced 2025-02-15 04:42:02 +00:00
openmptcprouter/root/target/linux/bcm27xx/patches-5.15/950-0426-media-bcm2835-unicam-Forward-input-status-from-subde.patch

54 lines
1.8 KiB
Diff
Raw Normal View History

2022-04-22 15:00:47 +00:00
From 72d8cfb2a24d07b0d0ee25a30f7074d88cc4cf39 Mon Sep 17 00:00:00 2001
2021-11-24 17:32:01 +00:00
From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= <linuxtardis@gmail.com>
Date: Wed, 7 Jul 2021 22:48:20 +0200
2022-04-22 15:00:47 +00:00
Subject: [PATCH 426/828] media: bcm2835-unicam: Forward input status from
2021-11-24 17:32:01 +00:00
subdevice
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The vidioc_enum_input() v4l2 ioctl is capable of returning
sensor/input status as well. This is used in current
GStreamer HEAD for signal detection [1].
bcm2835-unicam does handle this syscall, but it didn't ask
the subdevice driver about the input status. The input then
appeared as always present.
This commit adds the necessary query. There is a precedent for
this - the R-Car VIN V4L2 driver does a similar call [2].
[1]: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/blob/ce0be27caf69aa9d96b73bc2b50737451b6f6936/sys/v4l2/gstv4l2src.c#L553
[2]: https://github.com/raspberrypi/linux/blob/7fb9d006d3ff3baf2e205e0c85c4e4fd0a64fcd0/drivers/media/platform/rcar-vin/rcar-v4l2.c#L548
Signed-off-by: Jakub Vaněk <linuxtardis@gmail.com>
---
drivers/media/platform/bcm2835/bcm2835-unicam.c | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/drivers/media/platform/bcm2835/bcm2835-unicam.c
+++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c
2022-04-22 15:00:47 +00:00
@@ -1809,6 +1809,7 @@ static int unicam_enum_input(struct file
2021-11-24 17:32:01 +00:00
{
struct unicam_node *node = video_drvdata(file);
struct unicam_device *dev = node->dev;
+ int ret;
if (inp->index != 0)
return -EINVAL;
2022-04-22 15:00:47 +00:00
@@ -1825,6 +1826,14 @@ static int unicam_enum_input(struct file
2021-11-24 17:32:01 +00:00
inp->capabilities = 0;
inp->std = 0;
}
+
+ if (v4l2_subdev_has_op(dev->sensor, video, g_input_status)) {
+ ret = v4l2_subdev_call(dev->sensor, video, g_input_status,
+ &inp->status);
+ if (ret < 0)
+ return ret;
+ }
+
snprintf(inp->name, sizeof(inp->name), "Camera 0");
return 0;
}