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: Ricardo Ribalda <ribalda@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
41ddb251c6
commit
3bc22dc66a
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user