Public bug reported:

## Summary

On Ubuntu 24.04 the `ov01a1s` MIPI camera is unusable because two packages that 
must
agree on sensor geometry are out of sync by four months.

* `linux-modules-ipu6-*` ships the **October 2025** `ov01a1s` kernel driver, 
whose only
  supported output size is **1288x800**.
* `libcamhal-ipu6-common` ships HAL configuration from **June 2025**, which 
still
  specifies **1296x798**.

The HAL programs the CSI-2 receiver pad for 1296x798 while the sensor 
sub-device remains
at 1288x800. The mismatch fails media-pipeline link validation in the kernel, so
`VIDIOC_STREAMON` returns `EPIPE` and no frames are ever produced. Every 
consumer
(Cheese, Chrome, Zoom, Teams, `gst-launch-1.0 icamerasrc`) sees no working 
camera.

The fix already exists upstream and is a configuration-only change.

---

## Affected packages

```
libcamhal-ipu6-common        0~git202506270118.c933525~ubuntu24.04.5
libcamhal-ipu6               0~git202506270118.c933525~ubuntu24.04.5
libcamhal0                   0~git202506270118.c933525~ubuntu24.04.5
gstreamer1.0-icamera         0~git202509260937.4fb31db~ubuntu24.04.5
linux-modules-ipu6-oem-24.04 6.17.0-1032.32
```

## System

```
Ubuntu 24.04.4 LTS (noble)
Dell Latitude 9420, BIOS 1.48.0
Kernel 6.17.0-1032-oem
Intel IPU6 (Tiger Lake), PCI 0000:00:05.0
Sensor: OmniVision OV01A1S (RGB-IR), ACPI OVTI01AS:00, CSI-2 port 1,
        behind the LJCA USB-I2C bridge
```

---

## What happens

```
$ gst-launch-1.0 icamerasrc buffer-count=7 ! \
    "video/x-raw,format=YUY2,width=1280,height=720,framerate=30/1" ! \
    videoconvert ! autovideosink

CamHAL[ERR] Start: Device node /dev/video9 IOCTL VIDIOC_STREAMON error: Broken 
pipe
CamHAL[ERR] Device:Generic stream on failed.
CamHAL[ERR] Devices stream on failed:-38
CamHAL[ERR] Start capture unit failed with ret:-38.
CamHAL[ERR] Camera device starts failed.
```

## What should happen

The camera streams and is available to applications.

---

## Evidence

### The kernel driver supports exactly one size, 1288x800

```
$ v4l2-ctl -d /dev/v4l-subdev8 --list-subdev-framesizes pad=0,code=0x300a
ioctl: VIDIOC_SUBDEV_ENUM_FRAME_SIZE (pad=0,stream=0)
        Size Range: 1288x800 - 1288x800
```

### The HAL config requests 1296x798

```
$ grep -n '1296' /etc/camera/ipu6/sensors/ov01a1s-uf.xml
19:  <MediaCtlConfig id="0" ConfigMode="AUTO" outputWidth="1296" 
outputHeight="798" ...
20:  <format name="ov01a1s $I2CBUS" pad="0" width="1296" height="798" .../>
21:  <format name="Intel IPU6 CSI-2 $CSI_PORT" pad="0" width="1296" 
height="798" .../>
...
79:  <supportedISysSizes value="1296x798"/>
```

### The resulting pad mismatch

```
$ media-ctl -d /dev/media0 -p

- entity 465: ov01a1s 6-0036 (1 pad, 1 link, 0 routes)
        pad0: Source
                [stream:0 fmt:SGRBG10_1X10/1288x800 field:none]     <-- sensor
                -> "Intel IPU6 CSI2 1":0 [ENABLED,IMMUTABLE]

- entity 267: Intel IPU6 CSI2 1 (9 pads, 9 links, 0 routes)
        pad0: Sink
                [stream:0 fmt:SGRBG10_1X10/1296x798 field:none]     <-- HAL 
programmed this
```

