Fix: Intel IPU6 Camera Not Working on Dell 14 Premium DA14250 with Linux

  • linux
  • ai
  • engineering

TL;DR: The internal camera (OV02C10) and microphone (cs42l43) on the Dell 14 Premium DA14250 (Intel Core Ultra 7 255H, Arrow Lake) don't work with stock Ubuntu/Pop!_OS kernels. The fix is to use the Ubuntu OEM kernel 6.11.0-1027-oem with the matching IPU6 and USBIO module packages. This also applies to similar Dell models like the Dell Pro Max 14 Premium MA14250.

If you see any of these errors in dmesg, this post is for you:

int3472-discrete INT3472:0c: cannot find GPIO chip INTC10B2:00, deferring
int3472-discrete INT3472:0c: GPIO type 0x02 unknown; the sensor may not work
ov02c10 i2c-OVTI02C1:00: Error reading reg 0x300a: -121
ov02c10 i2c-OVTI02C1:00: failed to find sensor: -121
ov02c10 i2c-OVTI02C1:00: chip id mismatch: 560243!=0
int3472-discrete INT3472:0c: INT3472 seems to have no dependents
gpio_usbio.usbio-gpio usbio.usbio-gpio.0: [Firmware Bug]: GPIO 4 is not in FW pins bitmap

Hardware

Component Details
Laptop Dell 14 Premium DA14250 (P184G)
CPU Intel Core Ultra 7 255H (Arrow Lake)
IPU IPU6-v4, PCI ID 8086:7d19
Camera sensor OmniVision OV02C10 (OVTI02C1:00)
Camera GPIO/I2C USBIO bridge (INTC10B2:00 / INTC10B3:00)
Audio codec Cirrus Logic cs42l43 + cs35l56 (SoundWire)
Related model Dell Pro Max 14 Premium MA14250 (Ubuntu certified)

The Fix

1. Install the OEM Kernel

sudo apt install \
  linux-image-6.11.0-1027-oem \
  linux-modules-6.11.0-1027-oem \
  linux-modules-ipu6-6.11.0-1027-oem \
  linux-modules-usbio-6.11.0-1027-oem \
  linux-modules-vision-6.11.0-1027-oem

Set it as boot default. On Pop!_OS (systemd-boot):

sudo kernelstub -k /boot/vmlinuz-6.11.0-1027-oem -i /boot/initrd.img-6.11.0-1027-oem

On Ubuntu (GRUB): select the kernel from Advanced Options, or set GRUB_DEFAULT in /etc/default/grub.

Reboot and verify: uname -r should show 6.11.0-1027-oem.

2. Fix Camera Rotation

The image comes vertically flipped. Edit the v4l2-relayd config:

sudo tee /etc/v4l2-relayd.d/default.conf << 'EOF'
VIDEOSRC=icamerasrc buffer-count=7 ! videoflip method=vertical-flip
FORMAT=NV12
WIDTH=1280
HEIGHT=720
FRAMERATE=30/1
CARD_LABEL=Intel MIPI Camera
EOF

sudo killall v4l2-relayd
sudo systemctl restart v4l2-relayd

3. Fix the Microphone

Pop!_OS ships an old alsa-ucm-conf (1.2.8) without cs42l43 codec profiles. Update it:

sudo apt install alsa-ucm-conf=1.2.10-1ubuntu5.9
# or: sudo apt install -t noble-updates alsa-ucm-conf
sudo apt-mark hold alsa-ucm-conf  # prevent downgrades
systemctl --user restart pipewire pipewire-pulse

Then go to Settings → Sound and select the new audio profile that appears (with proper device names instead of cryptic "Pro Audio" entries).

Verify

ffplay /dev/video0                   # camera image, correctly oriented
pw-record /tmp/test.wav &            # record 5 seconds
sleep 5 && kill %1 && paplay /tmp/test.wav

Caveats


How I Got Here (The Deep Dive)

The camera pipeline

This laptop uses Intel's CVFS (Camera Virtual Function Setup) architecture where the camera hardware hangs off a USB bridge instead of being directly connected:

USB Host Controller (XHCI)
  └─ Hub Port HS09
       ├─ VGPO (INTC10B2) — USB GPIO bridge → camera power/reset
       └─ VIC0 (INTC10B3) — USB I2C bridge → sensor communication
                                └─ OV02C10 camera sensor

The int3472-discrete kernel driver reads ACPI tables to find GPIO pins, powers on the sensor, and then the ov02c10 camera driver takes over via I2C. This chain breaks differently on each kernel I tested.

What fails on newer kernels

Kernel 6.18.7-generic (Pop!_OS stock) has a cascade of failures. First, a timing race: int3472 exhausts its deferred probe retries at 5.9s, but the USBIO GPIO chip only registers at 6.0s. I fixed this by early-loading USBIO modules via initramfs, but then hit the next wall: int3472 couldn't find the sensor as its consumer because the kernel fails to evaluate the ACPI _DEP method and create supplier/consumer device links. The mainline 6.18 int3472 also lacks GPIO regulator and clock registration — features present in the OEM kernel's version.

Kernel 6.17.0-1010-oem has a more capable int3472 but the same ACPI dependency bug. It registers a dvdd regulator that's never enabled because it has zero consumers. The sensor I2C device never gets created.

I patched int3472-discrete on both kernels to handle GPIO type 0x02, added USBIO modules to initramfs for early loading, and even tried manually toggling GPIO pins — none of it was enough because the fundamental ACPI dependency resolution was broken.

The breakthrough

The Dell Pro Max 14 Premium MA14250 — same CPU, same IPU6, same camera — is Ubuntu certified with kernel 6.11.0-1023-oem. That was the key. On this older OEM kernel, the ACPI dependency chain works correctly, int3472 finds the sensor, and the camera initializes.

The -1023 build had a chip ID comparison bug in the ov02c10 driver (chip id mismatch: 560243!=0), but the -1027 build fixed it.

Kernel comparison

6.11-1027-oem 6.11-1023-oem 6.17-oem 6.18-generic
ACPI dependencies
Sensor probed ✅ (wrong ID) ✅ (no power)
Camera works

The regression between 6.11 and 6.17 in ACPI _DEP method evaluation is the core upstream issue.

Resources