You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Cameras (IPU3): dw9719 VCM driver no longer binds on 6.19+ kernels — kills all cameras (missing i2c ID table) #2225
Device: Surface Pro 5 (Surface_Pro_1796), i5-7300U
Kernel: 6.19.8-surface-3 (from pkg.surfacelinux.com) — regression confirmed vs 6.14, whose dw9719 module still binds
Distro: Linux Mint 22.3 (Ubuntu 24.04 base)
Userspace: libcamera 0.3.0 with IPU3 pipeline (source build)
Summary
On 6.19-based surface kernels, all IPU3 cameras disappear (cam -l lists
nothing) because the dw9719 focus-motor (VCM) driver no longer binds to the
VCM i2c client that ipu-bridge instantiates. The sensor's swnode references
the VCM via lens-focus, so the cio2 async notifier never completes: no
sensor→CSI-2 media links are created, no sensor subdev nodes appear, and
libcamera registers zero cameras — including the front camera, which has no
VCM of its own.
Root cause
ipu_bridge_instantiate_vcm() creates the VCM i2c client with plain board-info
type "dw9719" (modalias i2c:dw9719). The current drivers/media/i2c/dw9719.c
only carries an OF match table (dongwoon,dw9719 etc.) and has no i2c_device_id table, so i2c core matching never succeeds:
$ cat /sys/bus/i2c/devices/i2c-INT347A:00-VCM/modalias
i2c:dw9719
$ modinfo dw9719 | grep '^alias'
alias: of:N*T*Cdongwoon,dw9800k... (of: aliases only, no i2c: alias)
$ ls -l /sys/bus/i2c/devices/i2c-INT347A:00-VCM/driver
ls: cannot access ...: No such file or directory <- never binds
Media graph state while broken (note sensors with 0 links):
For comparison, the 6.14 (Ubuntu generic) dw9719 module still has the i2c:dw9719 alias, and binding works there.
Fix (verified on the affected device)
Restoring the ID table makes the driver bind immediately; the notifier then
completes, links appear, and both cameras register and stream (verified with
libcamera + Cheese/Zoom via v4l2loopback):
(dw9719_probe() already uses i2c_get_match_data(), so the id-table driver_data slots in cleanly.)
Impact / affected devices
Any IPU3 device whose SSDB declares a dw9719-family VCM — at minimum the
Surface Pro 5/6 rear camera (ov8865 + dw9719). Devices with other VCM types
listed in ipu_vcm_types[] may be affected by the same OF-only pattern if
their drivers lost i2c ID tables too.
Ask
Could linux-surface carry this (tiny) patch in its kernel builds until it
lands upstream?
Happy to send the patch to linux-media upstream if that helps — guidance
welcome.
Workaround for users (until patched kernels ship)
A DKMS module that rebuilds the patched driver per-kernel works well; a
write-up with scripts is here: [DISCUSSION POST]
The missing device table has been added back to the main linux kernel from version 7.1.6.
Hopefully, the linux-surface kernels will get updated and bring back ipu3 camera support.
I tested Fedora 44 with its latest kernel (7.1.8) and cameras are back in my Surface Go 3, although the "green image" when using the rear camera is still there.
Activity
mfa-nw commentedon Aug 9, 2026
The missing device table has been added back to the main linux kernel from version 7.1.6.
Hopefully, the linux-surface kernels will get updated and bring back ipu3 camera support.
rocky-III commentedon Aug 19, 2026
#2123
dap39 commentedon Aug 20, 2026
I tested Fedora 44 with its latest kernel (7.1.8) and cameras are back in my Surface Go 3, although the "green image" when using the rear camera is still there.