Latitude 7212 Rugged Extreme Tablet IPU3 Webcam

Table of Contents

IPU3 Subsystem

The IPU3 subsystem consists of two hardware blocks:

  • the “CIO2” (MIPI CSI-2 receiver) device that captures raw Bayer data from the camera sensor.
  • the “ImgU” (Imaging Unit) device that processes the raw frames (demosaic, lens shading correction, etc.) and exposes output nodes.

Sensor -> CIO2 -> ImgU

Intel IPU3 webcams (the ones found in many Dell Latitude Rugged and Lenovo laptops) do not work through the old V4L2/uvcvideo pipeline. They require the userspace stack libcamera + pipewire, because the IPU3 hardware needs complex image processing that is not provided directly by the kernel.

On Debian 12, support is present but not enabled by default. Here is the correct way to get the camera working.

ilyas@fiorina:~$ v4l2-ctl --list-devices
ipu3-imgu (PCI:0000:00:05.0):
	/dev/video0
	/dev/video1
	/dev/video2
	/dev/video3
	/dev/video4
	/dev/video5
	/dev/video6
	/dev/video7
	/dev/video8
	/dev/video9
	/dev/media0

Intel IPU3 CIO2 (PCI:0000:00:14.3):
	/dev/video10
	/dev/video11
	/dev/video12
	/dev/video13
	/dev/media1

https://www.kernel.org/doc/html/v5.0/media/v4l-drivers/ipu3.html

https://docs.kernel.org/admin-guide/media/ipu3.html

Install & Configure

ilyas@fiorina:~$ sudo /sbin/dmidecode -s system-product-name
Latitude 7212 Rugged Extreme Tablet
ilyas@fiorina:~$ sudo /sbin/dmidecode -s system-manufacturer
Dell Inc.
ilyas@fiorina:~$ sudo dmesg | grep -i ipu
[    8.975645] ipu3_imgu: module is from the staging directory, the quality is unknown, you have been warned.
[    8.982028] ipu3-imgu 0000:00:05.0: enabling device (0000 -> 0002)
[    8.982199] ipu3-imgu 0000:00:05.0: device 0x1919 (rev: 0x1)
[    8.982222] ipu3-imgu 0000:00:05.0: physical base address 0x00000000df000000, 4194304 bytes
[    9.027555] ipu3-cio2 0000:00:14.3: device 0x9d32 (rev: 0x1)
[    9.065565] ipu3-imgu 0000:00:05.0: firmware: direct-loading firmware intel/irci_irci_ecr-master_20161208_0213_20170112_1500.bin
[    9.065576] ipu3-imgu 0000:00:05.0: loaded firmware version irci_irci_ecr-master_20161208_0213_20170112_1500, 17 binaries, 1212984 bytes
ilyas@fiorina:~$ lspci -nn | grep -i 14.3
00:14.3 Multimedia controller [0480]: Intel Corporation CSI-2 Host Controller [8086:9d32] (rev 01)

The IPU3 driver is working at the kernel level.

intel/irci_irci_ecr-master_20161208_0213_20170112_1500.bin

IPU3 devices require:

  • the CIO2 driver (detected)
  • the IMGU pipeline (loaded)
  • the correct ACPI camera sensor description
  • userspace support (libcamera) for:
    • sensor drivers
    • tuning data
    • JSON pipeline descriptions

IPU3 support in Linux is still incomplete for many laptops. Drivers exist, but the userspace stack must also cooperate.

Sometimes the IPU3 stack is initializing, but no camera sensors are being detected at all:

  • CIO2 is detected (this is the MIPI bridge and input of the IPU3 pipeline)
  • But no sensor drivers or I²C devices appear
  • No ovXXXX or imxXXXX sensors probe
  • No errors from sensors either — meaning nothing is described in ACPI

This is the classic IPU3 problem on many laptops.

IPU3 has 3 required layers:

  • CIO2 — detected
  • IMGU — detected, firmware loaded
  • Sensor — missing

Without item 3, the pipeline cannot produce a V4L2 device. This is not a firmware issue. It is a platform integration issue.

Check if sensors are detected:

ilyas@fiorina:~$ ls /dev/v4l/by-path/
pci-0000:00:05.0-video-index0  pci-0000:00:05.0-video-index5  pci-0000:00:14.3-video-index0
pci-0000:00:05.0-video-index1  pci-0000:00:05.0-video-index6  pci-0000:00:14.3-video-index1
pci-0000:00:05.0-video-index2  pci-0000:00:05.0-video-index7  pci-0000:00:14.3-video-index2
pci-0000:00:05.0-video-index3  pci-0000:00:05.0-video-index8  pci-0000:00:14.3-video-index3
pci-0000:00:05.0-video-index4  pci-0000:00:05.0-video-index9
ilyas@fiorina:~$ sudo dmesg | grep -i cio2
[    9.027555] ipu3-cio2 0000:00:14.3: device 0x9d32 (rev: 0x1)

Check available V4L2 devices:

ilyas@fiorina:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81,  0 Nov 10 14:44 /dev/video0
crw-rw----+ 1 root video 81,  1 Nov 10 14:44 /dev/video1
crw-rw----+ 1 root video 81, 11 Nov 10 14:44 /dev/video10
crw-rw----+ 1 root video 81, 12 Nov 10 14:44 /dev/video11
crw-rw----+ 1 root video 81, 13 Nov 10 14:44 /dev/video12
crw-rw----+ 1 root video 81, 14 Nov 10 14:44 /dev/video13
crw-rw----+ 1 root video 81,  2 Nov 10 14:44 /dev/video2
crw-rw----+ 1 root video 81,  3 Nov 10 14:44 /dev/video3
crw-rw----+ 1 root video 81,  5 Nov 10 14:44 /dev/video4
crw-rw----+ 1 root video 81,  6 Nov 10 14:44 /dev/video5
crw-rw----+ 1 root video 81,  7 Nov 10 14:44 /dev/video6
crw-rw----+ 1 root video 81,  8 Nov 10 14:44 /dev/video7
crw-rw----+ 1 root video 81,  9 Nov 10 14:44 /dev/video8
crw-rw----+ 1 root video 81, 10 Nov 10 14:44 /dev/video9

Check media-controller devices:

ilyas@fiorina:~$ ls /dev/media*
/dev/media0  /dev/media1

Sensors are tiny chips like:

  • ov5693
  • ov7251
  • imx135
  • imx219
  • ov8865
  • ov2735

Check camera sensor drivers:

ilyas@fiorina:~$ sudo dmesg | grep -i ov
[    0.000000] BIOS-provided physical RAM map:
[    0.000937] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.012017] Movable zone start for each node
[    0.019245] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.019247] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.125091] thermal_sys: Registered thermal governor 'fair_share'
[    0.125091] thermal_sys: Registered thermal governor 'bang_bang'
[    0.125091] thermal_sys: Registered thermal governor 'step_wise'
[    0.125091] thermal_sys: Registered thermal governor 'user_space'
[    0.125091] thermal_sys: Registered thermal governor 'power_allocator'
[    0.125091] cpuidle: using governor ladder
[    0.125091] cpuidle: using governor menu
[    0.271459] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO
[    0.761896] Key type fscrypt-provisioning registered
[    9.442766] RAPL PMU: API unit is 2^-32 Joules, 5 fixed counters, 655360 ms ovfl timer

Now the question is: Which of the /dev/video devices corresponds to the actual camera stream?

Because IPU3 exposes many nodes:

  • several metadata nodes
  • several raw streams
  • firmware interfaces
  • statistics streams

Applications need to talk to the IPU3 pipeline via libcamera, not directly via V4L2.

Let’s identify the correct nodes.

Install media-ctl:

sudo apt install v4l-utils

Check /dev/media0 device:

ilyas@fiorina:~$ media-ctl -p -d /dev/media0
Media controller API version 6.1.76

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

