Skip to content

ov5693/ov8865/ov7251 bind successfully via v4l2-async but no media links created (ipu3-cio2, Surface Book 2, 6.19.8-surface) #2220

Description

@LSTryhard

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions