Skip to content

Surface Book 1 Camera not working #2208

Description

@Stanman67

Hi,
Not technical and with the help of google and Claude have tried to get the camera to work but not been able to.
Any help gratefully received. The below was drfated by Claude.Ai

Title: Surface Book 1 camera: ipu3-csi2 subdev entities have no /dev/v4l-subdev device nodes, preventing libcamera IPU3 pipeline from registering cameras

Environment:

Device: Surface Book (1st gen)
Distro: Fedora 43
Kernel: 6.19.8-3.surface.fc43.x86_64
libcamera: 0.7.1-1.fc44
Secure Boot: disabled

Summary:
All three sensors (ov5693, ov8865, ov7251) probe successfully and firmware loads correctly, but libcamera's ipu3 pipeline handler cannot register any cameras. Root cause traced to: the ipu3-csi2 0–3 subdev entities in the CIO2 media graph have no corresponding /dev/v4l-subdev* device nodes (only 2 subdev nodes exist total, both belonging to ipu3-imgu, not ipu3-cio2). This causes libcamera to skip them with Skip ipu3-csi2 0: no device node, and consequently the sensor-to-CSI2 media links are never established (media-ctl -p shows 0 link on all three sensor pads).

Steps to reproduce:

Fresh boot, no manual module reloads
ls -la /dev/v4l-subdev* → only v4l-subdev0/v4l-subdev1 (imgu), none for csi2
sudo media-ctl -d /dev/media0 -p → sensor entities show 0 link
LIBCAMERA_LOG_LEVELS=*:0 cam --list → Skip ipu3-csi2 0: no device node, no cameras registered

Full diagnostic dump: @Surfacy:~$ cat ~/camera-debug.txt
=== Model ===
Surface Book
=== Kernel ===
6.19.8-3.surface.fc43.x86_64
=== dmesg cio2/sensor ===
[ 7.902689] ov8865 i2c-INT347A:00: supply dvdd not found, using dummy regulator
[ 7.903487] ov8865 i2c-INT347A:00: supply dovdd not found, using dummy regulator
[ 7.903508] ov8865 i2c-INT347A:00: supply avdd not found, using dummy regulator
[ 7.921426] ov8865 i2c-INT347A:00: supply dvdd not found, using dummy regulator
[ 7.921492] ov8865 i2c-INT347A:00: supply dovdd not found, using dummy regulator
[ 7.921513] ov8865 i2c-INT347A:00: supply avdd not found, using dummy regulator
[ 7.943473] ipu3_imgu: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.948017] ipu3-imgu 0000:00:05.0: enabling device (0000 -> 0002)
[ 7.948234] ipu3-imgu 0000:00:05.0: device 0x1919 (rev: 0x1)
[ 7.948265] ipu3-imgu 0000:00:05.0: physical base address 0x00000000a1000000, 4194304 bytes
[ 7.950802] ipu3-cio2 0000:00:14.3: Found supported sensor INT33BE:00
[ 7.963785] ipu3-cio2 0000:00:14.3: Found supported sensor INT347A:00
[ 7.973358] ipu3-cio2 0000:00:14.3: Found supported sensor INT347E:00
[ 7.973665] ipu3-cio2 0000:00:14.3: Connected 3 cameras
[ 7.973685] ipu3-cio2 0000:00:14.3: enabling device (0000 -> 0002)
[ 7.973894] ipu3-cio2 0000:00:14.3: device 0x9d32 (rev: 0x1)
[ 7.979276] ov8865 i2c-INT347A:00: supply dvdd not found, using dummy regulator
[ 7.982433] ov8865 i2c-INT347A:00: supply dovdd not found, using dummy regulator
[ 7.982464] ov8865 i2c-INT347A:00: supply avdd not found, using dummy regulator
[ 7.982820] ov7251 i2c-INT347E:00: supply vdddo not found, using dummy regulator
[ 7.982867] ov7251 i2c-INT347E:00: supply vddd not found, using dummy regulator
[ 7.982891] ov7251 i2c-INT347E:00: supply vdda not found, using dummy regulator
[ 7.987807] ipu3-cio2 0000:00:14.3: cio2 runtime suspend.
[ 7.989084] ov7251 i2c-INT347E:00: OV7251 revision 7 (1F) detected at address 0x60
[ 7.989947] ov5693 i2c-INT33BE:00: supply avdd not found, using dummy regulator
[ 7.990005] ov5693 i2c-INT33BE:00: supply dovdd not found, using dummy regulator
[ 7.990018] ov5693 i2c-INT33BE:00: supply dvdd not found, using dummy regulator
[ 8.100263] ov8865 i2c-INT347A:00: Instantiated dw9719 VCM
[ 8.106671] ipu3-imgu 0000:00:05.0: loaded firmware version irci_irci_ecr-master_20161208_0213_20170112_1500, 17 binaries, 1212984 bytes
=== media-ctl ===
Media controller API version 6.19.8

