OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [media/] [v4l2-dev.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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
/*  Video standard functions  */
43
extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
44
extern char *v4l2_norm_to_name(v4l2_std_id id);
45
extern int v4l2_video_std_construct(struct v4l2_standard *vs,
46
                                    int id, char *name);
47
 
48
/* prority handling */
49
struct v4l2_prio_state {
50
        atomic_t prios[4];
51
};
52
int v4l2_prio_init(struct v4l2_prio_state *global);
53
int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
54
                     enum v4l2_priority new);
55
int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
56
int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
57
enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
58
int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
59
 
60
/* names for fancy debug output */
61
extern char *v4l2_field_names[];
62
extern char *v4l2_type_names[];
63
 
64
/*  Compatibility layer interface  --  v4l1-compat module */
65
typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
66
                           unsigned int cmd, void *arg);
67
#ifdef CONFIG_VIDEO_V4L1_COMPAT
68
int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
69
                               int cmd, void *arg, v4l2_kioctl driver_ioctl);
70
#else
71
#define v4l_compat_translate_ioctl(inode,file,cmd,arg,ioctl) -EINVAL
72
#endif
73
 
74
/* 32 Bits compatibility layer for 64 bits processors */
75
extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd,
76
                                unsigned long arg);
77
 
78
/*
79
 * Newer version of video_device, handled by videodev2.c
80
 *      This version moves redundant code from video device code to
81
 *      the common handler
82
 */
83
 
84
struct video_device
85
{
86
        /* device ops */
87
        const struct file_operations *fops;
88
 
89
        /* sysfs */
90
        struct device class_dev;        /* v4l device */
91
        struct device *dev;             /* device parent */
92
 
93
        /* device info */
94
        char name[32];
95
        int type;       /* v4l1 */
96
        int type2;      /* v4l2 */
97
        int minor;
98
 
99
        int debug;      /* Activates debug level*/
100
 
101
        /* Video standard vars */
102
        v4l2_std_id tvnorms;            /* Supported tv norms */
103
        v4l2_std_id current_norm;       /* Current tvnorm */
104
 
105
        /* callbacks */
106
        void (*release)(struct video_device *vfd);
107
 
108
        /* ioctl callbacks */
109
 
110
        /* VIDIOC_QUERYCAP handler */
111
        int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
112
 
113
        /* Priority handling */
114
        int (*vidioc_g_priority)   (struct file *file, void *fh,
115
                                    enum v4l2_priority *p);
116
        int (*vidioc_s_priority)   (struct file *file, void *fh,
117
                                    enum v4l2_priority p);
118
 
119
        /* VIDIOC_ENUM_FMT handlers */
120
        int (*vidioc_enum_fmt_cap)         (struct file *file, void *fh,
121
                                            struct v4l2_fmtdesc *f);
122
        int (*vidioc_enum_fmt_overlay)     (struct file *file, void *fh,
123
                                            struct v4l2_fmtdesc *f);
124
        int (*vidioc_enum_fmt_vbi)         (struct file *file, void *fh,
125
                                            struct v4l2_fmtdesc *f);
126
        int (*vidioc_enum_fmt_vbi_capture) (struct file *file, void *fh,
127
                                            struct v4l2_fmtdesc *f);
128
        int (*vidioc_enum_fmt_video_output)(struct file *file, void *fh,
129
                                            struct v4l2_fmtdesc *f);
130
        int (*vidioc_enum_fmt_output_overlay) (struct file *file, void *fh,
131
                                            struct v4l2_fmtdesc *f);
132
        int (*vidioc_enum_fmt_vbi_output)  (struct file *file, void *fh,
133
                                            struct v4l2_fmtdesc *f);
134
        int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
135
                                            struct v4l2_fmtdesc *f);
136
 
137
        /* VIDIOC_G_FMT handlers */
138
        int (*vidioc_g_fmt_cap)        (struct file *file, void *fh,
139
                                        struct v4l2_format *f);
140
        int (*vidioc_g_fmt_overlay)    (struct file *file, void *fh,
141
                                        struct v4l2_format *f);
142
        int (*vidioc_g_fmt_vbi)        (struct file *file, void *fh,
143
                                        struct v4l2_format *f);
