Em Mon, 4 Nov 2024 10:39:47 +0800 chenchangcheng <ccc194101@xxxxxxx> escreveu: > Some applications need to check if there is an input device on the camera > before proceeding to the next step. When there is no input device, > the application will report an error. Nack. It is not mandatory for V4L2 devices to create input devices. It sounds to me that this is an application bug, not a Kernel one. What applications have such bug? > Create input device for all uvc devices with status endpoints. > and only when bTriggerSupport and bTriggerUsage are one are > allowed to report camera button. Please fix the application instead. > > Fixes: 3bc22dc66a4f ("media: uvcvideo: Only create input devs if hw supports it") Regards, Mauro > Signed-off-by: chenchangcheng <ccc194101@xxxxxxx> > --- > drivers/media/usb/uvc/uvc_status.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c > index a78a88c710e2..177640c6a813 100644 > --- a/drivers/media/usb/uvc/uvc_status.c > +++ b/drivers/media/usb/uvc/uvc_status.c > @@ -44,9 +44,6 @@ 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; > @@ -110,10 +107,12 @@ static void uvc_event_streaming(struct uvc_device *dev, > if (len <= offsetof(struct uvc_status, streaming)) > return; > > - uvc_dbg(dev, STATUS, "Button (intf %u) %s len %d\n", > - status->bOriginator, > - status->streaming.button ? "pressed" : "released", len); > - uvc_input_report_key(dev, KEY_CAMERA, status->streaming.button); > + if (uvc_input_has_button(dev)) { > + uvc_dbg(dev, STATUS, "Button (intf %u) %s len %d\n", > + status->bOriginator, > + status->streaming.button ? "pressed" : "released", len); > + uvc_input_report_key(dev, KEY_CAMERA, status->streaming.button); > + } > } else { > uvc_dbg(dev, STATUS, "Stream %u error event %02x len %d\n", > status->bOriginator, status->bEvent, len); Thanks, Mauro