Media device information

driver ipu3-cio2
model Intel IPU3 CIO2
serial
bus info PCI:0000:00:14.3
hw revision 0x0
driver version 6.19.8

Device topology

  • entity 1: ipu3-csi2 0 (2 pads, 1 link, 0 routes)
    type V4L2 subdev subtype Unknown flags 0
    pad0: SINK,MUST_CONNECT
    pad1: SOURCE
    -> "ipu3-cio2 0":0 [ENABLED,IMMUTABLE]

  • entity 4: ipu3-cio2 0 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video0
    pad0: SINK,MUST_CONNECT
    <- "ipu3-csi2 0":1 [ENABLED,IMMUTABLE]

  • entity 10: ipu3-csi2 1 (2 pads, 1 link, 0 routes)
    type V4L2 subdev subtype Unknown flags 0
    pad0: SINK,MUST_CONNECT
    pad1: SOURCE
    -> "ipu3-cio2 1":0 [ENABLED,IMMUTABLE]

  • entity 13: ipu3-cio2 1 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video1
    pad0: SINK,MUST_CONNECT
    <- "ipu3-csi2 1":1 [ENABLED,IMMUTABLE]

  • entity 19: ipu3-csi2 2 (2 pads, 1 link, 0 routes)
    type V4L2 subdev subtype Unknown flags 0
    pad0: SINK,MUST_CONNECT
    pad1: SOURCE
    -> "ipu3-cio2 2":0 [ENABLED,IMMUTABLE]

  • entity 22: ipu3-cio2 2 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video2
    pad0: SINK,MUST_CONNECT
    <- "ipu3-csi2 2":1 [ENABLED,IMMUTABLE]

  • entity 28: ipu3-csi2 3 (2 pads, 1 link, 0 routes)
    type V4L2 subdev subtype Unknown flags 0
    pad0: SINK,MUST_CONNECT
    pad1: SOURCE
    -> "ipu3-cio2 3":0 [ENABLED,IMMUTABLE]

  • entity 31: ipu3-cio2 3 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video3
    pad0: SINK,MUST_CONNECT
    <- "ipu3-csi2 3":1 [ENABLED,IMMUTABLE]

  • entity 37: ov8865 3-0010 (1 pad, 0 link, 0 routes)
    type V4L2 subdev subtype Sensor flags 0
    pad0: SOURCE

  • entity 39: ov7251 3-0060 (1 pad, 0 link, 0 routes)
    type V4L2 subdev subtype Sensor flags 0
    pad0: SOURCE

  • entity 41: ov5693 2-0036 (1 pad, 0 link, 0 routes)
    type V4L2 subdev subtype Sensor flags 0
    pad0: SOURCE

