'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
 '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!
 
         * 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,
 
 #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];
        __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
  * 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
 #endif /* __KERNEL__ */
 
 #endif
-
 
--- /dev/null
+#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