summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch')
-rw-r--r--freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch557
1 files changed, 557 insertions, 0 deletions
diff --git a/freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch b/freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch
new file mode 100644
index 000000000..4ae232efa
--- /dev/null
+++ b/freed-ora/current/f13/linux-2.6-v4l-dvb-uvcvideo-update.patch
@@ -0,0 +1,557 @@
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Sat, 13 Mar 2010 21:12:15 +0000 (-0300)
+Subject: V4L/DVB: uvcvideo: Add support for Packard Bell EasyNote MX52 integrated webcam
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=513640877c336551f7a4428eaff7a4eb0f42cb9e
+
+V4L/DVB: uvcvideo: Add support for Packard Bell EasyNote MX52 integrated webcam
+
+The camera requires the STREAM_NO_FID quirk. Add a corresponding entry
+in the device IDs list.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
+index a192c51..43892bf 100644
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -2104,6 +2104,15 @@ static struct usb_device_id uvc_ids[] = {
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 0,
+ .driver_info = UVC_QUIRK_STREAM_NO_FID },
++ /* Syntek (Packard Bell EasyNote MX52 */
++ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
++ | USB_DEVICE_ID_MATCH_INT_INFO,
++ .idVendor = 0x174f,
++ .idProduct = 0x8a12,
++ .bInterfaceClass = USB_CLASS_VIDEO,
++ .bInterfaceSubClass = 1,
++ .bInterfaceProtocol = 0,
++ .driver_info = UVC_QUIRK_STREAM_NO_FID },
+ /* Syntek (Asus F9SG) */
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
+ | USB_DEVICE_ID_MATCH_INT_INFO,
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Wed, 31 Mar 2010 15:29:26 +0000 (-0300)
+Subject: V4L/DVB: uvcvideo: Use POLLOUT and POLLWRNORM for output devices
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=a6eb7bc8e0eea78f96ad1b0f0195ec52b88c6a00
+
+V4L/DVB: uvcvideo: Use POLLOUT and POLLWRNORM for output devices
+
+The V4L2 specification requires drivers to use the write events in the
+file operations poll handler for output devices. The uvcvideo driver
+erroneously used read events for all devices. Fix this.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_queue.c b/drivers/media/video/uvc/uvc_queue.c
+index 4a925a3..133c78d 100644
+--- a/drivers/media/video/uvc/uvc_queue.c
++++ b/drivers/media/video/uvc/uvc_queue.c
+@@ -388,8 +388,12 @@ unsigned int uvc_queue_poll(struct uvc_video_queue *queue, struct file *file,
+
+ poll_wait(file, &buf->wait, wait);
+ if (buf->state == UVC_BUF_STATE_DONE ||
+- buf->state == UVC_BUF_STATE_ERROR)
+- mask |= POLLIN | POLLRDNORM;
++ buf->state == UVC_BUF_STATE_ERROR) {
++ if (queue->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
++ mask |= POLLIN | POLLRDNORM;
++ else
++ mask |= POLLOUT | POLLWRNORM;
++ }
+
+ done:
+ mutex_unlock(&queue->mutex);
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Sun, 25 Apr 2010 19:23:24 +0000 (-0300)
+Subject: V4L/DVB: uvcvideo: Flag relative controls as write-only
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=4ac25db7e7f6116213f1c03039df00b18466a0dc
+
+V4L/DVB: uvcvideo: Flag relative controls as write-only
+
+The UVC relative controls (exposure time, iris, focus, zoom, pan/tilt)
+are write-only (despite the UVC specification stating that the GET_CUR
+request is mandatory). Mark the controls as such, and report the related
+V4L2 controls V4L2_CTRL_FLAG_WRITE_ONLY.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
+index 3697d72..bf2a333 100644
+--- a/drivers/media/video/uvc/uvc_ctrl.c
++++ b/drivers/media/video/uvc/uvc_ctrl.c
+@@ -216,8 +216,7 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL,
+ .index = 4,
+ .size = 1,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR
+- | UVC_CONTROL_RESTORE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_RESTORE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -232,8 +231,9 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_FOCUS_RELATIVE_CONTROL,
+ .index = 6,
+ .size = 2,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
+- | UVC_CONTROL_AUTO_UPDATE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN
++ | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES
++ | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -248,8 +248,7 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_IRIS_RELATIVE_CONTROL,
+ .index = 8,
+ .size = 1,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR
+- | UVC_CONTROL_AUTO_UPDATE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_AUTO_UPDATE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -264,8 +263,9 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_ZOOM_RELATIVE_CONTROL,
+ .index = 10,
+ .size = 3,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
+- | UVC_CONTROL_AUTO_UPDATE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN
++ | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES
++ | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -280,8 +280,9 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_PANTILT_RELATIVE_CONTROL,
+ .index = 12,
+ .size = 4,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
+- | UVC_CONTROL_AUTO_UPDATE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN
++ | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES
++ | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -296,8 +297,9 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_CT_ROLL_RELATIVE_CONTROL,
+ .index = 14,
+ .size = 2,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
+- | UVC_CONTROL_AUTO_UPDATE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN
++ | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES
++ | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE,
+ },
+ {
+ .entity = UVC_GUID_UVC_CAMERA,
+@@ -841,6 +843,8 @@ int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
+ strlcpy(v4l2_ctrl->name, mapping->name, sizeof v4l2_ctrl->name);
+ v4l2_ctrl->flags = 0;
+
++ if (!(ctrl->info->flags & UVC_CONTROL_GET_CUR))
++ v4l2_ctrl->flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
+ if (!(ctrl->info->flags & UVC_CONTROL_SET_CUR))
+ v4l2_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
+
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Mon, 5 Jul 2010 18:24:39 +0000 (+0200)
+Subject: uvcvideo: Power line frequency control doesn't support GET_MIN/MAX/RES
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=2596b09e32b45967dbdbfe80a10fb51d9a6c6839
+
+uvcvideo: Power line frequency control doesn't support GET_MIN/MAX/RES
+
+Issuing a GET_MIN request on the power line frequency control times out
+on at least the Apple iSight. As the UVC specification doesn't list
+GET_MIN/MAX/RES as supported on that control, remove them from the
+uvc_ctrls array.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
+index aa0720a..27a79f0 100644
+--- a/drivers/media/video/uvc/uvc_ctrl.c
++++ b/drivers/media/video/uvc/uvc_ctrl.c
+@@ -122,8 +122,8 @@ static struct uvc_control_info uvc_ctrls[] = {
+ .selector = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
+ .index = 10,
+ .size = 1,
+- .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
+- | UVC_CONTROL_RESTORE,
++ .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR
++ | UVC_CONTROL_GET_DEF | UVC_CONTROL_RESTORE,
+ },
+ {
+ .entity = UVC_GUID_UVC_PROCESSING,
+From: Martin Rubli <martin_rubli@logitech.com>
+Date: Wed, 19 May 2010 22:51:56 +0000 (+0200)
+Subject: uvcvideo: Add support for absolute pan/tilt controls
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=d3c2f664ec76aff14c3841c99e84cd78d7227f79
+
+uvcvideo: Add support for absolute pan/tilt controls
+
+Signed-off-by: Martin Rubli <martin_rubli@logitech.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
+index aa0720a..5ec2f4a 100644
+--- a/drivers/media/video/uvc/uvc_ctrl.c
++++ b/drivers/media/video/uvc/uvc_ctrl.c
+@@ -606,6 +606,26 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
+ .set = uvc_ctrl_set_zoom,
+ },
+ {
++ .id = V4L2_CID_PAN_ABSOLUTE,
++ .name = "Pan (Absolute)",
++ .entity = UVC_GUID_UVC_CAMERA,
++ .selector = UVC_CT_PANTILT_ABSOLUTE_CONTROL,
++ .size = 32,
++ .offset = 0,
++ .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
++ .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
++ },
++ {
++ .id = V4L2_CID_TILT_ABSOLUTE,
++ .name = "Tilt (Absolute)",
++ .entity = UVC_GUID_UVC_CAMERA,
++ .selector = UVC_CT_PANTILT_ABSOLUTE_CONTROL,
++ .size = 32,
++ .offset = 32,
++ .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
++ .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
++ },
++ {
+ .id = V4L2_CID_PRIVACY,
+ .name = "Privacy",
+ .entity = UVC_GUID_UVC_CAMERA,
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Wed, 19 May 2010 23:15:00 +0000 (+0200)
+Subject: uvcvideo: Make button controls work properly
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=2bd47ad4894bfaf1a97660b821cbc46439a614d6
+
+uvcvideo: Make button controls work properly
+
+According to the v4l2 spec, writing any value to a button control should
+result in the action belonging to the button control being triggered.
+UVC cams however want to see a 1 written, this patch fixes this by
+overriding whatever value user space passed in with -1 (0xffffffff) when
+the control is a button control.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
+index 5ec2f4a..8bb825d 100644
+--- a/drivers/media/video/uvc/uvc_ctrl.c
++++ b/drivers/media/video/uvc/uvc_ctrl.c
+@@ -698,6 +698,14 @@ static void uvc_set_le_value(struct uvc_control_mapping *mapping,
+ int offset = mapping->offset;
+ __u8 mask;
+
++ /* According to the v4l2 spec, writing any value to a button control
++ * should result in the action belonging to the button control being
++ * triggered. UVC devices however want to see a 1 written -> override
++ * value.
++ */
++ if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON)
++ value = -1;
++
+ data += offset / 8;
+ offset &= 7;
+
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Thu, 18 Feb 2010 19:38:52 +0000 (+0100)
+Subject: uvcvideo: Support menu controls in the control mapping API
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=4930f2662e47d33e5baedac620da401a225bc3a8
+
+uvcvideo: Support menu controls in the control mapping API
+
+The UVCIOC_CTRL_MAP ioctl doesn't support menu entries for menu
+controls. As the uvc_xu_control_mapping structure has no reserved
+fields, this can't be fixed while keeping ABI compatibility.
+
+Modify the UVCIOC_CTRL_MAP ioctl to add menu entries support, and define
+UVCIOC_CTRL_MAP_OLD that supports the old ABI without any ability to add
+menu controls.
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c
+index 8bb825d..c88d72e 100644
+--- a/drivers/media/video/uvc/uvc_ctrl.c
++++ b/drivers/media/video/uvc/uvc_ctrl.c
+@@ -1606,6 +1606,28 @@ void uvc_ctrl_cleanup_device(struct uvc_device *dev)
+ }
+ }
+
++void uvc_ctrl_cleanup(void)
++{
++ struct uvc_control_info *info;
++ struct uvc_control_info *ni;
++ struct uvc_control_mapping *mapping;
++ struct uvc_control_mapping *nm;
++
++ list_for_each_entry_safe(info, ni, &uvc_driver.controls, list) {
++ if (!(info->flags & UVC_CONTROL_EXTENSION))
++ continue;
++
++ list_for_each_entry_safe(mapping, nm, &info->mappings, list) {
++ list_del(&mapping->list);
++ kfree(mapping->menu_info);
++ kfree(mapping);
++ }
++
++ list_del(&info->list);
++ kfree(info);
++ }
++}
++
+ void uvc_ctrl_init(void)
+ {
+ struct uvc_control_info *ctrl = uvc_ctrls;
+diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
+index 838b56f..34818c1 100644
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -2261,6 +2261,7 @@ static int __init uvc_init(void)
+ static void __exit uvc_cleanup(void)
+ {
+ usb_deregister(&uvc_driver.driver);
++ uvc_ctrl_cleanup();
+ }
+
+ module_init(uvc_init);
+diff --git a/drivers/media/video/uvc/uvc_v4l2.c b/drivers/media/video/uvc/uvc_v4l2.c
+index 7c9ab29..485a899 100644
+--- a/drivers/media/video/uvc/uvc_v4l2.c
++++ b/drivers/media/video/uvc/uvc_v4l2.c
+@@ -29,6 +29,71 @@
+ #include "uvcvideo.h"
+
+ /* ------------------------------------------------------------------------
++ * UVC ioctls
++ */
++static int uvc_ioctl_ctrl_map(struct uvc_xu_control_mapping *xmap, int old)
++{
++ struct uvc_control_mapping *map;
++ unsigned int size;
++ int ret;
++
++ map = kzalloc(sizeof *map, GFP_KERNEL);
++ if (map == NULL)
++ return -ENOMEM;
++
++ map->id = xmap->id;
++ memcpy(map->name, xmap->name, sizeof map->name);
++ memcpy(map->entity, xmap->entity, sizeof map->entity);
++ map->selector = xmap->selector;
++ map->size = xmap->size;
++ map->offset = xmap->offset;
++ map->v4l2_type = xmap->v4l2_type;
++ map->data_type = xmap->data_type;
++
++ switch (xmap->v4l2_type) {
++ case V4L2_CTRL_TYPE_INTEGER:
++ case V4L2_CTRL_TYPE_BOOLEAN:
++ case V4L2_CTRL_TYPE_BUTTON:
++ break;
++
++ case V4L2_CTRL_TYPE_MENU:
++ if (old) {
++ ret = -EINVAL;
++ goto done;
++ }
++
++ size = xmap->menu_count * sizeof(*map->menu_info);
++ map->menu_info = kmalloc(size, GFP_KERNEL);
++ if (map->menu_info == NULL) {
++ ret = -ENOMEM;
++ goto done;
++ }
++
++ if (copy_from_user(map->menu_info, xmap->menu_info, size)) {
++ ret = -EFAULT;
++ goto done;
++ }
++
++ map->menu_count = xmap->menu_count;
++ break;
++
++ default:
++ ret = -EINVAL;
++ goto done;
++ }
++
++ ret = uvc_ctrl_add_mapping(map);
++
++done:
++ if (ret < 0) {
++ kfree(map->menu_info);
++ kfree(map);
++ }
++
++ return ret;
++}
++
++/* ------------------------------------------------------------------------
+ * V4L2 interface
+ */
+
+@@ -974,7 +1039,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
+ info->flags = xinfo->flags;
+
+ info->flags |= UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX |
+- UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF;
++ UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF |
++ UVC_CONTROL_EXTENSION;
+
+ ret = uvc_ctrl_add_info(info);
+ if (ret < 0)
+@@ -982,32 +1048,12 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
+ break;
+ }
+
++ case UVCIOC_CTRL_MAP_OLD:
+ case UVCIOC_CTRL_MAP:
+- {
+- struct uvc_xu_control_mapping *xmap = arg;
+- struct uvc_control_mapping *map;
+-
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+- map = kzalloc(sizeof *map, GFP_KERNEL);
+- if (map == NULL)
+- return -ENOMEM;
+-
+- map->id = xmap->id;
+- memcpy(map->name, xmap->name, sizeof map->name);
+- memcpy(map->entity, xmap->entity, sizeof map->entity);
+- map->selector = xmap->selector;
+- map->size = xmap->size;
+- map->offset = xmap->offset;
+- map->v4l2_type = xmap->v4l2_type;
+- map->data_type = xmap->data_type;
+-
+- ret = uvc_ctrl_add_mapping(map);
+- if (ret < 0)
+- kfree(map);
+- break;
+- }
++ return uvc_ioctl_ctrl_map(arg, cmd == UVCIOC_CTRL_MAP_OLD);
+
+ case UVCIOC_CTRL_GET:
+ return uvc_xu_ctrl_query(chain, arg, 0);
+diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h
+index d1f8840..14f77e4 100644
+--- a/drivers/media/video/uvc/uvcvideo.h
++++ b/drivers/media/video/uvc/uvcvideo.h
+@@ -27,6 +27,8 @@
+ #define UVC_CONTROL_RESTORE (1 << 6)
+ /* Control can be updated by the camera. */
+ #define UVC_CONTROL_AUTO_UPDATE (1 << 7)
++/* Control is an extension unit control. */
++#define UVC_CONTROL_EXTENSION (1 << 8)
+
+ #define UVC_CONTROL_GET_RANGE (UVC_CONTROL_GET_CUR | UVC_CONTROL_GET_MIN | \
+ UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | \
+@@ -40,6 +42,15 @@ struct uvc_xu_control_info {
+ __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];
+@@ -50,6 +61,11 @@ struct uvc_xu_control_mapping {
+ __u8 offset;
+ enum v4l2_ctrl_type v4l2_type;
+ __u32 data_type;
++
++ struct uvc_menu_info __user *menu_info;
++ __u32 menu_count;
++
++ __u32 reserved[4];
+ };
+
+ struct uvc_xu_control {
+@@ -60,6 +76,7 @@ struct uvc_xu_control {
+ };
+
+ #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)
+@@ -198,11 +215,6 @@ struct uvc_streaming_control {
+ __u8 bMaxVersion;
+ };
+
+-struct uvc_menu_info {
+- __u32 value;
+- __u8 name[32];
+-};
+-
+ struct uvc_control_info {
+ struct list_head list;
+ struct list_head mappings;
+@@ -625,6 +637,7 @@ extern int uvc_ctrl_init_device(struct uvc_device *dev);
+ extern void uvc_ctrl_cleanup_device(struct uvc_device *dev);
+ extern int uvc_ctrl_resume_device(struct uvc_device *dev);
+ extern void uvc_ctrl_init(void);
++extern void uvc_ctrl_cleanup(void);
+
+ extern int uvc_ctrl_begin(struct uvc_video_chain *chain);
+ extern int __uvc_ctrl_commit(struct uvc_video_chain *chain, int rollback);
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Fri, 25 Jun 2010 07:58:43 +0000 (+0200)
+Subject: uvcvideo: Add support for Manta MM-353 Plako
+X-Git-Url: http://git.linuxtv.org/pinchartl/uvcvideo.git?a=commitdiff_plain;h=352e661e1f347390a86cf34bc5e41adbdd1caa41
+
+uvcvideo: Add support for Manta MM-353 Plako
+
+The camera requires the PROBE_MINMAX quirk. Add a corresponding entry
+in the device IDs list
+
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+---
+
+diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
+index 34818c1..1a89384 100644
+--- a/drivers/media/video/uvc/uvc_driver.c
++++ b/drivers/media/video/uvc/uvc_driver.c
+@@ -2174,6 +2174,15 @@ static struct usb_device_id uvc_ids[] = {
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 0,
+ .driver_info = UVC_QUIRK_PROBE_EXTRAFIELDS },
++ /* Manta MM-353 Plako */
++ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
++ | USB_DEVICE_ID_MATCH_INT_INFO,
++ .idVendor = 0x18ec,
++ .idProduct = 0x3188,
++ .bInterfaceClass = USB_CLASS_VIDEO,
++ .bInterfaceSubClass = 1,
++ .bInterfaceProtocol = 0,
++ .driver_info = UVC_QUIRK_PROBE_MINMAX },
+ /* FSC WebCam V30S */
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
+ | USB_DEVICE_ID_MATCH_INT_INFO,
OpenPOWER on IntegriCloud