144
        int (*vidioc_g_fmt_vbi_output) (struct file *file, void *fh,
145
                                        struct v4l2_format *f);
146
        int (*vidioc_g_fmt_vbi_capture)(struct file *file, void *fh,
147
                                        struct v4l2_format *f);
148
        int (*vidioc_g_fmt_video_output)(struct file *file, void *fh,
149
                                        struct v4l2_format *f);
150
        int (*vidioc_g_fmt_output_overlay) (struct file *file, void *fh,
151
                                        struct v4l2_format *f);
152
        int (*vidioc_g_fmt_type_private)(struct file *file, void *fh,
153
                                        struct v4l2_format *f);
154
 
155
        /* VIDIOC_S_FMT handlers */
156
        int (*vidioc_s_fmt_cap)        (struct file *file, void *fh,
157
                                        struct v4l2_format *f);
158
 
159
        int (*vidioc_s_fmt_overlay)    (struct file *file, void *fh,
160
                                        struct v4l2_format *f);
161
        int (*vidioc_s_fmt_vbi)        (struct file *file, void *fh,
162
                                        struct v4l2_format *f);
163
        int (*vidioc_s_fmt_vbi_output) (struct file *file, void *fh,
164
                                        struct v4l2_format *f);
165
        int (*vidioc_s_fmt_vbi_capture)(struct file *file, void *fh,
166
                                        struct v4l2_format *f);
167
        int (*vidioc_s_fmt_video_output)(struct file *file, void *fh,
168
                                        struct v4l2_format *f);
169
        int (*vidioc_s_fmt_output_overlay) (struct file *file, void *fh,
170
                                        struct v4l2_format *f);
171
        int (*vidioc_s_fmt_type_private)(struct file *file, void *fh,
172
                                        struct v4l2_format *f);
173
 
174
        /* VIDIOC_TRY_FMT handlers */
175
        int (*vidioc_try_fmt_cap)        (struct file *file, void *fh,
176
                                          struct v4l2_format *f);
177
        int (*vidioc_try_fmt_overlay)    (struct file *file, void *fh,
178
                                          struct v4l2_format *f);
179
        int (*vidioc_try_fmt_vbi)        (struct file *file, void *fh,
180
                                          struct v4l2_format *f);
181
        int (*vidioc_try_fmt_vbi_output) (struct file *file, void *fh,
182
                                          struct v4l2_format *f);
183
        int (*vidioc_try_fmt_vbi_capture)(struct file *file, void *fh,
184
                                          struct v4l2_format *f);
185
        int (*vidioc_try_fmt_video_output)(struct file *file, void *fh,
186
                                          struct v4l2_format *f);
187
        int (*vidioc_try_fmt_output_overlay)(struct file *file, void *fh,
188
                                          struct v4l2_format *f);
189
        int (*vidioc_try_fmt_type_private)(struct file *file, void *fh,
190
                                          struct v4l2_format *f);
191
 
192
        /* Buffer handlers */
193
        int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b);
194
        int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b);
195
        int (*vidioc_qbuf)    (struct file *file, void *fh, struct v4l2_buffer *b);
196
        int (*vidioc_dqbuf)   (struct file *file, void *fh, struct v4l2_buffer *b);
197
 
198
 
199
        int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
200
#ifdef CONFIG_VIDEO_V4L1_COMPAT
201
                        /* buffer type is struct vidio_mbuf * */
202
        int (*vidiocgmbuf)  (struct file *file, void *fh, struct video_mbuf *p);
203
#endif
204
        int (*vidioc_g_fbuf)   (struct file *file, void *fh,
205
                                struct v4l2_framebuffer *a);
206
        int (*vidioc_s_fbuf)   (struct file *file, void *fh,
207
                                struct v4l2_framebuffer *a);
208
 
209
                /* Stream on/off */
210
        int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i);
211
        int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
212
 
213
                /* Standard handling
214
                        G_STD and ENUMSTD are handled by videodev.c
215
                 */
216
        int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
217
        int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);
218
 
219
                /* Input handling */
220
        int (*vidioc_enum_input)(struct file *file, void *fh,
221
                                 struct v4l2_input *inp);
222
        int (*vidioc_g_input)   (struct file *file, void *fh, unsigned int *i);
