Dear Ricardo,
Thank you very much for your patch.
Am 22.07.24 um 09:59 schrieb Ricardo Ribalda:
Custom control mapping introduced a bug, where the filter function was applied to every single control.
I’d paste the error messages, so the commit can be easily found.
Fix it so it is only applied to the matching controls.
Reported-by: Paul Menzen pmenzel@molgen.mpg.de Closes: https://lore.kernel.org/linux-media/518cd6b4-68a8-4895-b8fc-97d4dae1ddc4@mol... Cc: stable@vger.kernel.org Fixes: 8f4362a8d42b ("media: uvcvideo: Allow custom control mapping") Signed-off-by: Ricardo Ribalda ribalda@chromium.org
Paul, could you check if this fixes your issue, thanks!
$ b4 shazam https://lore.kernel.org/linux-media/20240722-fix-filter-mapping-v1-1-07cc9c6... $ git log --oneline -2 1391c45f04fb (HEAD -> master) media: uvcvideo: Fix custom control mapping probing 933069701c1b (origin/master, origin/HEAD) Merge tag '6.11-rc-smb3-server-fixes' of git://git.samba.org/ksmbd
Yes, it does fix it on the Dell XPS 13 9360:
$ sudo dmesg --level alert,crit,err,warn [ 0.293264] hpet_acpi_add: no address or irqs in _CRS [ 0.340614] i8042: Warning: Keylock active [ 0.352146] ENERGY_PERF_BIAS: Set to 'normal', was 'performance' [ 1.680610] device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be recorded in the IMA log. [ 9.012306] wmi_bus wmi_bus-PNP0C14:01: [Firmware Bug]: WQBC data block query control method not found [ 9.955744] Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
drivers/media/usb/uvc/uvc_ctrl.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0136df5732ba..06fede57bf36 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2680,6 +2680,10 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain, for (i = 0; i < ARRAY_SIZE(uvc_ctrl_mappings); ++i) { const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i];
if (!(uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
ctrl->info.selector == mapping->selector))
continue;
- /* Let the device provide a custom mapping. */ if (mapping->filter_mapping) { mapping = mapping->filter_mapping(chain, ctrl);
@@ -2687,9 +2691,7 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain, continue; }
if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
ctrl->info.selector == mapping->selector)
__uvc_ctrl_add_mapping(chain, ctrl, mapping);
} }__uvc_ctrl_add_mapping(chain, ctrl, mapping);
So the check was just too late. Thank you for fixing it.
Tested-by: Paul Menzel pmenzel@molgen.mpg.de
Kind regards,
Paul