Signed-off-by: Hans Verkuil <[email protected]>
---
 drivers/media/video/v4l2-ioctl.c  |   13 +++++++++++++
 drivers/media/video/v4l2-subdev.c |    6 ++++++
 include/media/v4l2-subdev.h       |    2 ++
 3 files changed, 21 insertions(+)

diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
index d7fa896..248cc28 100644
--- a/drivers/media/video/v4l2-ioctl.c
+++ b/drivers/media/video/v4l2-ioctl.c
@@ -2169,6 +2169,19 @@ static int check_array_args(unsigned int cmd, void 
*parg, size_t *array_size,
                break;
        }
 
+       case VIDIOC_SUBDEV_G_EDID:
+       case VIDIOC_SUBDEV_S_EDID: {
+               struct v4l2_subdev_edid *edid = parg;
+
+               if (edid->blocks) {
+                       *user_ptr = (void __user *)edid->edid;
+                       *kernel_ptr = (void *)&edid->edid;
+                       *array_size = edid->blocks * 128;
+                       ret = 1;
+               }
+               break;
+       }
+
        case VIDIOC_S_EXT_CTRLS:
        case VIDIOC_G_EXT_CTRLS:
        case VIDIOC_TRY_EXT_CTRLS: {
diff --git a/drivers/media/video/v4l2-subdev.c 
b/drivers/media/video/v4l2-subdev.c
index db6e859..3d46cd6 100644
--- a/drivers/media/video/v4l2-subdev.c
+++ b/drivers/media/video/v4l2-subdev.c
@@ -348,6 +348,12 @@ static long subdev_do_ioctl(struct file *file, unsigned 
int cmd, void *arg)
                return v4l2_subdev_call(
                        sd, pad, set_selection, subdev_fh, sel);
        }
+
+       case VIDIOC_SUBDEV_G_EDID:
+               return v4l2_subdev_call(sd, pad, get_edid, arg);
+
+       case VIDIOC_SUBDEV_S_EDID:
+               return v4l2_subdev_call(sd, pad, set_edid, arg);
 #endif
        default:
                return v4l2_subdev_call(sd, core, ioctl, cmd, arg);
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index c35a354..74c578f 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -476,6 +476,8 @@ struct v4l2_subdev_pad_ops {
                             struct v4l2_subdev_selection *sel);
        int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
                             struct v4l2_subdev_selection *sel);
+       int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid);
+       int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid);
 #ifdef CONFIG_MEDIA_CONTROLLER
        int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link,
                             struct v4l2_subdev_format *source_fmt,
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to