[media] uvcvideo: Make the API public
Laurent Pinchart [Sun, 21 Nov 2010 20:15:44 +0000 (17:15 -0300)]
Move the public API definitions to include/linux/uvcvideo.h and bump the
version number to 1.1.0. Compatibility with the old API is kept,
application can still be compiled against the private header and will
not break.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

Documentation/ioctl/ioctl-number.txt
drivers/media/video/uvc/uvc_v4l2.c
drivers/media/video/uvc/uvcvideo.h
include/linux/Kbuild
include/linux/uvcvideo.h [new file with mode: 0644]

index a0a5d82..2d1ad12 100644 (file)
@@ -166,7 +166,6 @@ Code  Seq#(hex)     Include File            Comments
 'T'    all     arch/x86/include/asm/ioctls.h   conflict!
 'T'    C0-DF   linux/if_tun.h          conflict!
 'U'    all     sound/asound.h          conflict!
-'U'    00-0F   drivers/media/video/uvc/uvcvideo.h      conflict!
 'U'    00-CF   linux/uinput.h          conflict!
 'U'    00-EF   linux/usbdevice_fs.h
 'U'    C0-CF   drivers/bluetooth/hci_uart.h
@@ -259,6 +258,7 @@ Code  Seq#(hex)     Include File            Comments
 't'    80-8F   linux/isdn_ppp.h
 't'    90      linux/toshiba.h
 'u'    00-1F   linux/smb_fs.h          gone
+'u'    20-3F   linux/uvcvideo.h        USB video class host driver
 'v'    00-1F   linux/ext2_fs.h         conflict!
 'v'    00-1F   linux/fs.h              conflict!
 'v'    00-0F   linux/sonypi.h          conflict!
index 2e2a556..6e8aad4 100644 (file)
@@ -1036,24 +1036,25 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
         * UVCIOC_CTRL_GET and UVCIOC_CTRL_SET are deprecated and scheduled for
         * removal in 2.6.42.
         */
-       case UVCIOC_CTRL_ADD:
+       case __UVCIOC_CTRL_ADD:
                uvc_v4l2_ioctl_warn();
                return -EEXIST;
 
-       case UVCIOC_CTRL_MAP_OLD:
+       case __UVCIOC_CTRL_MAP_OLD:
                uvc_v4l2_ioctl_warn();
+       case __UVCIOC_CTRL_MAP:
        case UVCIOC_CTRL_MAP:
                return uvc_ioctl_ctrl_map(chain, arg,
-                                         cmd == UVCIOC_CTRL_MAP_OLD);
+                                         cmd == __UVCIOC_CTRL_MAP_OLD);
 