223
        int (*vidioc_s_input)   (struct file *file, void *fh, unsigned int i);
224
 
225
                /* Output handling */
226
        int (*vidioc_enumoutput) (struct file *file, void *fh,
227
                                  struct v4l2_output *a);
228
        int (*vidioc_g_output)   (struct file *file, void *fh, unsigned int *i);
229
        int (*vidioc_s_output)   (struct file *file, void *fh, unsigned int i);
230
 
231
                /* Control handling */
232
        int (*vidioc_queryctrl)        (struct file *file, void *fh,
233
                                        struct v4l2_queryctrl *a);
234
        int (*vidioc_g_ctrl)           (struct file *file, void *fh,
235
                                        struct v4l2_control *a);
236
        int (*vidioc_s_ctrl)           (struct file *file, void *fh,
237
                                        struct v4l2_control *a);
238
        int (*vidioc_g_ext_ctrls)      (struct file *file, void *fh,
239
                                        struct v4l2_ext_controls *a);
240
        int (*vidioc_s_ext_ctrls)      (struct file *file, void *fh,
241
                                        struct v4l2_ext_controls *a);
242
        int (*vidioc_try_ext_ctrls)    (struct file *file, void *fh,
243
                                        struct v4l2_ext_controls *a);
244
        int (*vidioc_querymenu)        (struct file *file, void *fh,
245
                                        struct v4l2_querymenu *a);
246
 
247
        /* Audio ioctls */
248
        int (*vidioc_enumaudio)        (struct file *file, void *fh,
249
                                        struct v4l2_audio *a);
250
        int (*vidioc_g_audio)          (struct file *file, void *fh,
251
                                        struct v4l2_audio *a);
252
        int (*vidioc_s_audio)          (struct file *file, void *fh,
253
                                        struct v4l2_audio *a);
254
 
255
        /* Audio out ioctls */
256
        int (*vidioc_enumaudout)       (struct file *file, void *fh,
257
                                        struct v4l2_audioout *a);
258
        int (*vidioc_g_audout)         (struct file *file, void *fh,
259
                                        struct v4l2_audioout *a);
260
        int (*vidioc_s_audout)         (struct file *file, void *fh,
261
                                        struct v4l2_audioout *a);
262
        int (*vidioc_g_modulator)      (struct file *file, void *fh,
263
                                        struct v4l2_modulator *a);
264
        int (*vidioc_s_modulator)      (struct file *file, void *fh,
265
                                        struct v4l2_modulator *a);
266
        /* Crop ioctls */
267
        int (*vidioc_cropcap)          (struct file *file, void *fh,
268
                                        struct v4l2_cropcap *a);
269
        int (*vidioc_g_crop)           (struct file *file, void *fh,
270
                                        struct v4l2_crop *a);
271
        int (*vidioc_s_crop)           (struct file *file, void *fh,
272
                                        struct v4l2_crop *a);
273
        /* Compression ioctls */
274
        int (*vidioc_g_jpegcomp)       (struct file *file, void *fh,
275
                                        struct v4l2_jpegcompression *a);
276
        int (*vidioc_s_jpegcomp)       (struct file *file, void *fh,
277
                                        struct v4l2_jpegcompression *a);
278
        int (*vidioc_g_enc_index)      (struct file *file, void *fh,
279
                                        struct v4l2_enc_idx *a);
280
        int (*vidioc_encoder_cmd)      (struct file *file, void *fh,
281
                                        struct v4l2_encoder_cmd *a);
282
        int (*vidioc_try_encoder_cmd)  (struct file *file, void *fh,
283
                                        struct v4l2_encoder_cmd *a);
284
 
285
        /* Stream type-dependent parameter ioctls */
286
        int (*vidioc_g_parm)           (struct file *file, void *fh,
287
                                        struct v4l2_streamparm *a);
288
        int (*vidioc_s_parm)           (struct file *file, void *fh,
289
                                        struct v4l2_streamparm *a);
290
 
291
        /* Tuner ioctls */
292
        int (*vidioc_g_tuner)          (struct file *file, void *fh,
293
                                        struct v4l2_tuner *a);
294
        int (*vidioc_s_tuner)          (struct file *file, void *fh,
295
                                        struct v4l2_tuner *a);
