]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/uvc/uvcvideo.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6-omap-h63xx.git] / drivers / media / video / uvc / uvcvideo.h
index 9a6bc1aafb166bf5533f94494c7a71d68bdae7a1..896b791ece159565553804e8e2efb7db942820bc 100644 (file)
@@ -4,7 +4,6 @@
 #include <linux/kernel.h>
 #include <linux/videodev2.h>
 
-
 /*
  * Dynamic controls
  */
@@ -316,6 +315,7 @@ struct uvc_xu_control {
 #define UVC_QUIRK_BUILTIN_ISIGHT       0x00000008
 #define UVC_QUIRK_STREAM_NO_FID                0x00000010
 #define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020
+#define UVC_QUIRK_PRUNE_CONTROLS       0x00000040
 
 /* Format flags */
 #define UVC_FMT_FLAG_COMPRESSED                0x00000001
@@ -383,6 +383,11 @@ struct uvc_control_mapping {
 
        struct uvc_menu_info *menu_info;
        __u32 menu_count;
+
+       __s32 (*get) (struct uvc_control_mapping *mapping, __u8 query,
+                     const __u8 *data);
+       void (*set) (struct uvc_control_mapping *mapping, __s32 value,
+                    __u8 *data);
 };
 
 struct uvc_control {
@@ -523,6 +528,7 @@ struct uvc_streaming {
        __u16 maxpsize;
 
        struct uvc_streaming_header header;
+       enum v4l2_buf_type type;
 
        unsigned int nformats;
        struct uvc_format *format;
@@ -558,12 +564,15 @@ struct uvc_buffer {
 #define UVC_QUEUE_DROP_INCOMPLETE      (1 << 2)
 
 struct uvc_video_queue {
+       enum v4l2_buf_type type;
+
        void *mem;
        unsigned int flags;
        __u32 sequence;
 
        unsigned int count;
        unsigned int buf_size;
+       unsigned int buf_used;
        struct uvc_buffer buffer[UVC_MAX_VIDEO_BUFFERS];
        struct mutex mutex;     /* protects buffers and mainqueue */
        spinlock_t irqlock;     /* protects irqqueue */
@@ -578,8 +587,9 @@ struct uvc_video_device {
        atomic_t active;
        unsigned int frozen : 1;
 
-       struct list_head iterms;
-       struct uvc_entity *oterm;
+       struct list_head iterms;                /* Input terminals */
+       struct uvc_entity *oterm;               /* Output terminal */
+       struct uvc_entity *sterm;               /* USB streaming terminal */
        struct uvc_entity *processing;
        struct uvc_entity *selector;
        struct list_head extensions;
@@ -617,6 +627,7 @@ enum uvc_device_state {
 struct uvc_device {
        struct usb_device *udev;
        struct usb_interface *intf;
+       unsigned long warnings;
        __u32 quirks;
        int intfnum;
        char name[32];
@@ -679,6 +690,10 @@ struct uvc_driver {
 #define UVC_TRACE_SUSPEND      (1 << 8)
 #define UVC_TRACE_STATUS       (1 << 9)
 
+#define UVC_WARN_MINMAX                0
+#define UVC_WARN_PROBE_DEF     1
+
+extern unsigned int uvc_no_drop_param;
 extern unsigned int uvc_trace_param;
 
 #define uvc_trace(flag, msg...) \
@@ -687,6 +702,12 @@ extern unsigned int uvc_trace_param;
                        printk(KERN_DEBUG "uvcvideo: " msg); \
        } while (0)
 
+#define uvc_warn_once(dev, warn, msg...) \
+       do { \
+               if (!test_and_set_bit(warn, &dev->warnings)) \
+                       printk(KERN_INFO "uvcvideo: " msg); \
+       } while (0)
+
 #define uvc_printk(level, msg...) \
        printk(level "uvcvideo: " msg)
 
@@ -709,7 +730,8 @@ extern struct uvc_driver uvc_driver;
 extern void uvc_delete(struct kref *kref);
 
 /* Video buffers queue management. */
-extern void uvc_queue_init(struct uvc_video_queue *queue);
+extern void uvc_queue_init(struct uvc_video_queue *queue,
+               enum v4l2_buf_type type);
 extern int uvc_alloc_buffers(struct uvc_video_queue *queue,
                unsigned int nbuffers, unsigned int buflength);
 extern int uvc_free_buffers(struct uvc_video_queue *queue);
@@ -740,10 +762,10 @@ extern int uvc_video_resume(struct uvc_video_device *video);
 extern int uvc_video_enable(struct uvc_video_device *video, int enable);
 extern int uvc_probe_video(struct uvc_video_device *video,
                struct uvc_streaming_control *probe);
+extern int uvc_commit_video(struct uvc_video_device *video,
+               struct uvc_streaming_control *ctrl);
 extern int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
                __u8 intfnum, __u8 cs, void *data, __u16 size);
-extern int uvc_set_video_ctrl(struct uvc_video_device *video,
-               struct uvc_streaming_control *ctrl, int probe);
 
 /* Status */
 extern int uvc_status_init(struct uvc_device *dev);