Commit 5f708812 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f411f103
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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!
+7 −6
Original line number Diff line number Diff line
@@ -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,
+30 −38
Original line number Diff line number Diff line
@@ -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
 */
@@ -17,23 +25,6 @@
#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)
@@ -47,23 +38,11 @@
				 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
+1 −0
Original line number Diff line number Diff line
@@ -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
+69 −0
Original line number Diff line number Diff line
#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