Link validation compares these two formats. They differ, so
`media_pipeline_start()` fails and `VIDIOC_STREAMON` returns `-EPIPE`.

### The hardware itself is fine

Configuring the pipeline by hand at the sensor's real geometry captures frames
successfully, which confirms the sensor, IPU6 firmware and kernel drivers all 
work:

```bash
export MDEV=/dev/media0
sudo media-ctl -d $MDEV -V '"ov01a1s 6-0036":0        
[fmt:SGRBG10_1X10/1288x800]'
sudo media-ctl -d $MDEV -V '"Intel IPU6 CSI2 1":0     
[fmt:SGRBG10_1X10/1288x800]'
sudo media-ctl -d $MDEV -V '"Intel IPU6 CSI2 1":1     
[fmt:SGRBG10_1X10/1288x800]'
sudo v4l2-ctl -d /dev/video9 \
  --set-fmt-video=width=1288,height=800,pixelformat=BA10 \
  --stream-mmap --stream-count=5 --stream-to=/tmp/frame.raw
```

Result: 10,496,000 bytes captured, five frames.

---

## Root cause

`intel/ipu6-drivers` commit `7731d39b4` (Hans de Goede, 28 Oct 2025),
*"media: i2c: ov01a1s: Change output size to 1288x800"*, changed the driver's 
output
size to match mainline, which reserves a 4x4 border for flip window shifting, 
and
requires a height that is a multiple of 4 because the RGB-IR pattern on this 
sensor
repeats every 4 lines. (Note that 798 is not a multiple of 4.)

That commit message states explicitly:

> This requires a matching change to the following 2 files in ipu6-camera-hal:
> `config/linux/ipu6/sensors/ov01a1s-uf.xml`
> `config/linux/ipu6/gcss/graph_settings_ov01a1s.xml`
> I will submit a separate pull-request for the matching ipu6-camera-hal 
> changes.
>
> This has been tested on a Dell Latitude 9420.

Ubuntu ships the updated kernel driver but not the matching HAL
configuration.

---

## Upstream fix

`intel/ipu6-camera-hal` commit **`eb451ec`** —
*"config/linux/ipu6: ov01a1s configs: Adjust for new 1288x800 ov01a1s kernel 
driver
output size"*.

It updates exactly the two files named above. It is the most recent commit 
touching
either file, so current upstream HEAD is sufficient.

Note that this is not a simple 1296 -> 1288 substitution. The crop margins 
change too,
in order to preserve the 4-line RGB-IR phase, e.g. in 
`graph_settings_ov01a1s.xml`:

```diff
-  <input width="1296" height="798" top="0" left="7" bottom="2" right="9" />
+  <input width="1288" height="800" top="0" left="3" bottom="4" right="5" />
```

Naive substitution produces either a config-lookup failure or visible
color banding.

---

## Suggested resolution

Refresh `libcamhal-ipu6-common` to a snapshot including `eb451ec`, or backport 
that
commit to the packaged version.

Since the affected files are dpkg conffiles, users who have applied the fix 
manually
will be prompted on upgrade rather than silently reverted.

---

## Workaround

```bash
git clone https://github.com/intel/ipu6-camera-hal.git
cd ipu6-camera-hal
sudo cp config/linux/ipu6/sensors/ov01a1s-uf.xml         
/etc/camera/ipu6/sensors/
sudo cp config/linux/ipu6/gcss/graph_settings_ov01a1s.xml /etc/camera/ipu6/gcss/
```

Verified working immediately afterwards, with correct color and
exposure:

```bash
sudo -E gst-launch-1.0 icamerasrc buffer-count=7 ! \
  "video/x-raw,format=YUY2,width=1280,height=720,framerate=30/1" ! \
  videoconvert ! autovideosink
```

** Affects: ipu6-drivers (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2165197

Title:
  libcamhal-ipu6-common ships ov01a1s configs for 1296x798, but shipped
  ov01a1s kernel driver outputs 1288x800 (camera unusable)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ipu6-drivers/+bug/2165197/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to