Who:   Jean Delvare <khali@linux-fr.org>
 
 ----------------------------
+
+What:  Support for UVCIOC_CTRL_ADD in the uvcvideo driver
+When:  2.6.42
+Why:   The information passed to the driver by this ioctl is now queried
+       dynamically from the device.
+Who:   Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+
+----------------------------
+
+What:  Support for UVCIOC_CTRL_MAP_OLD in the uvcvideo driver
+When:  2.6.42
+Why:   Used only by applications compiled against older driver versions.
+       Superseded by UVCIOC_CTRL_MAP which supports V4L2 menu controls.
+Who:   Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+
+----------------------------
+
+What:  Support for UVCIOC_CTRL_GET and UVCIOC_CTRL_SET in the uvcvideo driver
+When:  2.6.42
+Why:   Superseded by the UVCIOC_CTRL_QUERY ioctl.
+Who:   Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+
+----------------------------
 
        return 0;
 }
 
+static void uvc_v4l2_ioctl_warn(void)
+{
+       static int warned;
+
+       if (warned)
+               return;
+
+       uvc_printk(KERN_INFO, "Deprecated UVCIOC_CTRL_{ADD,MAP_OLD,GET,SET} "
+                  "ioctls will be removed in 2.6.42.\n");
+       uvc_printk(KERN_INFO, "See http://www.ideasonboard.org/uvc/upgrade/ "
+                  "for upgrade instructions.\n");
+       warned = 1;
+}
+
 static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 {
        struct video_device *vdev = video_devdata(file);
                uvc_trace(UVC_TRACE_IOCTL, "Unsupported ioctl 0x%08x\n", cmd);
                return -EINVAL;
 
-       /* Dynamic controls. */
+       /* Dynamic controls. UVCIOC_CTRL_ADD, UVCIOC_CTRL_MAP_OLD,
+        * UVCIOC_CTRL_GET and UVCIOC_CTRL_SET are deprecated and scheduled for
+        * removal in 2.6.42.
+        */
        case UVCIOC_CTRL_ADD:
-               /* Legacy ioctl, kept for API compatibility reasons */
+               uvc_v4l2_ioctl_warn();
                return -EEXIST;
 
        case UVCIOC_CTRL_MAP_OLD:
+               uvc_v4l2_ioctl_warn();
        case UVCIOC_CTRL_MAP:
                return uvc_ioctl_ctrl_map(chain, arg,
                                          cmd == UVCIOC_CTRL_MAP_OLD);
                        .data           = xctrl->data,
                };
 
+               uvc_v4l2_ioctl_warn();
                return uvc_xu_ctrl_query(chain, &xqry);
        }