From: Hans de Goede Date: Wed, 19 May 2010 23:15:00 +0000 (-0300) Subject: V4L/DVB: uvcvideo: Make button controls work properly X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3653639e5daf2ac5f4763e4f1b6cb57538184be9;p=openwrt%2Fstaging%2Fblogic.git V4L/DVB: 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 Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c index fcfcfbce0a2d..4e6d484911fe 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;