Skip to content

Surface Go 4 IPU6 camera status: rear OV8865 detected/partially streams, front OV5693 LED only #2154

Open

Description

@Fugu0141

Description

I would like to report the current camera detection / partial streaming status for the Microsoft Surface Go 4.

Surface Go 4 appears to use Intel IPU6 with OmniVision camera sensors. This is different from older Surface Go models that use IPU3.

On my Surface Go 4, the rear camera OV8865 can be detected and can partially stream through libcamera's simple pipeline in my test environment.

The front camera OV5693 is not working properly. The LED turns on, but no usable video stream is produced.

This is not a complete camera support solution. It is only a status report and an experimental setup attempt.

I also maintain an experimental repository here:

https://github.com/Fugu0141/Surface-Go4-IPU6-camera-linux/tree/test/26.04LTS

This branch contains shell scripts for Ubuntu 25.10 and Ubuntu 26.04 LTS test environments.

The scripts are intended for testing camera detection / libcamera integration on Surface Go 4 only.

They are not guaranteed to work on other systems, future kernels, or future libcamera versions.

Environment

  • Hardware model: Microsoft Surface Go 4
  • CPU: Intel N200
  • IPU: Intel IPU6
  • Rear camera sensor: OV8865
  • Front camera sensor: OV5693
  • VCM: dw9714
  • Distribution: Ubuntu 25.10 / Ubuntu 26.04 LTS test environment
  • Kernel version: please see uname -r output
  • Camera stack: libcamera simple pipeline + PipeWire

Current behavior

  • IPU6-related devices are detected.
  • Rear camera OV8865 can be detected and can partially stream through libcamera simple pipeline in my environment.
  • PipeWire camera integration can expose the camera to some applications.
  • Front camera OV5693 LED turns on, but no usable video stream is produced.
  • GNOME Camera / Cheese and VLC are not reliable as direct test applications in this setup.

Expected behavior

Both the rear OV8865 camera and the front OV5693 camera should ideally be usable through the Linux camera stack, preferably through libcamera/PipeWire-compatible applications.

Important note about the scripts

The scripts in my repository are experimental.

They are provided under the MIT License, but I cannot guarantee that they will work correctly in every environment.

They may fail depending on kernel version, libcamera version, firmware state, PipeWire/WirePlumber configuration, distribution packages, or future Ubuntu changes.

Please review the scripts before running them.

Steps to reproduce / test

On a fresh Ubuntu 25.10 or Ubuntu 26.04 LTS test installation on Surface Go 4:

  1. Install the linux-surface kernel if required.

  2. Install/build the required libcamera and camera-related userspace components.

  3. Run the experimental Surface Go 4 IPU6 setup script from:

    https://github.com/Fugu0141/Surface-Go4-IPU6-camera-linux/tree/test/26.04LTS

  4. Restart PipeWire/WirePlumber.

  5. Check camera detection with the following commands:

    • cam --list
    • v4l2-ctl --list-devices
    • pw-cli ls Node | grep -Ei "camera|libcamera|ov5693|ov8865"
  6. Test camera usage with PipeWire/libcamera-compatible applications.

Logs / diagnostic commands

I can provide full logs.

These are the commands I am using for diagnostics:

uname -r
cat /sys/devices/virtual/dmi/id/product_name
lspci -nn | grep -Ei "ipu|image|camera"
dmesg | grep -Ei "ipu|ov5693|ov8865|dw9714|int3472|v4l2|camera"
lsmod | grep -Ei "ipu|ov5693|ov8865|dw9714|v4l2"
v4l2-ctl --list-devices
cam --list
pw-cli ls Node | grep -Ei "camera|libcamera|ov5693|ov8865"
systemctl --user status pipewire wireplumber

Additional information

I could not find a dedicated issue for Surface Go 4 IPU6 camera status.

