linux/include/media/v4l2-dev.h
<<
>>
Prefs
   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/*  Video standard functions  */
  43extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
  44extern char *v4l2_norm_to_name(v4l2_std_id id);
  45extern int v4l2_video_std_construct(struct v4l2_standard *vs,
  46                                    int id, char *name);
  47
  48/* prority handling */
  49struct v4l2_prio_state {
  50        atomic_t prios[4];
  51};
  52int v4l2_prio_init(struct v4l2_prio_state *global);
  53int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
  54                     enum v4l2_priority new);
  55int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
  56int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
  57enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
  58int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
  59
  60/* names for fancy debug output */
  61extern char *v4l2_field_names[];
  62extern char *v4l2_type_names[];
  63
  64/*  Compatibility layer interface  --  v4l1-compat module */
  65typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
  66                           unsigned int cmd, void *arg);
  67#ifdef CONFIG_VIDEO_V4L1_COMPAT
  68int 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 */
  75extern 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
  84struct 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 */
 322struct 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. */
 327void *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 */
 339extern int video_register_device(struct video_device *vfd, int type, int nr);
 340void video_unregister_device(struct video_device *);
 341extern 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() */
 346struct video_device *video_device_alloc(void);
 347void video_device_release(struct video_device *vfd);
 348
 349/* Include support for obsoleted stuff */
 350extern 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
 358static inline int __must_check
 359video_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}
 367static inline void
 368video_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. */
 378static inline void *video_get_drvdata(struct video_device *dev)
 379{
 380        return dev->priv;
 381}
 382
 383static 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 */
 392extern struct video_device* video_devdata(struct file*);
 393extern int video_exclusive_open(struct inode *inode, struct file *file);
 394extern int video_exclusive_release(struct inode *inode, struct file *file);
 395#endif
 396
 397#endif /* _V4L2_DEV_H */
 398