[PATCH v5 0/7] media: Enable the OV5693 front camera on IPU6 Surface devices
From: Fernando Rimoli
Date: Wed Sep 02 2026 - 10:38:45 EST
The ov5693 front camera does not stream on IPU6 Surface devices. The sensor needs
its MIPI clock lane gated while idle, which needs a driver change and a way for
the ipu-bridge to ask for it per IPU.
v4 is at [1]. This addresses Sakari's review of patches 3, 4 and 5, adds the DT
bindings property he asked for, and adds an Alder Lake-N entry now that a Surface
Go 4 has been measured.
Changes since v4:
- New patch 3 adds "clock-noncontinuous" to the ov5693 DT bindings. The series is
now seven patches; v4's patches 3 to 6 are 4 to 7 here, and the Tested-by tags
are scoped to those four.
- Commit messages cut throughout, per your comments on v4. Patch 5 now carries
your wording and nothing else. Patch 4 lost the ov5647 comparison and the
per-machine failure detail, which is below instead. Patches 6 and 7 trimmed.
- Patch 5: the running index starts at 0, each call site passes its own property's
maximum index rather than a shared one, and the macro is IPU_BRIDGE_NEXT_PROPERTY
with the enum renamed to match, following mipi-disco-img.c more closely.
- Patch 6: struct ipu_sensor_config now carries a zero-terminated list of IPU PCI
product IDs rather than a single ID, so one entry covers several IPUs. The flags
macro argument is a plain value, so flags can be combined. The scan of the whole
table is gone: entries for one HID are adjacent with the IPU-specific ones first,
and the generic entry is skipped once a specific one has matched.
- Patch 7: the four entries collapse to one shared ID list, with Alder Lake-N added.
On the enum naming in patch 5: "s/SENSOR_EP/BRIDGE/" taken literally gives
IPU_BRIDGE_BUS_TYPE, but since the macro is not endpoint-specific and may later
serve dev_properties, I kept the group marker as IPU_BRIDGE_EP_*, which is also how
mipi-disco-img.c separates its EP and DEV entries. Say the word if you meant the
shorter form.
Unpatched behaviour, which patch 4 now only summarises:
Four people measured it on five machines and it is not uniform. It is absolute on
three (a Pro 9, a Pro 7+ and a Go 4). On another Pro 7+ it is intermittent, 3 of 20
opens delivering frames inside a single boot, with the successes at opens 1, 7 and
14 and the sensor runtime-suspending in between. On a Pro 8 the first capture after
a cold boot succeeds and every later one in that boot hangs. No mechanism explains
the spread: it is not once per boot, given where that machine's successes fell, and
it is not Tiger Lake versus Alder Lake, since two Tiger Lake machines fall on
opposite sides. The sensor is up during the failures on every machine checked: the
privacy LED lights, the failing runs log no CSI-2 errors where the working ones log
ten or more, and setting bit 5 over i2c on an already stalled stream starts delivery
immediately.
**If you verify this, capture twice.** On one of the five machines a single capture
immediately after a cold boot succeeds without the flagged entry, so the obvious
check gives a false negative. Both testers who hit this asked for it to be written
down.
Two other things worth knowing:
- The teardown "stream stop time out" appears identically with and without this
series, so it is pre-existing and not introduced here.
- checkpatch flags "Macros with complex values should be enclosed in parentheses" on
patch 6. The pristine header already trips it five times and the patched header
still trips it exactly five times, because IPU_SENSOR_CONFIG becomes a wrapper as
IPU_SENSOR_CONFIG_MATCH_FL takes over the compound literal. No net new instance.
Testing coverage, all scoped to patches 4 to 7. Patches 1 and 2 are not exercised by
the testers, whose machines enumerate INT33BE; the Pro 9 is the OVTI5693 machine.
Tiger Lake 0x9a19 Pro 7+ (Jakob), Pro 8 (Fil Dunsky), Pro 7+ (Lucas Lis)
Alder Lake-P 0x465d Pro 9 (mine)
Alder Lake-N 0x462e Go 4 (Kengo Oki), 0/300 without the entry, 300/300 with
Kengo Oki's Alder Lake-N result is what justifies the third ID in patch 7, and his
tag is given for the version that carries it.
The reworked bridge in patches 5 to 7 was also run on the Pro 9 with all three of
its sensors: three cameras connected once each with no double connect, link
frequencies unchanged, and the front camera streaming at 28.63 fps, which is only
possible if the flag reaches the sensor driver through the new per-IPU match.
The Pro 9 measurement of 300 consecutive opens predates the switch from a full write
to cci_update_bits(), but the register reads 0x00 first there, so it resolves to the
same write.
[1] https://lore.kernel.org/linux-media/20260831181858.325109-1-fernandorimoli11@xxxxxxxxx/
Fernando Rimoli (7):
media: i2c: ov5693: Add OVTI5693 ACPI HID
media: ipu-bridge: Add OVTI5693 to the list of supported sensors
dt-bindings: media: ov5693: Add clock-noncontinuous
media: i2c: ov5693: Gate the MIPI clock lane for non-continuous clock
media: ipu-bridge: Assign endpoint property indices dynamically
media: ipu-bridge: Match sensor configs per IPU and add config flags
media: ipu-bridge: Request non-continuous clock for ov5693 on IPU6
.../bindings/media/i2c/ovti,ov5693.yaml | 2 +
drivers/media/i2c/ov5693.c | 25 ++++++
drivers/media/pci/intel/ipu-bridge.c | 83 ++++++++++++++++---
include/media/ipu-bridge.h | 50 +++++++++--
4 files changed, 141 insertions(+), 19 deletions(-)
base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
--
2.43.0