There is an existing IPU6 camera discussion, but I am opening this separately because Surface Go 4 has a device-specific status:

  • Rear OV8865 camera: detected and partially streaming in my environment.
  • Front OV5693 camera: LED turns on, but no usable video output.
  • Experimental Ubuntu 25.10 and Ubuntu 26.04 LTS setup scripts are available for testing.
  • Surface Go 4 uses IPU6, unlike older Surface Go models that use IPU3.

Related repository:

https://github.com/Fugu0141/Surface-Go4-IPU6-camera-linux/tree/test/26.04LTS

Questions

  1. Is Surface Go 4 IPU6 camera support expected to work with the current linux-surface kernel?
  2. Are additional kernel-side patches required for OV5693 / OV8865 / dw9714 on Surface Go 4?
  3. Is the front camera issue likely related to sensor initialization, ACPI/software-node configuration, VCM/lens initialization, or libcamera pipeline handling?
  4. Would Surface Go 4-specific camera notes be useful for the linux-surface camera documentation?

Activity

  1. Fugu0141 commented on Jul 26, 2026

    @Fugu0141
    Author

    Update: front camera streaming and GNOME Camera now working

    I completed a more detailed end-to-end validation on my Surface Go 4.

    Environment

    • Microsoft Surface Go 4
    • Ubuntu 26.04 LTS
    • Kernel 7.0.0-28-generic
    • libcamera 0.7.0
    • PipeWire 1.6.2
    • WirePlumber 0.5.13
    • Secure Boot enabled

    I built and MOK-signed a local ov5693 module containing the experimental
    MIPI_CTRL00 (0x4800) = 0x2d change from linux-surface PR #2171.

    OV5693 kernel-streaming results

    After a full shutdown and cold boot, with cam as the first camera access:

    • the patched module was loaded successfully;
    • 300/300 frames were captured;
    • the command exited with status 0;
    • capture ran at approximately 28.66 fps;
    • the last sequence number was 000299;
    • no matching stream timeout, FIFO, discard, CSI-2, or other kernel warnings were observed during this test.

    I also captured 10 real 640×480 PPM images at approximately 57.35 fps.
    The images were valid Netpbm files and were visually confirmed to contain a real image from the front camera.

    This confirms that the result is not only device detection or buffer activity:
    the OV5693 is producing valid image data with the experimental 0x2d change.

    Separate WirePlumber / PipeWire issue

    GNOME Camera initially did not detect either physical camera after login.

    The WirePlumber journal showed:

    Failed to open media device at /dev/media0: Permission denied
    Unable to populate media device /dev/media0, skipping
    Failed to add device for '.../media0', skipping
    Could not open any dma-buf provider
    

    Restarting only WirePlumber:

    systemctl --user restart wireplumber.service

    caused libcamera to enumerate both cameras:

    Adding camera '\_SB_.PC00.I2C5.CAMR'
    Adding camera '\_SB_.PC00.I2C3.CAMF'
    

    PipeWire then exposed:

    Built-in Front Camera
    Built-in Back Camera
    

    After that, both the front OV5693 and rear OV8865 displayed live video in GNOME Camera.

    This appears to be a separate userspace discovery or permission-timing problem,
    not a regression of the OV5693 kernel stream.

    Remaining problems

    The following issues are still unresolved:

    • rear dw9714 lens/VCM initialization and autofocus;
    • missing ov5693.yaml and ov8865.yaml sensor tuning;
    • exposure, brightness, and image-quality problems;
    • automatic camera discovery at login without restarting WirePlumber;
    • suspend/resume reliability.

    I wrote a detailed technical report containing the build, Secure Boot signing,
    installation, rollback, validation, logs, and troubleshooting steps:

    https://github.com/Fugu0141/Surface-Go4-IPU6-camera-linux/blob/main/docs/surface-go4-ipu6-camera-root-cause-and-validation.md

    Thank you to everyone working on PR #2171 and the IPU6 camera support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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