Device topology
- entity 1: ipu3-csi2 0 (2 pads, 1 link)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
	pad0: Sink
		[fmt:SGRBG10_1X10/1936x1096 field:none]
	pad1: Source
		[fmt:SGRBG10_1X10/1936x1096 field:none]
		-> "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
		<- "ipu3-csi2 0":1 [ENABLED,IMMUTABLE]

- entity 10: ipu3-csi2 1 (2 pads, 1 link)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
	pad0: Sink
		[fmt:SGRBG10_1X10/1936x1096 field:none]
	pad1: Source
		[fmt:SGRBG10_1X10/1936x1096 field:none]
		-> "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
		<- "ipu3-csi2 1":1 [ENABLED,IMMUTABLE]

- entity 19: ipu3-csi2 2 (2 pads, 1 link)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev4
	pad0: Sink
		[fmt:SGRBG10_1X10/1936x1096 field:none]
	pad1: Source
		[fmt:SGRBG10_1X10/1936x1096 field:none]
		-> "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
		<- "ipu3-csi2 2":1 [ENABLED,IMMUTABLE]

- entity 28: ipu3-csi2 3 (2 pads, 1 link)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev5
	pad0: Sink
		[fmt:SGRBG10_1X10/1936x1096 field:none]
	pad1: Source
		[fmt:SGRBG10_1X10/1936x1096 field:none]
		-> "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
		<- "ipu3-csi2 3":1 [ENABLED,IMMUTABLE]

Check /dev/media1 device:

ilyas@fiorina:~$ media-ctl -p -d /dev/media1
Media controller API version 6.1.76

Media device information
------------------------
driver          ipu3-imgu
model           ipu3-imgu
serial
bus info        PCI:0000:00:05.0
hw revision     0x102807d3
driver version  6.1.76