-       case UVCIOC_CTRL_GET:
-       case UVCIOC_CTRL_SET:
+       case __UVCIOC_CTRL_GET:
+       case __UVCIOC_CTRL_SET:
        {
                struct uvc_xu_control *xctrl = arg;
                struct uvc_xu_control_query xqry = {
                        .unit           = xctrl->unit,
                        .selector       = xctrl->selector,
-                       .query          = cmd == UVCIOC_CTRL_GET
+                       .query          = cmd == __UVCIOC_CTRL_GET
                                        ? UVC_GET_CUR : UVC_SET_CUR,
                        .size           = xctrl->size,
                        .data           = xctrl->data,
index cd58ea8..38dd4e1 100644 (file)
@@ -4,6 +4,14 @@
 #include <linux/kernel.h>
 #include <linux/videodev2.h>
 
+#ifndef __KERNEL__
+/*
+ * This header provides binary compatibility with applications using the private
+ * uvcvideo API. This API is deprecated and will be removed in 2.6.42.
+ * Applications should be recompiled against the public linux/uvcvideo.h header.
+ */
+#warn "The uvcvideo.h header is deprecated, use linux/uvcvideo.h instead."
+
 /*
  * Dynamic controls
  */
 #define UVC_CTRL_DATA_TYPE_BITMASK     5
 
 /* Control flags */
-#define UVC_CTRL_FLAG_SET_CUR          (1 << 0)
-#define UVC_CTRL_FLAG_GET_CUR          (1 << 1)
-#define UVC_CTRL_FLAG_GET_MIN          (1 << 2)
-#define UVC_CTRL_FLAG_GET_MAX          (1 << 3)
-#define UVC_CTRL_FLAG_GET_RES          (1 << 4)
-#define UVC_CTRL_FLAG_GET_DEF          (1 << 5)
-/* Control should be saved at suspend and restored at resume. */
-#define UVC_CTRL_FLAG_RESTORE          (1 << 6)
-/* Control can be updated by the camera. */
-#define UVC_CTRL_FLAG_AUTO_UPDATE      (1 << 7)
-
-#define UVC_CTRL_FLAG_GET_RANGE \
-       (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
-        UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \
-        UVC_CTRL_FLAG_GET_DEF)
-
-/* Old control flags, don't use */
 #define UVC_CONTROL_SET_CUR    (1 << 0)
 #define UVC_CONTROL_GET_CUR    (1 << 1)
 #define UVC_CONTROL_GET_MIN    (1 << 2)
                                 UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \
                                 UVC_CONTROL_GET_DEF)
 
-struct uvc_xu_control_info {
-       __u8 entity[16];
-       __u8 index;
-       __u8 selector;
-       __u16 size;
-       __u32 flags;
-};
-
 struct uvc_menu_info {
        __u32 value;
        __u8 name[32];
 };
 
-struct uvc_xu_control_mapping_old {
-       __u8 reserved[64];
-};
-
 struct uvc_xu_control_mapping {
        __u32 id;
        __u8 name[32];
@@ -81,32 +60,46 @@ struct uvc_xu_control_mapping {
        __u32 reserved[4];
 };
 
-struct uvc_xu_control {
-       __u8 unit;
+#endif
+
+struct uvc_xu_control_info {
+       __u8 entity[16];
+       __u8 index;
        __u8 selector;
        __u16 size;
-       __u8 __user *data;
+       __u32 flags;
 };
 
-struct uvc_xu_control_query {
+struct uvc_xu_control_mapping_old {
+       __u8 reserved[64];
+};
+
+struct uvc_xu_control {
        __u8 unit;
        __u8 selector;
-       __u8 query;
        __u16 size;
        __u8 __user *data;
 };
 
+#ifndef __KERNEL__
 #define UVCIOC_CTRL_ADD                _IOW('U', 1, struct uvc_xu_control_info)
 #define UVCIOC_CTRL_MAP_OLD    _IOWR('U', 2, struct uvc_xu_control_mapping_old)
 #define UVCIOC_CTRL_MAP                _IOWR('U', 2, struct uvc_xu_control_mapping)
 #define UVCIOC_CTRL_GET                _IOWR('U', 3, struct uvc_xu_control)
 #define UVCIOC_CTRL_SET                _IOW('U', 4, struct uvc_xu_control)
-#define UVCIOC_CTRL_QUERY      _IOWR('U', 5, struct uvc_xu_control_query)
+#else
+#define __UVCIOC_CTRL_ADD      _IOW('U', 1, struct uvc_xu_control_info)
+#define __UVCIOC_CTRL_MAP_OLD  _IOWR('U', 2, struct uvc_xu_control_mapping_old)
+#define __UVCIOC_CTRL_MAP      _IOWR('U', 2, struct uvc_xu_control_mapping)
+#define __UVCIOC_CTRL_GET      _IOWR('U', 3, struct uvc_xu_control)
+#define __UVCIOC_CTRL_SET      _IOW('U', 4, struct uvc_xu_control)
+#endif
 
 #ifdef __KERNEL__
 
 #include <linux/poll.h>
 #include <linux/usb/video.h>
+#include <linux/uvcvideo.h>
 
 /* --------------------------------------------------------------------------
  * UVC constants
@@ -184,8 +177,8 @@ struct uvc_xu_control_query {
  * Driver specific constants.
  */
 
-#define DRIVER_VERSION_NUMBER  KERNEL_VERSION(1, 0, 0)
-#define DRIVER_VERSION         "v1.0.0"
+#define DRIVER_VERSION_NUMBER  KERNEL_VERSION(1, 1, 0)
+#define DRIVER_VERSION         "v1.1.0"
 
 /* Number of isochronous URBs. */
 #define UVC_URBS               5
@@ -682,4 +675,3 @@ void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream,
 #endif /* __KERNEL__ */
 
 #endif
-
index 75cf611..cb1ded2 100644 (file)
@@ -372,6 +372,7 @@ header-y += unistd.h
 header-y += usbdevice_fs.h
 header-y += utime.h
 header-y += utsname.h
+header-y += uvcvideo.h
 header-y += v4l2-mediabus.h
 header-y += v4l2-subdev.h
 header-y += veth.h
diff --git a/include/linux/uvcvideo.h b/include/linux/uvcvideo.h
new file mode 100644 (file)
index 0000000..f46a53f
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef __LINUX_UVCVIDEO_H_
+#define __LINUX_UVCVIDEO_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * Dynamic controls
+ */
+
+/* Data types for UVC control data */
+#define UVC_CTRL_DATA_TYPE_RAW         0
+#define UVC_CTRL_DATA_TYPE_SIGNED      1
+#define UVC_CTRL_DATA_TYPE_UNSIGNED    2
+#define UVC_CTRL_DATA_TYPE_BOOLEAN     3
+#define UVC_CTRL_DATA_TYPE_ENUM                4
+#define UVC_CTRL_DATA_TYPE_BITMASK     5
+
+/* Control flags */
+#define UVC_CTRL_FLAG_SET_CUR          (1 << 0)
+#define UVC_CTRL_FLAG_GET_CUR          (1 << 1)
+#define UVC_CTRL_FLAG_GET_MIN          (1 << 2)
+#define UVC_CTRL_FLAG_GET_MAX          (1 << 3)
+#define UVC_CTRL_FLAG_GET_RES          (1 << 4)
+#define UVC_CTRL_FLAG_GET_DEF          (1 << 5)
+/* Control should be saved at suspend and restored at resume. */
+#define UVC_CTRL_FLAG_RESTORE          (1 << 6)
+/* Control can be updated by the camera. */
+#define UVC_CTRL_FLAG_AUTO_UPDATE      (1 << 7)
+
+#define UVC_CTRL_FLAG_GET_RANGE \
+       (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
+        UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \
+        UVC_CTRL_FLAG_GET_DEF)
+
+struct uvc_menu_info {
+       __u32 value;
+       __u8 name[32];
+};
+
+struct uvc_xu_control_mapping {
+       __u32 id;
+       __u8 name[32];
+       __u8 entity[16];
+       __u8 selector;
+
+       __u8 size;
+       __u8 offset;
+       __u32 v4l2_type;
+       __u32 data_type;
+
+       struct uvc_menu_info __user *menu_info;
+       __u32 menu_count;
+
+       __u32 reserved[4];
+};
+
+struct uvc_xu_control_query {
+       __u8 unit;
+       __u8 selector;
+       __u8 query;
+       __u16 size;
+       __u8 __user *data;
+};
+
+#define UVCIOC_CTRL_MAP                _IOWR('u', 0x20, struct uvc_xu_control_mapping)
+#define UVCIOC_CTRL_QUERY      _IOWR('u', 0x21, struct uvc_xu_control_query)
+
+#endif