Hardware: Microsoft Surface Book 2
Kernel: 6.19.8-arch1-3-surface (Arch/CachyOS, linux-cachyos-surface)
Sensors: ov5693 (front, INT33BE), ov8865 (rear, INT347A), ov7251 (IR, INT347E)
Symptom: cam --list (libcamera) lists no cameras, even though ipu3-cio2 correctly detects all 3 sensors.
Step 1 — wrong kernel ruled out:
Initially running the stock CachyOS kernel (7.1.5-1-cachyos), without linux-surface patches. Fixed by explicitly booting into the -surface kernel.
Step 2 — dummy regulator (false lead):
On a normal boot, the log shows:
ov5693 i2c-INT33BE:00: supply avdd not found, using dummy regulator
ov5693 i2c-INT33BE:00: supply dovdd not found, using dummy regulator
ov5693 i2c-INT33BE:00: supply dvdd not found, using dummy regulator
followed by total silence — no chip-ID, no error, no probe-defer. Initially suspected as the root cause, but later confirmed not to be (see Step 4).
Step 3 — media topology shows no links:
media-ctl -d /dev/media0 -p shows all 3 sensors present as entities, but all with 0 link:
entity 37: ov5693 2-0036 (1 pad, 0 link, 0 routes) — pad0: SOURCE
entity 39: ov8865 3-0010 (1 pad, 0 link, 0 routes) — pad0: SOURCE
entity 41: ov7251 3-0060 (1 pad, 0 link, 0 routes) — pad0: SOURCE
Attempting to manually create the link via media-ctl -l fails with Unable to parse link: Invalid argument (22) on all ipu3-csi2 0 through 3 ports — expected, since there is no existing link object in the graph to enable/disable in the first place.
Step 4 — successful bind, but no link creation:
With dynamic_debug enabled on ipu_bridge, ipu3_cio2, and v4l2_async, forcing an unbind/bind of the PCI device (0000:00:14.3):
v4l2-async: match found, subdev ov5693 2-0036
v4l2-async: i2c-INT33BE:00 bound (ret 0)
v4l2-async: match found, subdev ov8865 3-0010
v4l2-async: i2c-INT347A:00 bound (ret 0)
v4l2-async: match found, subdev ov7251 3-0060
v4l2-async: i2c-INT347E:00 bound (ret 0)
All three sensors match and bind successfully (ret 0) — this time without the dummy-regulator messages. Immediately followed by:
cio2 runtime suspend.
with no error, warning, or debug message between the last sensor bind and the suspend. ipu_bridge didn't expose any dynamic_debug callsites (module loaded, but no instrumented log points).
Current state: all 3 sensors bind correctly to the v4l2-async notifier, but the function responsible for creating the physical media links (inside ipu3-cio2/ipu_bridge) either doesn't run or fails silently — with no traceable log output. media-ctl -p still shows 0 link for all 3 sensors after the full process completes.
Hardware: Microsoft Surface Book 2
Kernel: 6.19.8-arch1-3-surface (Arch/CachyOS, linux-cachyos-surface)
Sensors: ov5693 (front, INT33BE), ov8865 (rear, INT347A), ov7251 (IR, INT347E)
Symptom: cam --list (libcamera) lists no cameras, even though ipu3-cio2 correctly detects all 3 sensors.
Step 1 — wrong kernel ruled out:
Initially running the stock CachyOS kernel (7.1.5-1-cachyos), without linux-surface patches. Fixed by explicitly booting into the -surface kernel.
Step 2 — dummy regulator (false lead):
On a normal boot, the log shows:
ov5693 i2c-INT33BE:00: supply avdd not found, using dummy regulator
ov5693 i2c-INT33BE:00: supply dovdd not found, using dummy regulator
ov5693 i2c-INT33BE:00: supply dvdd not found, using dummy regulator
followed by total silence — no chip-ID, no error, no probe-defer. Initially suspected as the root cause, but later confirmed not to be (see Step 4).
Step 3 — media topology shows no links:
media-ctl -d /dev/media0 -p shows all 3 sensors present as entities, but all with 0 link:
entity 37: ov5693 2-0036 (1 pad, 0 link, 0 routes) — pad0: SOURCE
entity 39: ov8865 3-0010 (1 pad, 0 link, 0 routes) — pad0: SOURCE
entity 41: ov7251 3-0060 (1 pad, 0 link, 0 routes) — pad0: SOURCE
Attempting to manually create the link via media-ctl -l fails with Unable to parse link: Invalid argument (22) on all ipu3-csi2 0 through 3 ports — expected, since there is no existing link object in the graph to enable/disable in the first place.
Step 4 — successful bind, but no link creation:
With dynamic_debug enabled on ipu_bridge, ipu3_cio2, and v4l2_async, forcing an unbind/bind of the PCI device (0000:00:14.3):
v4l2-async: match found, subdev ov5693 2-0036
v4l2-async: i2c-INT33BE:00 bound (ret 0)
v4l2-async: match found, subdev ov8865 3-0010
v4l2-async: i2c-INT347A:00 bound (ret 0)
v4l2-async: match found, subdev ov7251 3-0060
v4l2-async: i2c-INT347E:00 bound (ret 0)
All three sensors match and bind successfully (ret 0) — this time without the dummy-regulator messages. Immediately followed by:
cio2 runtime suspend.
with no error, warning, or debug message between the last sensor bind and the suspend. ipu_bridge didn't expose any dynamic_debug callsites (module loaded, but no instrumented log points).
Current state: all 3 sensors bind correctly to the v4l2-async notifier, but the function responsible for creating the physical media links (inside ipu3-cio2/ipu_bridge) either doesn't run or fails silently — with no traceable log output. media-ctl -p still shows 0 link for all 3 sensors after the full process completes.