diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0679-media-bcm2835-unicam-Forward-input-status-from-subde.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.10/950-0679-media-bcm2835-unicam-Forward-input-status-from-subde.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0679-media-bcm2835-unicam-Forward-input-status-from-subde.patch b/target/linux/bcm27xx/patches-5.10/950-0679-media-bcm2835-unicam-Forward-input-status-from-subde.patch new file mode 100644 index 0000000000..9a6ed6a7fb --- /dev/null +++ b/target/linux/bcm27xx/patches-5.10/950-0679-media-bcm2835-unicam-Forward-input-status-from-subde.patch @@ -0,0 +1,53 @@ +From bfe4361859005edec5e7ae73274c363910f56d7f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= <linuxtardis@gmail.com> +Date: Wed, 7 Jul 2021 22:48:20 +0200 +Subject: [PATCH] media: bcm2835-unicam: Forward input status from + 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 +@@ -1806,6 +1806,7 @@ static int unicam_enum_input(struct file + { + struct unicam_node *node = video_drvdata(file); + struct unicam_device *dev = node->dev; ++ int ret; + + if (inp->index != 0) + return -EINVAL; +@@ -1822,6 +1823,14 @@ static int unicam_enum_input(struct file + 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; + } |