Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] v4l2: allow v4l2_subdev_edid to be used with video nodes

Struct v4l2_subdev_edid and the VIDIOC_SUBDEV_G/S_EDID ioctls were
specific for subdevices, but for hardware with a simple video pipeline
you do not need/want to create subdevice nodes to just get/set the EDID.

Move the v4l2_subdev_edid struct to v4l2-common.h and rename as
v4l2_edid. Add the same ioctls to videodev2.h as well, thus allowing
this API to be used with both video nodes and v4l-subdev nodes.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
254a4777 bc826d6e

+15 -9
+8
include/uapi/linux/v4l2-common.h
··· 68 68 #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE V4L2_SEL_FLAG_LE 69 69 #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG 70 70 71 + struct v4l2_edid { 72 + __u32 pad; 73 + __u32 start_block; 74 + __u32 blocks; 75 + __u32 reserved[5]; 76 + __u8 __user *edid; 77 + }; 78 + 71 79 #endif /* __V4L2_COMMON__ */
+5 -9
include/uapi/linux/v4l2-subdev.h
··· 148 148 __u32 reserved[8]; 149 149 }; 150 150 151 - struct v4l2_subdev_edid { 152 - __u32 pad; 153 - __u32 start_block; 154 - __u32 blocks; 155 - __u32 reserved[5]; 156 - __u8 __user *edid; 157 - }; 151 + /* Backwards compatibility define --- to be removed */ 152 + #define v4l2_subdev_edid v4l2_edid 158 153 159 154 #define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) 160 155 #define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) ··· 169 174 _IOWR('V', 61, struct v4l2_subdev_selection) 170 175 #define VIDIOC_SUBDEV_S_SELECTION \ 171 176 _IOWR('V', 62, struct v4l2_subdev_selection) 172 - #define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_subdev_edid) 173 - #define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_subdev_edid) 177 + /* These two G/S_EDID ioctls are identical to the ioctls in videodev2.h */ 178 + #define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_edid) 179 + #define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_edid) 174 180 175 181 #endif
+2
include/uapi/linux/videodev2.h
··· 1913 1913 #define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu) 1914 1914 #define VIDIOC_G_INPUT _IOR('V', 38, int) 1915 1915 #define VIDIOC_S_INPUT _IOWR('V', 39, int) 1916 + #define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid) 1917 + #define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid) 1916 1918 #define VIDIOC_G_OUTPUT _IOR('V', 46, int) 1917 1919 #define VIDIOC_S_OUTPUT _IOWR('V', 47, int) 1918 1920 #define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output)