Device topology
- entity 1: ipu3-imgu 0 (5 pads, 5 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev1
	pad0: Sink
		[fmt:FIXED/1920x1080 field:none colorspace:raw
		 crop:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "ipu3-imgu 0 input":0 []
	pad1: Sink
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		<- "ipu3-imgu 0 parameters":0 []
	pad2: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 0 output":0 [ENABLED,IMMUTABLE]
	pad3: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 0 viewfinder":0 []
	pad4: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 0 3a stat":0 []

- entity 7: ipu3-imgu 0 input (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video4
	pad0: Source
		-> "ipu3-imgu 0":0 []

- entity 13: ipu3-imgu 0 parameters (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video5
	pad0: Source
		-> "ipu3-imgu 0":1 []

- entity 19: ipu3-imgu 0 output (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video6
	pad0: Sink
		<- "ipu3-imgu 0":2 [ENABLED,IMMUTABLE]

- entity 25: ipu3-imgu 0 viewfinder (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video7
	pad0: Sink
		<- "ipu3-imgu 0":3 []

- entity 31: ipu3-imgu 0 3a stat (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video8
	pad0: Sink
		<- "ipu3-imgu 0":4 []

- entity 37: ipu3-imgu 1 (5 pads, 5 links)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
	pad0: Sink
		[fmt:FIXED/1920x1080 field:none colorspace:raw
		 crop:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "ipu3-imgu 1 input":0 []
	pad1: Sink
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		<- "ipu3-imgu 1 parameters":0 []
	pad2: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 1 output":0 [ENABLED,IMMUTABLE]
	pad3: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 1 viewfinder":0 []
	pad4: Source
		[fmt:FIXED/1920x1080 field:none colorspace:raw]
		-> "ipu3-imgu 1 3a stat":0 []

- entity 43: ipu3-imgu 1 input (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video9
	pad0: Source
		-> "ipu3-imgu 1":0 []

- entity 49: ipu3-imgu 1 parameters (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video10
	pad0: Source
		-> "ipu3-imgu 1":1 []

- entity 55: ipu3-imgu 1 output (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video11
	pad0: Sink
		<- "ipu3-imgu 1":2 [ENABLED,IMMUTABLE]

- entity 61: ipu3-imgu 1 viewfinder (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video12
	pad0: Sink
		<- "ipu3-imgu 1":3 []

- entity 67: ipu3-imgu 1 3a stat (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video13
	pad0: Sink
		<- "ipu3-imgu 1":4 []

This means your IPU3 pipeline is fully initialized and complete.

  • CIO2 nodes are active for all 4 ports (/dev/video0–3)
  • IMGU nodes are active (/dev/video4–13)
  • Formats are configured (SGRBG10 1936×1096)
  • All links are established and enabled
  • No missing or failed sensors are shown

This is what a working IPU3 setup looks like at the kernel and media-controller levels.

Kernel Configuration

Device Drivers → Multimedia support → Media ancillary drivers → Camera sensor devices

Enable OmniVision sensor drivers, for me its OV5670 because dmesg found it:

[   12.343090] ipu3-cio2 0000:00:14.3: Found supported sensor INT3479:00.
make -j$(nproc) modules
sudo make modules_install
sudo depmod -a
systemctl reboot

Check the module is loaded:

ilyas@fiorina:~$ sudo lsmod | grep ov
overlay               208896  0
ov5670                 28672  0
v4l2_fwnode            32768  2 ipu3_cio2,ov5670
v4l2_async             32768  3 v4l2_fwnode,ipu3_cio2,ov5670
videodev              368640  6 v4l2_async,v4l2_fwnode,ipu3_cio2,ov5670,videobuf2_v4l2,ipu3_imgu
mc                     86016  7 v4l2_async,videodev,ipu3_cio2,ov5670,videobuf2_v4l2,videobuf2_common,ipu3_imgu

Inspect ACPI driver binding:

ilyas@fiorina:~$ cat /sys/bus/acpi/devices/INT3479:00/hid
INT3479
ilyas@fiorina:~$ cat /sys/bus/acpi/devices/INT3479:00/modalias
acpi:INT3479:INT3479:
ilyas@fiorina:~$ ls -l /sys/bus/i2c/devices/
total 0
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-0 -> ../../../devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-1 -> ../../../devices/pci0000:00/0000:00:1f.4/i2c-1
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-2 -> ../../../devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-2
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-3 -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-3
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-4 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-4
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-5 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-5
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-6 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-6
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-7 -> ../../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/i2c-7
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-8 -> ../../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-8
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-INT3472:05 -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-3/i2c-INT3472:05

Check whether the OV5670 driver knows about ACPI INT3479:

ilyas@fiorina:~$ sudo modinfo ov5670 | grep -i alias
alias:          acpi*:INT3479:*
alias:          of:N*T*Covti,ov5670C*
alias:          of:N*T*Covti,ov5670

You want to see an alias like acpi*:INT3479:*. If it’s missing, the driver won’t bind via ACPI then you’ll need a newer kernel or a tiny patch.

Verify the INT3472 “glue” drivers are present and loaded:

ilyas@fiorina:~$ lsmod | grep -E 'int347|tps68470'
intel_skl_int3472_tps68470    20480  0
intel_skl_int3472_discrete    28672  0
intel_skl_int3472_common    12288  2 intel_skl_int3472_tps68470,intel_skl_int3472_discrete

On IPU3 platforms, the ACPI “glue” for discrete sensors is critical:

  • intel_skl_int3472 (the main glue)
  • tps68470 MFD + clk + regulator + gpio (on many Dells)

Check those modules are loaded:

sudo modprobe intel_skl_int3472
sudo modprobe tps68470
sudo modprobe clk-tps68470
sudo modprobe regulator-tps68470
sudo modprobe gpio-tps68470

If some modules don’t exist, enable these in your kernel config and rebuild modules only:

CONFIG_INTEL_SKL_INT3472 (<M> or Y)
CONFIG_MFD_TPS68470 (<M>)
CONFIG_CLK_TPS68470 (<M>)
CONFIG_REGULATOR_TPS68470 (<M>)
CONFIG_GPIO_TPS68470 (<M>)

Several Dell IPU3 designs rely on TPS68470 to power the sensor; without these, the sensor never probes.

See if the ACPI glue created a child I2C client:

ls -l /sys/bus/i2c/devices/ | grep -iE 'ov|3479'
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-0 -> ../../../devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-1 -> ../../../devices/pci0000:00/0000:00:1f.4/i2c-1
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-2 -> ../../../devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-2
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-3 -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-3
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-4 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-4
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-5 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-5
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-6 -> ../../../devices/pci0000:00/0000:00:02.0/i2c-6
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-7 -> ../../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/i2c-7
lrwxrwxrwx 1 root root 0 Nov 11 01:03 i2c-8 -> ../../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-8
lrwxrwxrwx 1 root root 0 Nov 11 00:47 i2c-INT3472:05 -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-3/i2c-INT3472:05

Check the logs for the failing bind:

ilyas@fiorina:~$ sudo dmesg | grep -i -E 'int347|ov5670|cio2|fwnode|endpoint|regulator|clock|gpio'
[sudo] password for ilyas:
[    0.017863] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.081806] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x26eae8729ef, max_idle_ns: 440795235156 ns
[    0.126504] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.247082] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI HPX-Type3]
[    0.277943] PTP clock support registered
[    0.309883] clocksource: Switched to clocksource tsc-early
[    0.324008] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.353494] pci 0000:00:1f.1: [8086:9d20] type 00 class 0x058000 conventional PCI endpoint
[    1.358302] tsc: Refined TSC clocksource calibration: 2711.999 MHz
[    1.358315] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x271785701be, max_idle_ns: 440795203568 ns
[    1.358335] clocksource: Switched to clocksource tsc
[    3.843053] rtc_cmos 00:03: setting system clock to 2025-11-10T19:45:37 UTC (1762803937)
[    3.851161] sched_clock: Marking stable (3844003630, 6268041)->(3893017514, -42745843)
[    3.974666] clk: Disabling unused clocks
[  102.091523] int3472-tps68470 i2c-INT3472:05: TPS68470 REVID: 0x21
[  102.091684] int3472-tps68470 i2c-INT3472:05: error -ENODEV: No board-data found for this model
[  102.436581] ipu3-cio2 0000:00:14.3: Found supported sensor INT3479:00
[  102.436788] ipu3-cio2 0000:00:14.3: Connected 1 cameras
[  102.437164] ipu3-cio2 0000:00:14.3: device 0x9d32 (rev: 0x1)
[  102.774958] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[  105.419831] iwlwifi 0000:03:00.0: Registered PHC clock: iwlwifi-PTP, with index: 0

The blocker is right here in dmesg output:

int3472-tps68470 i2c-INT3472:05: TPS68470 REVID: 0x21
int3472-tps68470 i2c-INT3472:05: error -ENODEV: No board-data found for this model

That means the ACPI glue intel_skl_int3472_tps68470 found the TPS68470 PMIC (power/clock chip for the sensor), but your machine isn’t in the driver’s board-data (DMI) table. Without that, the driver can’t create the TPS68470 clock/regulator/GPIO devices, the OV5670 never powers up, no sensor entity in the media graph.

Edit kernel configuration:

  • Device Drivers > GPIO Support > MFD GPIO Expanders > TPS68470 GPIO (M)
  • Device Drivers > Voltage and Current Regulator Support > TI TPS68470 PMIC Regulators Driver (REGULATOR_TPS68470 [=m])
  • Device Drivers > Common Clock Framework > Clock Driver for TI TPS68470 PMIC (COMMON_CLK_TPS68470 [=m])
  • Power management and ACPI options > ACPI (Advanced Configuration and Power Interface) Support > ACPI operation region support for TPS68470 PMIC (TPS68470_PMIC_OPREGION [=m])
make -j3 modules
sudo make modules_install
sudo depmod -a

Install libcamera packages:

sudo apt update
sudo apt install libcamera-tools libcamera-ipa pipewire pipewire-media-session pipewire-alsa pipewire-pulse ibcamera-v4l2

Enable PipeWire:

systemctl --user --now enable pipewire pipewire-pulse

November 10, 2025