I tried to debug this issue, and I can report that with fixes, my webcam is now 
functional with kernels 6.17.0-14 and 6.17.0-19. Both kernels would break 
webcam functionality without the following fixes. The following info and the 
debug process is facilitated by LLM.
 
 

== Root Cause of the breakage ==

The regression is caused by CONFIG_INTEL_SKL_INT3472=m being enabled in
6.17.0-14 onward kernels, whereas it was previously unset in 6.17.0-12.
All other camera-relevant configs are identical between the two
versions.

Hardware: Dell XPS 13 9350 (2024), Intel Lunar Lake Ultra 5 226V, OV02C10 
camera sensor via IPU7 + USBIO bridge.
 

== What happens ==

After the change in CONFIG_INTEL_SKL_INT3472, three issues compound to
break the webcam:

1. The int3472-discrete driver now loads and claims the INT3472:00 ACPI
device, but does not support GPIO type 0x02 used on IPU7/USBIO Lunar
Lake platforms. It logs "GPIO type 0x02 unknown; the sensor may not
work" but continues with a broken GPIO configuration, interfering with
USBIO-based sensor power management. Because int3472 never calls
acpi_dev_clear_dependencies() on failure, fw_devlink permanently blocks
the sensor from probing. The ov02c10 driver returns EPROBE_DEFER (-517)
indefinitely.

2. Even with int3472 fixed, ov02c10 probes the sensor over I2C before
the IPU7 ISYS driver has powered it through USBIO, resulting in "chip id
mismatch: 560243!=0". On 6.17.0-12, ISYS powered the sensor first and
then bound ov02c10 at the correct time. On 6.17.0-14+, the probe order
is wrong.

3. Ubuntu ships both an in-tree ov02c10.ko (kernel/drivers/media/i2c/)
and an out-of-tree version (ubuntu/ipu7/). Since the new race condition
introduced in 6.17.0-14 onward in (2) requires adding softdep to
/etc/modprobe.d./ to ensure the correct probe order, the in-tree
ov02c10.ko becomes an issue because it does not respect the softdep load
ordering.

On 6.17.0-12, with CONFIG_INTEL_SKL_INT3472 not set, none of these issues 
existed because:
1) fw_devlink skipped the INT3472 dependency entirely,
2) ISYS powered the sensor before ov02c10 is probed, 
3) since no softdep fix is necessary, no conflict between in-tree and 
out-of-tree ov02c10.ko modules.

 
 
== Fix that got webcam working again for me ==

1. Patched drivers/platform/x86/intel/int3472/discrete.c with two
changes: (a) made the unknown GPIO type default case in
skl_int3472_handle_gpio_resources() return -EINVAL instead of
continuing, so int3472 aborts probe and cleans up its GPIO resources;
(b) added acpi_dev_clear_dependencies(adev) to the non-deferred failure
path in skl_int3472_discrete_probe(), so fw_devlink unblocks dependent
devices when int3472 fails.

2. Added "softdep ov02c10 pre: intel-ipu7-isys" to /etc/modprobe.d/ to
ensure the ISYS driver loads and powers the sensor before ov02c10
probes.

3. Removed the in-tree ov02c10.ko from kernel/drivers/media/i2c/ so the
out-of-tree version from ubuntu/ipu7/ (which respects the softdep) is
the only one loaded.

== Proposed fix ==

1. Patch int3472-discrete so that unsupported GPIO types cause a clean
probe failure with acpi_dev_clear_dependencies() called, rather than
silently continuing and permanently blocking fw_devlink for dependent
devices.

2. Resolve the ov02c10 probe race condition on IPU7/USBIO platforms.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2142995

Title:
  Webcam stopped working for Dell XPS 13 9350 after kernel 6.17.0-14
  update

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+bug/2142995/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to