hi Mauro:
It sounds to me that this is an application bug, not a Kernel one.
What applications have such bug?
??? This is a testing application produced by a third-party company, and the modification is mainly aimed at improving compatibility.
??? And retaining nodes has no harm and is more suitable for application scenarios.
--------------
ccc194101@163.com
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