Em Mon, 4 Nov 2024 10:39:47 +0800 chenchangcheng ccc194101@163.com 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@163.com
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