=== v4l-subdev nodes ===
crw-rw----+ 1 root video 81, 14 Jul 21 15:56 /dev/v4l-subdev0
crw-rw----+ 1 root video 81, 15 Jul 21 15:56 /dev/v4l-subdev1
=== cam debug ===
[0:09:10.247578528] [4490] INFO Camera camera_manager.cpp:340 libcamera v0.7.1
[0:09:10.247849047] [4532] DEBUG Camera camera_manager.cpp:73 Starting camera manager
[0:09:10.248067772] [4532] DEBUG IPAModule ipa_module.cpp:333 ipa_ipu3.so: IPA module /usr/lib64/libcamera/ipa/ipa_ipu3.so is signed
[0:09:10.248133185] [4532] DEBUG IPAManager ipa_manager.cpp:240 Loaded IPA module '/usr/lib64/libcamera/ipa/ipa_ipu3.so'
[0:09:10.248226709] [4532] DEBUG IPAModule ipa_module.cpp:333 ipa_soft_simple.so: IPA module /usr/lib64/libcamera/ipa/ipa_soft_simple.so is signed
[0:09:10.248275573] [4532] DEBUG IPAManager ipa_manager.cpp:240 Loaded IPA module '/usr/lib64/libcamera/ipa/ipa_soft_simple.so'
[0:09:10.248341151] [4532] DEBUG IPAModule ipa_module.cpp:333 ipa_vimc.so: IPA module /usr/lib64/libcamera/ipa/ipa_vimc.so is signed
[0:09:10.248380406] [4532] DEBUG IPAManager ipa_manager.cpp:240 Loaded IPA module '/usr/lib64/libcamera/ipa/ipa_vimc.so'
[0:09:10.265707227] [4532] DEBUG DeviceEnumerator device_enumerator.cpp:267 New media device "ipu3-imgu" created from /dev/media1
[0:09:10.265765049] [4532] DEBUG DeviceEnumerator device_enumerator_udev.cpp:109 Defer media device /dev/media1 due to 12 missing dependencies
[0:09:10.272871620] [4532] DEBUG DeviceEnumerator device_enumerator_udev.cpp:344 All dependencies for media device /dev/media1 found
[0:09:10.272918197] [4532] DEBUG DeviceEnumerator device_enumerator.cpp:295 Added device /dev/media1: ipu3-imgu
[0:09:10.273200567] [4532] DEBUG DeviceEnumerator device_enumerator.cpp:267 New media device "ipu3-cio2" created from /dev/media0
[0:09:10.273225078] [4532] DEBUG DeviceEnumerator device_enumerator_udev.cpp:109 Defer media device /dev/media0 due to 4 missing dependencies
[0:09:10.275032876] [4532] DEBUG DeviceEnumerator device_enumerator_udev.cpp:344 All dependencies for media device /dev/media0 found
[0:09:10.275056479] [4532] DEBUG DeviceEnumerator device_enumerator.cpp:295 Added device /dev/media0: ipu3-cio2
[0:09:10.275351160] [4532] DEBUG Camera camera_manager.cpp:143 Found registered pipeline handler 'ipu3'
[0:09:10.275374778] [4532] DEBUG DeviceEnumerator device_enumerator.cpp:118 Skip ipu3-csi2 0: no device node
[0:09:10.275388636] [4532] DEBUG Camera camera_manager.cpp:143 Found registered pipeline handler 'simple'
[0:09:10.275409229] [4532] DEBUG Camera camera_manager.cpp:143 Found registered pipeline handler 'uvcvideo'
[0:09:10.275420861] [4532] DEBUG Camera camera_manager.cpp:143 Found registered pipeline handler 'vimc'
[0:09:10.275432304] [4532] DEBUG Camera camera_manager.cpp:143 Found registered pipeline handler 'virtual'
[0:09:10.275457188] [4532] DEBUG DmaBufAllocator dma_buf_allocator.cpp:106 Failed to open /dev/dma_heap/linux,cma: No such file or directory
[0:09:10.275481438] [4532] DEBUG DmaBufAllocator dma_buf_allocator.cpp:106 Failed to open /dev/dma_heap/reserved: No such file or directory
[0:09:10.275530731] [4532] DEBUG DmaBufAllocator dma_buf_allocator.cpp:112 Using /dev/dma_heap/system
[0:09:10.275553689] [4532] DEBUG Virtual virtual.cpp:379 Configuration file not found, skipping virtual cameras
Available cameras:

Question for maintainers: Is this a known regression in recent kernels where ipu3-cio2 doesn't call v4l2_device_register_subdev_nodes() for CSI2 receiver subdevs, or is there a config/module option needed to enable creation of these device nodes?

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