]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: v4l2-dev: handle V4L2_CAP_EDID
authorErling Ljunggren <hljunggr@cisco.com>
Wed, 28 Sep 2022 11:21:47 +0000 (13:21 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 5 Sep 2024 18:10:53 +0000 (20:10 +0200)
When the V4L2_CAP_EDID capability flag is set,
ioctls for enum inputs/outputs and get/set edid are automatically set.

Signed-off-by: Erling Ljunggren <hljunggr@cisco.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Reviewed-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/v4l2-core/v4l2-dev.c

index be2ba7ca5de2058ef530efe1f840af91fd4fd0ad..570ba00e00b32177f38127830a385305ad4af6eb 100644 (file)
@@ -557,6 +557,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
        bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
        bool is_io_mc = vdev->device_caps & V4L2_CAP_IO_MC;
        bool has_streaming = vdev->device_caps & V4L2_CAP_STREAMING;
+       bool is_edid =  vdev->device_caps & V4L2_CAP_EDID;
 
        bitmap_zero(valid_ioctls, BASE_VIDIOC_PRIVATE);
 
@@ -784,6 +785,20 @@ static void determine_valid_ioctls(struct video_device *vdev)
                SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
                SET_VALID_IOCTL(ops, VIDIOC_S_HW_FREQ_SEEK, vidioc_s_hw_freq_seek);
        }
+       if (is_edid) {
+               SET_VALID_IOCTL(ops, VIDIOC_G_EDID, vidioc_g_edid);
+               if (is_tx) {
+                       SET_VALID_IOCTL(ops, VIDIOC_G_OUTPUT, vidioc_g_output);
+                       SET_VALID_IOCTL(ops, VIDIOC_S_OUTPUT, vidioc_s_output);
+                       SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output);
+               }
+               if (is_rx) {
+                       SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
+                       SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
+                       SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
+                       SET_VALID_IOCTL(ops, VIDIOC_S_EDID, vidioc_s_edid);
+               }
+       }
 
        bitmap_andnot(vdev->valid_ioctls, valid_ioctls, vdev->valid_ioctls,
                        BASE_VIDIOC_PRIVATE);