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