Commit 3bc22dc6 authored by Ricardo Ribalda's avatar Ricardo Ribalda Committed by Laurent Pinchart
Browse files

media: uvcvideo: Only create input devs if hw supports it



Examine the stream headers to figure out if the device has a button and
can be used as an input.

Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
parent 41ddb251
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -18,11 +18,34 @@
 * Input device
 */
#ifdef CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV

static bool uvc_input_has_button(struct uvc_device *dev)
{
	struct uvc_streaming *stream;

	/*
	 * The device has button events if both bTriggerSupport and
	 * bTriggerUsage are one. Otherwise the camera button does not
	 * exist or is handled automatically by the camera without host
	 * driver or client application intervention.
	 */
	list_for_each_entry(stream, &dev->streams, list) {
		if (stream->header.bTriggerSupport == 1 &&
		    stream->header.bTriggerUsage == 1)
			return true;
	}

	return false;
}

static int uvc_input_init(struct uvc_device *dev)
{
	struct input_dev *input;
	int ret;

	if (!uvc_input_has_button(dev))
		return 0;

	input = input_allocate_device();
	if (input == NULL)
		return -ENOMEM;