]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/media/v4l2-dev.h
ad62d322e1781d091eaf6294081182fb86596630
[linux-2.6-omap-h63xx.git] / include / media / v4l2-dev.h
1 /*
2  *
3  *      V 4 L 2   D R I V E R   H E L P E R   A P I
4  *
5  * Moved from videodev2.h
6  *
7  *      Some commonly needed functions for drivers (v4l2-common.o module)
8  */
9 #ifndef _V4L2_DEV_H
10 #define _V4L2_DEV_H
11
12 #define OBSOLETE_OWNER   1 /* to be removed soon */
13 #define OBSOLETE_DEVDATA 1 /* to be removed soon */
14
15 #include <linux/poll.h>
16 #include <linux/fs.h>
17 #include <linux/device.h>
18 #include <linux/mutex.h>
19 #include <linux/compiler.h> /* need __user */
20 #ifdef CONFIG_VIDEO_V4L1_COMPAT
21 #include <linux/videodev.h>
22 #else
23 #include <linux/videodev2.h>
24 #endif
25
26 #define VIDEO_MAJOR     81
27 /* Minor device allocation */
28 #define MINOR_VFL_TYPE_GRABBER_MIN   0
29 #define MINOR_VFL_TYPE_GRABBER_MAX  63
30 #define MINOR_VFL_TYPE_RADIO_MIN    64
31 #define MINOR_VFL_TYPE_RADIO_MAX   127
32 #define MINOR_VFL_TYPE_VTX_MIN     192
33 #define MINOR_VFL_TYPE_VTX_MAX     223
34 #define MINOR_VFL_TYPE_VBI_MIN     224
35 #define MINOR_VFL_TYPE_VBI_MAX     255
36
37 #define VFL_TYPE_GRABBER        0
38 #define VFL_TYPE_VBI            1
39 #define VFL_TYPE_RADIO          2
40 #define VFL_TYPE_VTX            3
41
42 /*
43  * Newer version of video_device, handled by videodev2.c
44  *      This version moves redundant code from video device code to
45  *      the common handler
46  */
47
48 struct video_device
49 {
50         /* device ops */
51         const struct file_operations *fops;
52
53         /* sysfs */
54         struct device dev;              /* v4l device */
55         struct device *parent;          /* device parent */
56
57         /* device info */
58         char name[32];
59         int type;                       /* v4l1 */
60         int type2;                      /* v4l2 */
61         int minor;
62         /* attribute to diferentiate multiple indexs on one physical device */
63         int index;
64
65         int debug;                      /* Activates debug level*/
66
67         /* Video standard vars */
68         v4l2_std_id tvnorms;            /* Supported tv norms */
69         v4l2_std_id current_norm;       /* Current tvnorm */
70
71         /* callbacks */
72         void (*release)(struct video_device *vfd);
73
74         /* ioctl callbacks */
75
76         /* VIDIOC_QUERYCAP handler */
77         int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
78
79         /* Priority handling */
80         int (*vidioc_g_priority)   (struct file *file, void *fh,
81                                     enum v4l2_priority *p);
82         int (*vidioc_s_priority)   (struct file *file, void *fh,
83                                     enum v4l2_priority p);
84
85         /* VIDIOC_ENUM_FMT handlers */
86         int (*vidioc_enum_fmt_vid_cap)     (struct file *file, void *fh,
87                                             struct v4l2_fmtdesc *f);
88         int (*vidioc_enum_fmt_vid_overlay) (struct file *file, void *fh,
89                                             struct v4l2_fmtdesc *f);
90         int (*vidioc_enum_fmt_vid_out)     (struct file *file, void *fh,
91                                             struct v4l2_fmtdesc *f);
92 #if 1
93         /* deprecated, will be removed in 2.6.28 */
94         int (*vidioc_enum_fmt_vbi_cap)     (struct file *file, void *fh,
95                                             struct v4l2_fmtdesc *f);
96 #endif
97         int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
98                                             struct v4l2_fmtdesc *f);
99
100         /* VIDIOC_G_FMT handlers */
101         int (*vidioc_g_fmt_vid_cap)    (struct file *file, void *fh,
102                                         struct v4l2_format *f);
103         int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh,
104                                         struct v4l2_format *f);
105         int (*vidioc_g_fmt_vid_out)    (struct file *file, void *fh,
106                                         struct v4l2_format *f);
107         int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh,
108                                         struct v4l2_format *f);
109         int (*vidioc_g_fmt_vbi_cap)    (struct file *file, void *fh,
110                                         struct v4l2_format *f);
111         int (*vidioc_g_fmt_vbi_out)    (struct file *file, void *fh,
112                                         struct v4l2_format *f);
113         int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh,
114                                         struct v4l2_format *f);
115         int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh,
116                                         struct v4l2_format *f);
117         int (*vidioc_g_fmt_type_private)(struct file *file, void *fh,
118                                         struct v4l2_format *f);
119
120         /* VIDIOC_S_FMT handlers */
121         int (*vidioc_s_fmt_vid_cap)    (struct file *file, void *fh,
122                                         struct v4l2_format *f);
123         int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh,
124                                         struct v4l2_format *f);
125         int (*vidioc_s_fmt_vid_out)    (struct file *file, void *fh,
126                                         struct v4l2_format *f);
127         int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh,
128                                         struct v4l2_format *f);
129         int (*vidioc_s_fmt_vbi_cap)    (struct file *file, void *fh,
130                                         struct v4l2_format *f);
131         int (*vidioc_s_fmt_vbi_out)    (struct file *file, void *fh,
132                                         struct v4l2_format *f);
133         int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh,
134                                         struct v4l2_format *f);
135         int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh,
136                                         struct v4l2_format *f);
137         int (*vidioc_s_fmt_type_private)(struct file *file, void *fh,
138                                         struct v4l2_format *f);
139
140         /* VIDIOC_TRY_FMT handlers */
141         int (*vidioc_try_fmt_vid_cap)    (struct file *file, void *fh,
142                                           struct v4l2_format *f);
143         int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh,
144                                           struct v4l2_format *f);
145         int (*vidioc_try_fmt_vid_out)    (struct file *file, void *fh,
146                                           struct v4l2_format *f);
147         int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh,
148                                           struct v4l2_format *f);
149         int (*vidioc_try_fmt_vbi_cap)    (struct file *file, void *fh,
150                                           struct v4l2_format *f);
151         int (*vidioc_try_fmt_vbi_out)    (struct file *file, void *fh,
152                                           struct v4l2_format *f);
153         int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh,
154                                           struct v4l2_format *f);
155         int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh,
156                                           struct v4l2_format *f);
157         int (*vidioc_try_fmt_type_private)(struct file *file, void *fh,
158                                           struct v4l2_format *f);
159
160         /* Buffer handlers */
161         int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b);
162         int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b);
163         int (*vidioc_qbuf)    (struct file *file, void *fh, struct v4l2_buffer *b);
164         int (*vidioc_dqbuf)   (struct file *file, void *fh, struct v4l2_buffer *b);
165
166
167         int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
168 #ifdef CONFIG_VIDEO_V4L1_COMPAT
169                         /* buffer type is struct vidio_mbuf * */
170         int (*vidiocgmbuf)  (struct file *file, void *fh, struct video_mbuf *p);
171 #endif
172         int (*vidioc_g_fbuf)   (struct file *file, void *fh,
173                                 struct v4l2_framebuffer *a);
174         int (*vidioc_s_fbuf)   (struct file *file, void *fh,
175                                 struct v4l2_framebuffer *a);
176
177                 /* Stream on/off */
178         int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i);
179         int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
180
181                 /* Standard handling
182                         ENUMSTD is handled by videodev.c
183                  */
184         int (*vidioc_g_std) (struct file *file, void *fh, v4l2_std_id *norm);
185         int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
186         int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);
187
188                 /* Input handling */
189         int (*vidioc_enum_input)(struct file *file, void *fh,
190                                  struct v4l2_input *inp);
191         int (*vidioc_g_input)   (struct file *file, void *fh, unsigned int *i);
192         int (*vidioc_s_input)   (struct file *file, void *fh, unsigned int i);
193
194                 /* Output handling */
195         int (*vidioc_enum_output) (struct file *file, void *fh,
196                                   struct v4l2_output *a);
197         int (*vidioc_g_output)   (struct file *file, void *fh, unsigned int *i);
198         int (*vidioc_s_output)   (struct file *file, void *fh, unsigned int i);
199
200                 /* Control handling */
201         int (*vidioc_queryctrl)        (struct file *file, void *fh,
202                                         struct v4l2_queryctrl *a);
203         int (*vidioc_g_ctrl)           (struct file *file, void *fh,
204                                         struct v4l2_control *a);
205         int (*vidioc_s_ctrl)           (struct file *file, void *fh,
206                                         struct v4l2_control *a);
207         int (*vidioc_g_ext_ctrls)      (struct file *file, void *fh,
208                                         struct v4l2_ext_controls *a);
209         int (*vidioc_s_ext_ctrls)      (struct file *file, void *fh,
210                                         struct v4l2_ext_controls *a);
211         int (*vidioc_try_ext_ctrls)    (struct file *file, void *fh,
212                                         struct v4l2_ext_controls *a);
213         int (*vidioc_querymenu)        (struct file *file, void *fh,
214                                         struct v4l2_querymenu *a);
215
216         /* Audio ioctls */
217         int (*vidioc_enumaudio)        (struct file *file, void *fh,
218                                         struct v4l2_audio *a);
219         int (*vidioc_g_audio)          (struct file *file, void *fh,
220                                         struct v4l2_audio *a);
221         int (*vidioc_s_audio)          (struct file *file, void *fh,
222                                         struct v4l2_audio *a);
223
224         /* Audio out ioctls */
225         int (*vidioc_enumaudout)       (struct file *file, void *fh,
226                                         struct v4l2_audioout *a);
227         int (*vidioc_g_audout)         (struct file *file, void *fh,
228                                         struct v4l2_audioout *a);
229         int (*vidioc_s_audout)         (struct file *file, void *fh,
230                                         struct v4l2_audioout *a);
231         int (*vidioc_g_modulator)      (struct file *file, void *fh,
232                                         struct v4l2_modulator *a);
233         int (*vidioc_s_modulator)      (struct file *file, void *fh,
234                                         struct v4l2_modulator *a);
235         /* Crop ioctls */
236         int (*vidioc_cropcap)          (struct file *file, void *fh,
237                                         struct v4l2_cropcap *a);
238         int (*vidioc_g_crop)           (struct file *file, void *fh,
239                                         struct v4l2_crop *a);
240         int (*vidioc_s_crop)           (struct file *file, void *fh,
241                                         struct v4l2_crop *a);
242         /* Compression ioctls */
243         int (*vidioc_g_jpegcomp)       (struct file *file, void *fh,
244                                         struct v4l2_jpegcompression *a);
245         int (*vidioc_s_jpegcomp)       (struct file *file, void *fh,
246                                         struct v4l2_jpegcompression *a);
247         int (*vidioc_g_enc_index)      (struct file *file, void *fh,
248                                         struct v4l2_enc_idx *a);
249         int (*vidioc_encoder_cmd)      (struct file *file, void *fh,
250                                         struct v4l2_encoder_cmd *a);
251         int (*vidioc_try_encoder_cmd)  (struct file *file, void *fh,
252                                         struct v4l2_encoder_cmd *a);
253
254         /* Stream type-dependent parameter ioctls */
255         int (*vidioc_g_parm)           (struct file *file, void *fh,
256                                         struct v4l2_streamparm *a);
257         int (*vidioc_s_parm)           (struct file *file, void *fh,
258                                         struct v4l2_streamparm *a);
259
260         /* Tuner ioctls */
261         int (*vidioc_g_tuner)          (struct file *file, void *fh,
262                                         struct v4l2_tuner *a);
263         int (*vidioc_s_tuner)          (struct file *file, void *fh,
264                                         struct v4l2_tuner *a);
265         int (*vidioc_g_frequency)      (struct file *file, void *fh,
266                                         struct v4l2_frequency *a);
267         int (*vidioc_s_frequency)      (struct file *file, void *fh,
268                                         struct v4l2_frequency *a);
269
270         /* Sliced VBI cap */
271         int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh,
272                                         struct v4l2_sliced_vbi_cap *a);
273
274         /* Log status ioctl */
275         int (*vidioc_log_status)       (struct file *file, void *fh);
276
277         int (*vidioc_s_hw_freq_seek)   (struct file *file, void *fh,
278                                         struct v4l2_hw_freq_seek *a);
279
280         /* Debugging ioctls */
281 #ifdef CONFIG_VIDEO_ADV_DEBUG
282         int (*vidioc_g_register)       (struct file *file, void *fh,
283                                         struct v4l2_register *reg);
284         int (*vidioc_s_register)       (struct file *file, void *fh,
285                                         struct v4l2_register *reg);
286 #endif
287         int (*vidioc_g_chip_ident)     (struct file *file, void *fh,
288                                         struct v4l2_chip_ident *chip);
289
290         /* For other private ioctls */
291         int (*vidioc_default)          (struct file *file, void *fh,
292                                         int cmd, void *arg);
293
294
295 #ifdef OBSOLETE_OWNER /* to be removed soon */
296 /* obsolete -- fops->owner is used instead */
297 struct module *owner;
298 /* dev->driver_data will be used instead some day.
299         * Use the video_{get|set}_drvdata() helper functions,
300         * so the switch over will be transparent for you.
301         * Or use {pci|usb}_{get|set}_drvdata() directly. */
302 void *priv;
303 #endif
304
305         /* for videodev.c intenal usage -- please don't touch */
306         int users;                     /* video_exclusive_{open|close} ... */
307         struct mutex lock;             /* ... helper function uses these   */
308 };
309
310 /* Class-dev to video-device */
311 #define to_video_device(cd) container_of(cd, struct video_device, dev)
312
313 /* Version 2 functions */
314 extern int video_register_device(struct video_device *vfd, int type, int nr);
315 int video_register_device_index(struct video_device *vfd, int type, int nr,
316                                         int index);
317 void video_unregister_device(struct video_device *);
318
319 /* helper functions to alloc / release struct video_device, the
320    later can be used for video_device->release() */
321 struct video_device *video_device_alloc(void);
322 void video_device_release(struct video_device *vfd);
323
324 #ifdef CONFIG_VIDEO_V4L1_COMPAT
325 #include <linux/mm.h>
326
327 static inline int __must_check
328 video_device_create_file(struct video_device *vfd,
329                          struct device_attribute *attr)
330 {
331         int ret = device_create_file(&vfd->dev, attr);
332         if (ret < 0)
333                 printk(KERN_WARNING "%s error: %d\n", __func__, ret);
334         return ret;
335 }
336 static inline void
337 video_device_remove_file(struct video_device *vfd,
338                          struct device_attribute *attr)
339 {
340         device_remove_file(&vfd->dev, attr);
341 }
342
343 #endif /* CONFIG_VIDEO_V4L1_COMPAT */
344
345 #ifdef OBSOLETE_OWNER /* to be removed soon */
346 /* helper functions to access driver private data. */
347 static inline void *video_get_drvdata(struct video_device *dev)
348 {
349         return dev->priv;
350 }
351
352 static inline void video_set_drvdata(struct video_device *dev, void *data)
353 {
354         dev->priv = data;
355 }
356
357 #endif
358
359 #ifdef OBSOLETE_DEVDATA /* to be removed soon */
360 /* Obsolete stuff - Still needed for radio devices and obsolete drivers */
361 extern struct video_device* video_devdata(struct file*);
362 extern int video_exclusive_open(struct inode *inode, struct file *file);
363 extern int video_exclusive_release(struct inode *inode, struct file *file);
364 #endif
365
366 #endif /* _V4L2_DEV_H */