135ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/*
235ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil *
335ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil *	V 4 L 2   D R I V E R   H E L P E R   A P I
435ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil *
535ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil * Moved from videodev2.h
635ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil *
735ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil *	Some commonly needed functions for drivers (v4l2-common.o module)
835ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil */
935ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#ifndef _V4L2_IOCTL_H
1035ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#define _V4L2_IOCTL_H
1135ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
1235ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#include <linux/poll.h>
1335ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#include <linux/fs.h>
1435ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#include <linux/mutex.h>
1535ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#include <linux/compiler.h> /* need __user */
1635ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#include <linux/videodev2.h>
1735ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
18d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailusstruct v4l2_fh;
19d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus
20a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuilstruct v4l2_ioctl_ops {
21a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* ioctl callbacks */
22a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
23a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* VIDIOC_QUERYCAP handler */
24a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
25a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
26a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Priority handling */
27a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_priority)   (struct file *file, void *fh,
28a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				    enum v4l2_priority *p);
29a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_priority)   (struct file *file, void *fh,
30a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				    enum v4l2_priority p);
31a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
32a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* VIDIOC_ENUM_FMT handlers */
33a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_fmt_vid_cap)     (struct file *file, void *fh,
34a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					    struct v4l2_fmtdesc *f);
35a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_fmt_vid_overlay) (struct file *file, void *fh,
36a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					    struct v4l2_fmtdesc *f);
37a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_fmt_vid_out)     (struct file *file, void *fh,
38a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					    struct v4l2_fmtdesc *f);
39d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_enum_fmt_vid_cap_mplane)(struct file *file, void *fh,
40d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					      struct v4l2_fmtdesc *f);
41d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_enum_fmt_vid_out_mplane)(struct file *file, void *fh,
42d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					      struct v4l2_fmtdesc *f);
43a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
44a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					    struct v4l2_fmtdesc *f);
45a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
46a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* VIDIOC_G_FMT handlers */
47a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vid_cap)    (struct file *file, void *fh,
48a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
49a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh,
50a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
51a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vid_out)    (struct file *file, void *fh,
52a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
53a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh,
54a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
55a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vbi_cap)    (struct file *file, void *fh,
56a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
57a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_vbi_out)    (struct file *file, void *fh,
58a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
59a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh,
60a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
61a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh,
62a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
63d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_g_fmt_vid_cap_mplane)(struct file *file, void *fh,
64d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					   struct v4l2_format *f);
65d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_g_fmt_vid_out_mplane)(struct file *file, void *fh,
66d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					   struct v4l2_format *f);
67a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fmt_type_private)(struct file *file, void *fh,
68a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
69a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
70a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* VIDIOC_S_FMT handlers */
71a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vid_cap)    (struct file *file, void *fh,
72a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
73a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh,
74a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
75a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vid_out)    (struct file *file, void *fh,
76a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
77a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh,
78a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
79a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vbi_cap)    (struct file *file, void *fh,
80a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
81a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_vbi_out)    (struct file *file, void *fh,
82a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
83a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh,
84a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
85a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh,
86a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
87d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_s_fmt_vid_cap_mplane)(struct file *file, void *fh,
88d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					   struct v4l2_format *f);
89d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_s_fmt_vid_out_mplane)(struct file *file, void *fh,
90d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					   struct v4l2_format *f);
91a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fmt_type_private)(struct file *file, void *fh,
92a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_format *f);
93a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
94a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* VIDIOC_TRY_FMT handlers */
95a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vid_cap)    (struct file *file, void *fh,
96a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
97a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh,
98a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
99a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vid_out)    (struct file *file, void *fh,
100a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
101a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh,
102a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
103a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vbi_cap)    (struct file *file, void *fh,
104a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
105a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_vbi_out)    (struct file *file, void *fh,
106a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
107a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh,
108a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
109a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh,
110a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
111d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_try_fmt_vid_cap_mplane)(struct file *file, void *fh,
112d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					     struct v4l2_format *f);
113d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak	int (*vidioc_try_fmt_vid_out_mplane)(struct file *file, void *fh,
114d14e6d76ebf740fd0d0bd296933993a555938896Pawel Osciak					     struct v4l2_format *f);
115a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_fmt_type_private)(struct file *file, void *fh,
116a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					  struct v4l2_format *f);
117a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
118a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Buffer handlers */
119a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b);
120a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b);
121a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_qbuf)    (struct file *file, void *fh, struct v4l2_buffer *b);
122a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_dqbuf)   (struct file *file, void *fh, struct v4l2_buffer *b);
123a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
1242150158b31a3290cc883cf6dea4f5d6803b6b811Guennadi Liakhovetski	int (*vidioc_create_bufs)(struct file *file, void *fh, struct v4l2_create_buffers *b);
1252150158b31a3290cc883cf6dea4f5d6803b6b811Guennadi Liakhovetski	int (*vidioc_prepare_buf)(struct file *file, void *fh, struct v4l2_buffer *b);
126a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
127a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
128a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_fbuf)   (struct file *file, void *fh,
129a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				struct v4l2_framebuffer *a);
130a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_fbuf)   (struct file *file, void *fh,
131a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				struct v4l2_framebuffer *a);
132a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
133a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		/* Stream on/off */
134a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i);
135a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
136a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
137a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		/* Standard handling
138a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil			ENUMSTD is handled by videodev.c
139a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		 */
140a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_std) (struct file *file, void *fh, v4l2_std_id *norm);
141a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
142a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);
143a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
144a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		/* Input handling */
145a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_input)(struct file *file, void *fh,
146a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				 struct v4l2_input *inp);
147a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_input)   (struct file *file, void *fh, unsigned int *i);
148a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_input)   (struct file *file, void *fh, unsigned int i);
149a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
150a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		/* Output handling */
151a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enum_output) (struct file *file, void *fh,
152a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil				  struct v4l2_output *a);
153a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_output)   (struct file *file, void *fh, unsigned int *i);
154a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_output)   (struct file *file, void *fh, unsigned int i);
155a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
156a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil		/* Control handling */
157a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_queryctrl)        (struct file *file, void *fh,
158a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_queryctrl *a);
159a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_ctrl)           (struct file *file, void *fh,
160a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_control *a);
161a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_ctrl)           (struct file *file, void *fh,
162a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_control *a);
163a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_ext_ctrls)      (struct file *file, void *fh,
164a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_ext_controls *a);
165a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_ext_ctrls)      (struct file *file, void *fh,
166a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_ext_controls *a);
167a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_ext_ctrls)    (struct file *file, void *fh,
168a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_ext_controls *a);
169a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_querymenu)        (struct file *file, void *fh,
170a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_querymenu *a);
171a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
172a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Audio ioctls */
173a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enumaudio)        (struct file *file, void *fh,
174a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audio *a);
175a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_audio)          (struct file *file, void *fh,
176a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audio *a);
177a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_audio)          (struct file *file, void *fh,
178a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audio *a);
179a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
180a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Audio out ioctls */
181a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_enumaudout)       (struct file *file, void *fh,
182a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audioout *a);
183a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_audout)         (struct file *file, void *fh,
184a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audioout *a);
185a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_audout)         (struct file *file, void *fh,
186a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_audioout *a);
187a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_modulator)      (struct file *file, void *fh,
188a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_modulator *a);
189a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_modulator)      (struct file *file, void *fh,
190a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_modulator *a);
191a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Crop ioctls */
192a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_cropcap)          (struct file *file, void *fh,
193a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_cropcap *a);
194a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_crop)           (struct file *file, void *fh,
195a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_crop *a);
196a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_crop)           (struct file *file, void *fh,
197a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_crop *a);
1980e8caaceff160ad821c83d798fc03812cb810560Tomasz Stanislawski	int (*vidioc_g_selection)      (struct file *file, void *fh,
1990e8caaceff160ad821c83d798fc03812cb810560Tomasz Stanislawski					struct v4l2_selection *s);
2000e8caaceff160ad821c83d798fc03812cb810560Tomasz Stanislawski	int (*vidioc_s_selection)      (struct file *file, void *fh,
2010e8caaceff160ad821c83d798fc03812cb810560Tomasz Stanislawski					struct v4l2_selection *s);
202a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Compression ioctls */
203a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_jpegcomp)       (struct file *file, void *fh,
204a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_jpegcompression *a);
205a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_jpegcomp)       (struct file *file, void *fh,
206a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_jpegcompression *a);
207a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_enc_index)      (struct file *file, void *fh,
208a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_enc_idx *a);
209a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_encoder_cmd)      (struct file *file, void *fh,
210a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_encoder_cmd *a);
211a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_try_encoder_cmd)  (struct file *file, void *fh,
212a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_encoder_cmd *a);
213a45c0ad51d344dad18c6fb67304b4f87cf0ffd59Hans Verkuil	int (*vidioc_decoder_cmd)      (struct file *file, void *fh,
214a45c0ad51d344dad18c6fb67304b4f87cf0ffd59Hans Verkuil					struct v4l2_decoder_cmd *a);
215a45c0ad51d344dad18c6fb67304b4f87cf0ffd59Hans Verkuil	int (*vidioc_try_decoder_cmd)  (struct file *file, void *fh,
216a45c0ad51d344dad18c6fb67304b4f87cf0ffd59Hans Verkuil					struct v4l2_decoder_cmd *a);
217a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
218a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Stream type-dependent parameter ioctls */
219a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_parm)           (struct file *file, void *fh,
220a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_streamparm *a);
221a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_parm)           (struct file *file, void *fh,
222a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_streamparm *a);
223a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
224a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Tuner ioctls */
225a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_tuner)          (struct file *file, void *fh,
226a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_tuner *a);
227a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_tuner)          (struct file *file, void *fh,
228a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_tuner *a);
229a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_frequency)      (struct file *file, void *fh,
230a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_frequency *a);
231a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_frequency)      (struct file *file, void *fh,
232a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_frequency *a);
233a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
234a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Sliced VBI cap */
235a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh,
236a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_sliced_vbi_cap *a);
237a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
238a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Log status ioctl */
239a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_log_status)       (struct file *file, void *fh);
240a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
241a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_hw_freq_seek)   (struct file *file, void *fh,
242a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil					struct v4l2_hw_freq_seek *a);
243a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
244a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* Debugging ioctls */
245a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil#ifdef CONFIG_VIDEO_ADV_DEBUG
246a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_register)       (struct file *file, void *fh,
247aecde8b53b8ee1330a5a8206200f0d6b8845a6e0Hans Verkuil					struct v4l2_dbg_register *reg);
248a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_s_register)       (struct file *file, void *fh,
249aecde8b53b8ee1330a5a8206200f0d6b8845a6e0Hans Verkuil					struct v4l2_dbg_register *reg);
250a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil#endif
251a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	int (*vidioc_g_chip_ident)     (struct file *file, void *fh,
252aecde8b53b8ee1330a5a8206200f0d6b8845a6e0Hans Verkuil					struct v4l2_dbg_chip_ident *chip);
253a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
25474d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab	int (*vidioc_enum_framesizes)   (struct file *file, void *fh,
25574d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab					 struct v4l2_frmsizeenum *fsize);
25674d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab
25774d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab	int (*vidioc_enum_frameintervals) (struct file *file, void *fh,
25874d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab					   struct v4l2_frmivalenum *fival);
25974d83fa0241f603a4067f071a88ef8b9a7c415a0Mauro Carvalho Chehab
260b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	/* DV Timings IOCTLs */
261b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_enum_dv_presets) (struct file *file, void *fh,
262b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri				       struct v4l2_dv_enum_preset *preset);
263b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri
264b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_s_dv_preset) (struct file *file, void *fh,
265b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri				   struct v4l2_dv_preset *preset);
266b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_g_dv_preset) (struct file *file, void *fh,
267b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri				   struct v4l2_dv_preset *preset);
268b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_query_dv_preset) (struct file *file, void *fh,
269b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri					struct v4l2_dv_preset *qpreset);
270b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_s_dv_timings) (struct file *file, void *fh,
271b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri				    struct v4l2_dv_timings *timings);
272b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri	int (*vidioc_g_dv_timings) (struct file *file, void *fh,
273b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri				    struct v4l2_dv_timings *timings);
274b6456c0cfe9d94e6d2bf684e6e6c031fc0b10031Muralidharan Karicheri
275d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus	int (*vidioc_subscribe_event)  (struct v4l2_fh *fh,
276d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus					struct v4l2_event_subscription *sub);
277d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus	int (*vidioc_unsubscribe_event)(struct v4l2_fh *fh,
278d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus					struct v4l2_event_subscription *sub);
279d3d7c963562adad92e968df23c425ae964fe9ce2Sakari Ailus
280a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil	/* For other private ioctls */
281069b747931f13eda289c1d59a09ecc8162281a76Hans Verkuil	long (*vidioc_default)	       (struct file *file, void *fh,
28299cd47bc733436da282016e629eef6baa0f6047cHans Verkuil					bool valid_prio, int cmd, void *arg);
283a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil};
284a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
285a399810ca69d9d4bd30ab8c1678c7439e567f90bHans Verkuil
2862864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab/* v4l debugging and diagnostics */
2872864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab
2882864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab/* Debug bitmask flags to be used on V4L2 */
2892864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab#define V4L2_DEBUG_IOCTL     0x01
2902864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab#define V4L2_DEBUG_IOCTL_ARG 0x02
2912864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab
2922864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab/* Use this macro for non-I2C drivers. Pass the driver name as the first arg. */
2932864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab#define v4l_print_ioctl(name, cmd)  		 \
2942864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab	do {  					 \
2952864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab		printk(KERN_DEBUG "%s: ", name); \
2962864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab		v4l_printk_ioctl(cmd);		 \
2972864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab	} while (0)
2982864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab
2992864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab/* Use this macro in I2C drivers where 'client' is the struct i2c_client
3002864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab   pointer */
3012864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab#define v4l_i2c_print_ioctl(client, cmd) 		   \
3022864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab	do {      					   \
3032864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab		v4l_client_printk(KERN_DEBUG, client, ""); \
3042864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab		v4l_printk_ioctl(cmd);			   \
3052864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab	} while (0)
3062864462eaf027ff10c1df1ce57d3518332e9083cMauro Carvalho Chehab
30735ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/*  Video standard functions  */
30835ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuilextern const char *v4l2_norm_to_name(v4l2_std_id id);
30951f0b8d57af501624ee55e8ca15d09d5bdc2b0ddTrent Piephoextern void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod);
31035ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuilextern int v4l2_video_std_construct(struct v4l2_standard *vs,
31135ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil				    int id, const char *name);
31235ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/* Prints the ioctl in a human-readable format */
31335ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuilextern void v4l_printk_ioctl(unsigned int cmd);
31435ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
31535ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/* names for fancy debug output */
31635ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuilextern const char *v4l2_field_names[];
31735ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuilextern const char *v4l2_type_names[];
31835ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
319bec43661b1dc0075b7445223ba775674133b164dHans Verkuil#ifdef CONFIG_COMPAT
32035ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/* 32 Bits compatibility layer for 64 bits processors */
3219bb7cde793f0637cfbdd21c04050ffcef33a5624Hans Verkuilextern long v4l2_compat_ioctl32(struct file *file, unsigned int cmd,
32235ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil				unsigned long arg);
323bec43661b1dc0075b7445223ba775674133b164dHans Verkuil#endif
32435ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
32508af245de0cf6ab5f4ed008ee2bb99273774fce0Hans Verkuiltypedef long (*v4l2_kioctl)(struct file *file,
32608af245de0cf6ab5f4ed008ee2bb99273774fce0Hans Verkuil		unsigned int cmd, void *arg);
32708af245de0cf6ab5f4ed008ee2bb99273774fce0Hans Verkuil
32835ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil/* Include support for obsoleted stuff */
329069b747931f13eda289c1d59a09ecc8162281a76Hans Verkuilextern long video_usercopy(struct file *file, unsigned int cmd,
330f473bf76c71ca734a16f9331ce6b6e9603641888Hans Verkuil				unsigned long arg, v4l2_kioctl func);
33135ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil
3328a522c916d3c3b29a38bd3c8fc3df826d22a9444Mauro Carvalho Chehab/* Standard handlers for V4L ioctl's */
333069b747931f13eda289c1d59a09ecc8162281a76Hans Verkuilextern long video_ioctl2(struct file *file,
3348a522c916d3c3b29a38bd3c8fc3df826d22a9444Mauro Carvalho Chehab			unsigned int cmd, unsigned long arg);
3358a522c916d3c3b29a38bd3c8fc3df826d22a9444Mauro Carvalho Chehab
33635ea11ff84719b1bfab2909903a9640a86552fd1Hans Verkuil#endif /* _V4L2_IOCTL_H */
337