mirror of
https://github.com/torvalds/linux.git
synced 2024-11-18 01:51:53 +00:00
[media] uvcvideo: Make the API public
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>
This commit is contained in:
parent
f411f10382
commit
5f7088127e
@ -166,7 +166,6 @@ Code Seq#(hex) Include File Comments
|
|||||||
'T' all arch/x86/include/asm/ioctls.h conflict!
|
'T' all arch/x86/include/asm/ioctls.h conflict!
|
||||||
'T' C0-DF linux/if_tun.h conflict!
|
'T' C0-DF linux/if_tun.h conflict!
|
||||||
'U' all sound/asound.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-CF linux/uinput.h conflict!
|
||||||
'U' 00-EF linux/usbdevice_fs.h
|
'U' 00-EF linux/usbdevice_fs.h
|
||||||
'U' C0-CF drivers/bluetooth/hci_uart.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' 80-8F linux/isdn_ppp.h
|
||||||
't' 90 linux/toshiba.h
|
't' 90 linux/toshiba.h
|
||||||
'u' 00-1F linux/smb_fs.h gone
|
'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/ext2_fs.h conflict!
|
||||||
'v' 00-1F linux/fs.h conflict!
|
'v' 00-1F linux/fs.h conflict!
|
||||||
'v' 00-0F linux/sonypi.h conflict!
|
'v' 00-0F linux/sonypi.h conflict!
|
||||||
|
@ -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
|
* UVCIOC_CTRL_GET and UVCIOC_CTRL_SET are deprecated and scheduled for
|
||||||
* removal in 2.6.42.
|
* removal in 2.6.42.
|
||||||
*/
|
*/
|
||||||
case UVCIOC_CTRL_ADD:
|
case __UVCIOC_CTRL_ADD:
|
||||||
uvc_v4l2_ioctl_warn();
|
uvc_v4l2_ioctl_warn();
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
|
|
||||||
case UVCIOC_CTRL_MAP_OLD:
|
case __UVCIOC_CTRL_MAP_OLD:
|
||||||
uvc_v4l2_ioctl_warn();
|
uvc_v4l2_ioctl_warn();
|
||||||
|
case __UVCIOC_CTRL_MAP:
|
||||||
case UVCIOC_CTRL_MAP:
|
case UVCIOC_CTRL_MAP:
|
||||||
return uvc_ioctl_ctrl_map(chain, arg,
|
return uvc_ioctl_ctrl_map(chain, arg,
|
||||||
cmd == UVCIOC_CTRL_MAP_OLD);
|
cmd == __UVCIOC_CTRL_MAP_OLD);
|
||||||
|
|
||||||
case UVCIOC_CTRL_GET:
|
case __UVCIOC_CTRL_GET:
|
||||||
case UVCIOC_CTRL_SET:
|
case __UVCIOC_CTRL_SET:
|
||||||
{
|
{
|
||||||
struct uvc_xu_control *xctrl = arg;
|
struct uvc_xu_control *xctrl = arg;
|
||||||
struct uvc_xu_control_query xqry = {
|
struct uvc_xu_control_query xqry = {
|
||||||
.unit = xctrl->unit,
|
.unit = xctrl->unit,
|
||||||
.selector = xctrl->selector,
|
.selector = xctrl->selector,
|
||||||
.query = cmd == UVCIOC_CTRL_GET
|
.query = cmd == __UVCIOC_CTRL_GET
|
||||||
? UVC_GET_CUR : UVC_SET_CUR,
|
? UVC_GET_CUR : UVC_SET_CUR,
|
||||||
.size = xctrl->size,
|
.size = xctrl->size,
|
||||||
.data = xctrl->data,
|
.data = xctrl->data,
|
||||||
|
@ -4,6 +4,14 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/videodev2.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
|
* Dynamic controls
|
||||||
*/
|
*/
|
||||||
@ -17,23 +25,6 @@
|
|||||||
#define UVC_CTRL_DATA_TYPE_BITMASK 5
|
#define UVC_CTRL_DATA_TYPE_BITMASK 5
|
||||||
|
|
||||||
/* Control flags */
|
/* 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_SET_CUR (1 << 0)
|
||||||
#define UVC_CONTROL_GET_CUR (1 << 1)
|
#define UVC_CONTROL_GET_CUR (1 << 1)
|
||||||
#define UVC_CONTROL_GET_MIN (1 << 2)
|
#define UVC_CONTROL_GET_MIN (1 << 2)
|
||||||
@ -47,23 +38,11 @@
|
|||||||
UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \
|
UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \
|
||||||
UVC_CONTROL_GET_DEF)
|
UVC_CONTROL_GET_DEF)
|
||||||
|
|
||||||
struct uvc_xu_control_info {
|
|
||||||
__u8 entity[16];
|
|
||||||
__u8 index;
|
|
||||||
__u8 selector;
|
|
||||||
__u16 size;
|
|
||||||
__u32 flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct uvc_menu_info {
|
struct uvc_menu_info {
|
||||||
__u32 value;
|
__u32 value;
|
||||||
__u8 name[32];
|
__u8 name[32];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uvc_xu_control_mapping_old {
|
|
||||||
__u8 reserved[64];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct uvc_xu_control_mapping {
|
struct uvc_xu_control_mapping {
|
||||||
__u32 id;
|
__u32 id;
|
||||||
__u8 name[32];
|
__u8 name[32];
|
||||||
@ -81,6 +60,20 @@ struct uvc_xu_control_mapping {
|
|||||||
__u32 reserved[4];
|
__u32 reserved[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct uvc_xu_control_info {
|
||||||
|
__u8 entity[16];
|
||||||
|
__u8 index;
|
||||||
|
__u8 selector;
|
||||||
|
__u16 size;
|
||||||
|
__u32 flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct uvc_xu_control_mapping_old {
|
||||||
|
__u8 reserved[64];
|
||||||
|
};
|
||||||
|
|
||||||
struct uvc_xu_control {
|
struct uvc_xu_control {
|
||||||
__u8 unit;
|
__u8 unit;
|
||||||
__u8 selector;
|
__u8 selector;
|
||||||
@ -88,25 +81,25 @@ struct uvc_xu_control {
|
|||||||
__u8 __user *data;
|
__u8 __user *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uvc_xu_control_query {
|
#ifndef __KERNEL__
|
||||||
__u8 unit;
|
|
||||||
__u8 selector;
|
|
||||||
__u8 query;
|
|
||||||
__u16 size;
|
|
||||||
__u8 __user *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define UVCIOC_CTRL_ADD _IOW('U', 1, struct uvc_xu_control_info)
|
#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_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_MAP _IOWR('U', 2, struct uvc_xu_control_mapping)
|
||||||
#define UVCIOC_CTRL_GET _IOWR('U', 3, struct uvc_xu_control)
|
#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_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__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
#include <linux/usb/video.h>
|
#include <linux/usb/video.h>
|
||||||
|
#include <linux/uvcvideo.h>
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
* UVC constants
|
* UVC constants
|
||||||
@ -184,8 +177,8 @@ struct uvc_xu_control_query {
|
|||||||
* Driver specific constants.
|
* Driver specific constants.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DRIVER_VERSION_NUMBER KERNEL_VERSION(1, 0, 0)
|
#define DRIVER_VERSION_NUMBER KERNEL_VERSION(1, 1, 0)
|
||||||
#define DRIVER_VERSION "v1.0.0"
|
#define DRIVER_VERSION "v1.1.0"
|
||||||
|
|
||||||
/* Number of isochronous URBs. */
|
/* Number of isochronous URBs. */
|
||||||
#define UVC_URBS 5
|
#define UVC_URBS 5
|
||||||
@ -682,4 +675,3 @@ void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream,
|
|||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -372,6 +372,7 @@ header-y += unistd.h
|
|||||||
header-y += usbdevice_fs.h
|
header-y += usbdevice_fs.h
|
||||||
header-y += utime.h
|
header-y += utime.h
|
||||||
header-y += utsname.h
|
header-y += utsname.h
|
||||||
|
header-y += uvcvideo.h
|
||||||
header-y += v4l2-mediabus.h
|
header-y += v4l2-mediabus.h
|
||||||
header-y += v4l2-subdev.h
|
header-y += v4l2-subdev.h
|
||||||
header-y += veth.h
|
header-y += veth.h
|
||||||
|
69
include/linux/uvcvideo.h
Normal file
69
include/linux/uvcvideo.h
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user