Public bug reported: [Impact]
On Intel IPU3 devices whose camera module uses a DW9719 voice-coil focus motor (e.g. Microsoft Surface Go 2), no cameras work at all on the 7.0 kernel. libcamera enumerates zero cameras, so no application can use the webcam. This is a regression. Kernels up to and including 6.14 are unaffected, and the fix is already in mainline. [Test Case] On a Surface Go 2 running Zorin OS 18.1 (Ubuntu 24.04 base), kernel 7.0.0-28-generic: $ cam -l [0:17:42.116034117] [7128] INFO Camera camera_manager.cpp:284 libcamera v0.2.0 Available cameras: $ No cameras, despite all three sensors probing successfully: $ dmesg | grep ipu3-cio2 ipu3-cio2 0000:00:14.3: Found supported sensor INT33BE:00 ipu3-cio2 0000:00:14.3: Found supported sensor INT347A:00 ipu3-cio2 0000:00:14.3: Found supported sensor INT347E:00 ipu3-cio2 0000:00:14.3: Connected 3 cameras The focus motor is unbound: $ cat /sys/bus/i2c/devices/i2c-INT347A:00-VCM/name dw9719 $ cat /sys/bus/i2c/devices/i2c-INT347A:00-VCM/modalias i2c:dw9719 $ ls /sys/bus/i2c/devices/i2c-INT347A:00-VCM/driver ls: cannot access '...': No such file or directory because dw9719.ko exports no matching alias: $ modinfo dw9719 | grep ^alias alias: of:N*T*Cdongwoon,dw9800kC* alias: of:N*T*Cdongwoon,dw9800k ... <- OF aliases only, no "i2c:dw9719" Consequently the media graph is never completed: $ media-ctl -d /dev/media1 -p - entity 1: ipu3-csi2 0 (2 pads, 1 link, 0 routes) <- no device node - entity 37: ov8865 2-0010 (1 pad, 0 link, 0 routes) <- zero links - entity 39: ov7251 3-0060 (1 pad, 0 link, 0 routes) - entity 41: ov5693 4-0036 (1 pad, 0 link, 0 routes) [Regression Details] Introduced by: commit 15faf0fa1472d1da301498a2e33cdaffe84bc4f1 "media: i2c: dw9719: Remove unused i2c device id table" Author: Andre Apitzsch <[email protected]>, 2025-09-20 which removed dw9719_id_table and the .id_table pointer as part of the rework adding DW9718S/DW9761/DW9800K support and switching the driver to OF matching. The table was not unused. ipu_bridge instantiates these VCMs as plain I2C clients with no OF node and no ACPI "compatible" property, so an of_match_table can never match them; the i2c device ID table was the only thing that ever did. With it gone, udev's "modprobe i2c:dw9719" matches nothing, the module is never loaded, and even a manual bind fails with -ENODEV because i2c_device_match() has nothing to match on. Fixed upstream by: commit d7fe0d53b2a8b08f6042cc89315118dee49e072e "media: dw9719: Add back the I2C device id table" Author: Sakari Ailus <[email protected]>, 2026-03-26 [Why an unbound focus motor disables the whole camera stack] This is why the symptom looks unrelated to the cause. ipu_bridge gives the sensor a "lens-focus" fwnode property referencing the VCM. v4l2_async_register_subdev_sensor() parses that property and registers a sub-notifier on the sensor, waiting for the VCM subdev. v4l2_async_nf_can_complete() recurses into sub-notifiers, so one pending child blocks its parent: dw9719 never autoloads (no i2c:dw9719 alias) -> VCM i2c client never binds -> ov8865's lens-focus sub-notifier never completes -> ipu3-cio2's root notifier can never complete -> cio2_notifier_complete() never runs -> no sensor->CSI-2 links, no CSI-2 subdev nodes -> libcamera finds no usable sensor: zero cameras So an unbound autofocus motor takes out every camera on the machine, including the front webcam, which has no VCM of its own. [Fix] Cherry-pick d7fe0d53b2a8 into the 7.0 kernel. It is a self-contained addition of the id_table and MODULE_DEVICE_TABLE(i2c, ...), with no dependencies. [Verification] Building the fixed upstream dw9719.c as a DKMS module on the affected system resolves it completely: the VCM binds, the notifier completes, media links appear, and libcamera enumerates both cameras. Reverting reproduces the failure. Working reproducer, diagnostics and full analysis: https://github.com/JackInSightsV2/Surface-Go-2---Camera-Fix-for-Zorin-18.1 [Other Info] Not Surface-specific: any IPU3 device with an ACPI-enumerated DW9719 (or DW9718S/DW9761/DW9800K, all in the same table) is affected on 7.0. Reported against Zorin OS 18.1, which uses the Ubuntu 24.04 archive and the same 7.0.0-28-generic kernel package. Reproducible on stock Ubuntu with the same kernel and hardware. ** Affects: linux (Ubuntu) Importance: Undecided Status: New ** Tags: kernel-bug noble regression-release ** Attachment added: "diagnostic, version logs" https://bugs.launchpad.net/bugs/2162045/+attachment/5987607/+files/logs.zip -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2162045 Title: linux 7.0: dw9719 VCM never binds, disabling all IPU3 cameras (regression, fixed upstream) To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2162045/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