296
        int (*vidioc_g_frequency)      (struct file *file, void *fh,
297
                                        struct v4l2_frequency *a);
298
        int (*vidioc_s_frequency)      (struct file *file, void *fh,
299
                                        struct v4l2_frequency *a);
300
 
301
        /* Sliced VBI cap */
302
        int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh,
303
                                        struct v4l2_sliced_vbi_cap *a);
304
 
305
        /* Log status ioctl */
306
        int (*vidioc_log_status)       (struct file *file, void *fh);
307
 
308
 
309
        /* Debugging ioctls */
310
#ifdef CONFIG_VIDEO_ADV_DEBUG
311
        int (*vidioc_g_register)       (struct file *file, void *fh,
312
                                        struct v4l2_register *reg);
313
        int (*vidioc_s_register)       (struct file *file, void *fh,
314
                                        struct v4l2_register *reg);
315
#endif
316
        int (*vidioc_g_chip_ident)     (struct file *file, void *fh,
317
                                        struct v4l2_chip_ident *chip);
318
 
319
 
320
#ifdef OBSOLETE_OWNER /* to be removed soon */
321
/* obsolete -- fops->owner is used instead */
322
struct module *owner;
323
/* dev->driver_data will be used instead some day.
324
        * Use the video_{get|set}_drvdata() helper functions,
325
        * so the switch over will be transparent for you.
326
        * Or use {pci|usb}_{get|set}_drvdata() directly. */
327
void *priv;
328
#endif
329
 
330
        /* for videodev.c intenal usage -- please don't touch */
331
        int users;                     /* video_exclusive_{open|close} ... */
332
        struct mutex lock;             /* ... helper function uses these   */
333
};
334
 
335
/* Class-dev to video-device */
336
#define to_video_device(cd) container_of(cd, struct video_device, class_dev)
337
 
338
/* Version 2 functions */
339
extern int video_register_device(struct video_device *vfd, int type, int nr);
340
void video_unregister_device(struct video_device *);
341
extern int video_ioctl2(struct inode *inode, struct file *file,
342
                          unsigned int cmd, unsigned long arg);
343
 
344
/* helper functions to alloc / release struct video_device, the
345
   later can be used for video_device->release() */
346
struct video_device *video_device_alloc(void);
347
void video_device_release(struct video_device *vfd);
348
 
349
/* Include support for obsoleted stuff */
350
extern int video_usercopy(struct inode *inode, struct file *file,
351
                          unsigned int cmd, unsigned long arg,
352
                          int (*func)(struct inode *inode, struct file *file,
353
                                      unsigned int cmd, void *arg));
354
 
355
#ifdef CONFIG_VIDEO_V4L1_COMPAT
356
#include <linux/mm.h>
357
 
358
static inline int __must_check
359
video_device_create_file(struct video_device *vfd,
360
                         struct device_attribute *attr)
361
{
362
        int ret = device_create_file(&vfd->class_dev, attr);
363
        if (ret < 0)
364
                printk(KERN_WARNING "%s error: %d\n", __FUNCTION__, ret);
365
        return ret;
366
}
367
static inline void
368
video_device_remove_file(struct video_device *vfd,
369
                         struct device_attribute *attr)
370
{
371
        device_remove_file(&vfd->class_dev, attr);
372
}
373
 
374
#endif /* CONFIG_VIDEO_V4L1_COMPAT */
375
 
376
#ifdef OBSOLETE_OWNER /* to be removed soon */
377
/* helper functions to access driver private data. */
378
static inline void *video_get_drvdata(struct video_device *dev)
379
{
380
        return dev->priv;
381
}
382
 
383
static inline void video_set_drvdata(struct video_device *dev, void *data)
384
{
385
        dev->priv = data;
386
}
387
 
388
#endif
389
 
390
#ifdef OBSOLETE_DEVDATA /* to be removed soon */
391
/* Obsolete stuff - Still needed for radio devices and obsolete drivers */
392
extern struct video_device* video_devdata(struct file*);
393
extern int video_exclusive_open(struct inode *inode, struct file *file);
394
extern int video_exclusive_release(struct inode *inode, struct file *file);
395
#endif
396
 
397
#endif /* _V4L2_DEV_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.