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@xxxxxxxxxxxxx>
Closes: https://lore.kernel.org/linux-media/518cd6b4-68a8-4895-b8fc-97d4dae1ddc4@xxxxxxxxxxxxx/T/#t
Cc: stable@xxxxxxxxxxxxxxx
Fixes: 8f4362a8d42b ("media: uvcvideo: Allow custom control mapping")
Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx>
---
Paul, could you check if this fixes your issue, thanks!
$ b4 shazam
https://lore.kernel.org/linux-media/20240722-fix-filter-mapping-v1-1-07cc9c6bf4e3@xxxxxxxxxxxx/T/#u
$ 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@xxxxxxxxxxxxx>
Kind regards,
Paul