Hi Ricardo, Thank you for the patch. On Mon, Jan 24, 2022 at 08:00:12PM +0100, Ricardo Ribalda wrote: > Examine the stream headers to figure out if the device has a GPIO and > can be used as an input. > > Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> > --- > drivers/media/usb/uvc/uvc_status.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c > index 753c8226db70..3ef0b281ffc5 100644 > --- a/drivers/media/usb/uvc/uvc_status.c > +++ b/drivers/media/usb/uvc/uvc_status.c > @@ -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 GPIO button event if both bTriggerSupport and The UVC specification doesn't talk about GPIOs but about buttons. With s/GPIO button event/button events/ here and s/GPIO/button/ in the commit message, Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > + * 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; -- Regards, Laurent Pinchart