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
Surface Pro 6 camera not working — ipu_bridge creates no CSI-2 links #2101
issue is written with claude after I tried to fix the problem with it; i'm not technologically literate enough to know what's going on.
Device: Microsoft Surface Pro 6 Kernel: 6.19.8-surface-2 OS: Linux Mint (Ubuntu 24.04 base)
Summary
The IPU3 camera pipeline does not work. The sensor drivers load and appear in the media graph, but ipu_bridge never creates links between the sensors and the CSI-2 ports, so libcamera sees an empty camera list.
What works
Kernel detects all 3 sensors: ipu3-cio2 0000:00:14.3: Connected 3 cameras
Sensor modules load: ov5693, ov8865, ov7251
Media devices /dev/media0 (ipu3-cio2) and /dev/media1 (ipu3-imgu) exist
Sensors appear in media graph as entities
What doesn't work
Sensors have 0 links in the media topology — not connected to any CSI-2 port
ipu_bridge produces no dmesg output
No INT3472 devices present: ls /sys/bus/platform/devices/INT3472* returns nothing
libcamera v0.7.1 reports: CameraMananger::cameras() is empty
The Surface Pro 6 ACPI tables do not include INT3472 PMIC entries, which ipu_bridge relies on to map sensors to CSI-2 ports. This may require a quirk or ACPI SSDT override specific to this device.
What I've tried
Built and installed libcamera v0.7.1 from source with -Dipas=ipu3 -Dpipelines=ipu3
The i2c device table for the ipu3 cameras was removed from the upstream kernel 6.19 so libcamera cannot link to the cameras. I have reported the regression upstream and am waiting to see if a patch to add back the i2c device table gets accepted. I think this may be the cause of the issue you are experiencing.
Root cause: The upstream patch "media: i2c: dw9719: Remove unused i2c device id table" (kernel 6.19) incorrectly removed the i2c_device_id table from the dw9719 VCM driver. On Surface devices, the dw9719 VCM is instantiated by the IPU bridge via I2C, so it depends on I2C device matching — without the table, the driver has no i2c:dw9719 alias and never binds.
Without the VCM bound, cio2_notifier_complete() doesn't fire, so the camera sensor entities never get V4L2 subdevice nodes, and libcamera reports no cameras.
I have the same issue with 6.19.8-surface-3 on linux mint 22.3, surface pro 6.
It did work originally ( although only getting green output ), using the apt packages in the instructions.
I tried building camera packages from source to no avail. The links were not being connected as described by @Mattttttttttttttttttttttttttttttt
Confirming the same regression — and that PR #2123 is the correct fix — on a Surface Book 2 (13"), kernel 6.19.8-arch1-3-surface, libcamera v0.7.1. Independently reproduced the full chain:
ipu3-cio2 0000:00:14.3: Connected 3 cameras; all three sensors bind to the cio2 notifier — ov5693 (INT33BE), ov8865 (INT347A), ov7251 (INT347E) all bound (ret 0).
dw9719 exposes only OF aliases (of:N*T*Cdongwoon,dw9719…) and no i2c:dw9719. The IPU-bridge-created VCM is a software_node (dw9719-0) with no of_node and no ACPI companion, so i2c_device_match() (OF → ACPI → i2c_match_id) has nothing to match. Forcing the bind returns -ENODEV.
With module ipu3_cio2 +p / file *v4l2-async* +p, after ov8865 binds it registers a lens sub-notifier and loops: need …I2C3.CAMR, trying dw9719-0 → direct match not found. Because v4l2-async completes hierarchically, cio2_notifier_complete() never fires.
Net effect: the missing i2c_device_id blocks the rear VCM, which stalls the entire notifier — so all three sensors end up with 0 link to their CSI-2 receivers (front OV5693 and IR OV7251 too, even though they have no VCM), and cam --list is empty.
Please add Surface Book 2 13" to the affected-device list. The i2c_device_id re-add in #2123 (mirroring Sakari Ailus's upstream fix) addresses this exactly.
Activity
mfa-nw commentedon May 4, 2026
The i2c device table for the ipu3 cameras was removed from the upstream kernel 6.19 so libcamera cannot link to the cameras. I have reported the regression upstream and am waiting to see if a patch to add back the i2c device table gets accepted. I think this may be the cause of the issue you are experiencing.
toor11 commentedon May 11, 2026
This has been fixed in PR #2123.
Root cause: The upstream patch "media: i2c: dw9719: Remove unused i2c device id table" (kernel 6.19) incorrectly removed the
i2c_device_idtable from the dw9719 VCM driver. On Surface devices, the dw9719 VCM is instantiated by the IPU bridge via I2C, so it depends on I2C device matching — without the table, the driver has noi2c:dw9719alias and never binds.Without the VCM bound,
cio2_notifier_complete()doesn't fire, so the camera sensor entities never get V4L2 subdevice nodes, and libcamera reports no cameras.The fix adds back the
i2c_device_idtable, based on the upstream fix from Sakari Ailus: https://lore.kernel.org/all/[email protected]/fbd-ss commentedon May 25, 2026
I have the same issue with 6.19.8-surface-3 on linux mint 22.3, surface pro 6.
It did work originally ( although only getting green output ), using the apt packages in the instructions.
I tried building camera packages from source to no avail. The links were not being connected as described by @Mattttttttttttttttttttttttttttttt
toor11 commentedon May 28, 2026
Confirming the same regression — and that PR #2123 is the correct fix — on a Surface Book 2 (13"), kernel
6.19.8-arch1-3-surface, libcamera v0.7.1. Independently reproduced the full chain:ipu3-cio2 0000:00:14.3: Connected 3 cameras; all three sensors bind to the cio2 notifier —ov5693(INT33BE),ov8865(INT347A),ov7251(INT347E) allbound (ret 0).dw9719exposes only OF aliases (of:N*T*Cdongwoon,dw9719…) and noi2c:dw9719. The IPU-bridge-created VCM is asoftware_node(dw9719-0) with noof_nodeand no ACPI companion, soi2c_device_match()(OF → ACPI →i2c_match_id) has nothing to match. Forcing the bind returns-ENODEV.module ipu3_cio2 +p/file *v4l2-async* +p, afterov8865binds it registers a lens sub-notifier and loops:need …I2C3.CAMR, trying dw9719-0 → direct match not found. Because v4l2-async completes hierarchically,cio2_notifier_complete()never fires.Net effect: the missing
i2c_device_idblocks the rear VCM, which stalls the entire notifier — so all three sensors end up with0 linkto their CSI-2 receivers (front OV5693 and IR OV7251 too, even though they have no VCM), andcam --listis empty.Please add Surface Book 2 13" to the affected-device list. The
i2c_device_idre-add in #2123 (mirroring Sakari Ailus's upstream fix) addresses this exactly.