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
dw9719 VCM driver cannot bind on ACPI systems (missing i2c_device_id table) — blocks all cameras on Surface Book 1 (kernel 6.19.8) #2172
Device: Surface Book 1 (13.5", model without dGPU) Kernel: 6.19.8-3.surface.fc43.x86_64 (linux-surface repo, f43 packages on Fedora 44) Distro: Fedora Workstation 44 libcamera: 0.7.0 (Fedora packages, IPU3 pipeline + IPA present)
Symptom
Kernel-side IPU3 init looks completely healthy in dmesg: ipu3-cio2 reports Connected 3 cameras, all three sensors (ov5693 front, ov8865 rear, ov7251 IR)
probe successfully, the imgu firmware loads, and the bridge logs ov8865 i2c-INT347A:00: Instantiated dw9719 VCM.
However, cam --list shows no cameras. libcamera debug output ends with:
DEBUG DeviceEnumerator device_enumerator.cpp:118 Skip ipu3-csi2 0: no device node
media-ctl -p -d /dev/media0 shows the broken state: all three sensor entities
have 0 links, the ipu3-csi2 subdev entities have no device nodes, and
no /dev/v4l-subdev* nodes exist for the cio2 graph at all.
Root cause
The rear camera's focus motor (dw9719) is instantiated by ipu-bridge as a plain
i2c client named dw9719 (no ACPI companion, no OF node). The dw9719 driver in
this kernel only carries an OF match table — modinfo dw9719 shows only of:N*T*Cdongwoon,... aliases and no i2c:dw9719 alias:
alias: of:N*T*Cdongwoon,dw9719C*
alias: of:N*T*Cdongwoon,dw9719
(... only OF aliases, no i2c: alias ...)
Consequences on x86/ACPI:
module autoload via uevent never triggers
after a manual modprobe dw9719, the driver still does not bind
a manual sysfs bind fails outright: echo i2c-INT347A:00-VCM > /sys/bus/i2c/drivers/dw9719/bind → No such device
/sys/bus/i2c/devices/i2c-INT347A:00-VCM permanently has no driver bound
Since the VCM subdev never registers, the ov8865's async sub-notifier
(lens-focus) never completes, which blocks the cio2 notifier's complete() —
so no media links are created and no v4l-subdev nodes are registered for any
camera, including the otherwise functional front camera.
Fix (verified working)
Adding the missing i2c_device_id table to drivers/media/i2c/dw9719.c:
plus .id_table = dw9719_id_table, in the i2c_driver struct.
After rebuilding just this module and loading it, the VCM binds immediately
(dw9719 i2c-INT347A:00-VCM: supply vdd not found, using dummy regulator —
expected, dummy regulator is fine), the async chain completes within a second,
and libcamera registers both cameras:
Available cameras:
1: Internal back camera (\_SB_.PCI0.I2C3.CAMR)
2: Internal front camera (\_SB_.PCI0.I2C2.CAMF)
qcam shows a live image from both sensors (uncalibrated/greenish as expected).
This presumably affects every IPU3 Surface device whose rear camera uses the
dw9719 VCM on this kernel series. Happy to provide full dmesg, media-ctl -p
and libcamera debug logs if useful.
I tested the proposed change to dw9719.c - it mostly worked, in that I could see both front and rear cameras. However the rear camera was flat green (not just tinged).
Activity
r-o-i commentedon Jul 26, 2026
Same issue for me on Surface Pro 5th Edition:
Device: Surface Pro (SKU: Surface_Pro_1796)
Kernel: 6.19.8-surface-3
Distro: Ubuntu 26.04 LTS
libcamera: version (built from source (/usr/local), IPU3 pipeline + IPA present (/home/qv-104/Downloads/libcamera/build/src/ipa/ipu3/ipa_ipu3.so))
See attached file for terminal outputs for
dmesg,modinfo dw9719andmedia-ctl -pdmesg_logs.txt
I tested the proposed change to
dw9719.c- it mostly worked, in that I could see both front and rear cameras. However the rear camera was flat green (not just tinged).