Just need some clarity on next steps; would you like me to install a particular build of Linux on the surface to test?
On Mon, 14 Sep 2026 at 07:10, Junjie Cao <[email protected]> wrote: > Verified on linux 7.0.0-38.38 from resolute-proposed. > > dw9719.ko from linux-modules-7.0.0-38-generic > 7.0.0-38.38 amd64 carries the I2C aliases that the > shipping 7.0 kernels lack: > > $ modinfo dw9719.ko.zst | grep '^alias:.*i2c:' > alias: i2c:dw9800k > alias: i2c:dw9761 > alias: i2c:dw9719 > alias: i2c:dw9718s > > This is step 2 of the test plan: udev's > "modprobe i2c:dw9719" now resolves to dw9719 instead of > matching nothing, which is the failure reported here. > Setting verification-done-resolute-linux on that basis. > > Steps 3-5 (VCM bind, media-ctl links, cam -l) need an > IPU3 machine with one of these VCMs, which I do not > have. The reporter's Surface Go 2 runs a noble-based > system; linux-hwe-7.0 7.0.0-38.38~24.04.x is still in > the kernel team's build PPA and not yet in > noble-proposed. > > Stephen: once linux-hwe-7.0 7.0.0-38.38~24.04.x reaches > noble-proposed, could you boot it without the DKMS > module and run media-ctl -p and cam -l? That covers the > noble verification pass when the bot asks for it. > > ** Tags removed: kernel-bug kernel-daily-bug > kernel-spammed-resolute-linux-v2 noble regression-release > verification-needed-resolute-linux > ** Tags added: verification-done-resolute-linux > > ** Tags added: kernel-bug kernel-daily-bug kernel-spammed-resolute- > linux-v2 noble regression-release > > -- > You received this bug notification because you are subscribed to the bug > report. > https://bugs.launchpad.net/bugs/2162045 > > Title: > linux 7.0: dw9719 VCM never binds, disabling all IPU3 cameras > (regression, fixed upstream) > > Status in linux package in Ubuntu: > New > > Bug description: > [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 > > [Where problems could occur] > > The patch adds an I2C id table and hooks it into the i2c_driver; probe > and runtime PM paths are unchanged. A wrong table entry would bind the > driver to the wrong device or pick the wrong variant data, but the four > entries mirror the driver's existing OF match table. Systems without > one of these VCMs are unaffected. > > [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. > > To manage notifications about this bug go to: > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2162045/+subscriptions > > -- 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
