[PATCH v2] media: ipu-bridge: Add Himax HM1092 IR sensor

Jake S <[email protected]> Thu, 30 Jul 2026 10:24:14 -0400
Newsgroups org.kernel.vger.linux-media
Message-ID <[email protected]>
From: Jake Steinman <[email protected]>

The HM1092 is a mono IR sensor used for face unlock on Intel IPU6 and
IPU7 laptops. Without an entry here the sensor endpoint is built with no
link-frequencies property, the driver rejects every mode and the sensor
never binds.

Two frequencies are listed because the sensor is driven from a different
external clock depending on the platform, with the PLL programmed to
match: 180480000 Hz on Dell (19.2 MHz EXTCLK) and 180000000 Hz on ASUS
(24 MHz).

Assisted-by: Claude:claude-opus-5
Signed-off-by: Jake Steinman <[email protected]>
---
Changes in v2:
 - drop thousands separators from numbers (Sakari)
 - move the derivation below the --- and shorten the commit message
   (Sakari)
 - add Assisted-by per Documentation/process/coding-assistants.rst
   (Sakari). Claude did the register-table extraction and the iteration
   on this patch; the analysis, hardware testing and review are mine, and
   the Signed-off-by is mine alone.

This depends on the HM1092 sensor driver, currently in review as
"[PATCH v6] media: i2c: Add HM1092 camera sensor driver", and should
wait for it.

Derivation of the two values, from the PLL registers each platform
programs -- link_freq = EXTCLK * m / p, where m is 0x030f and p is
0x030d:

  Dell, IPU7      EXTCLK 19.2 MHz, p=10, m=94  ->  180480000 Hz
  ASUS, Qualcomm  EXTCLK 24.0 MHz, p=12, m=90  ->  180000000 Hz

Both are the CSI-2 DDR clock, so the per-lane bit rate is twice the
value -- 360.96 and 360 Mbit/s respectively -- over one data lane. They
differ by 0.27%, but are listed separately so each platform matches what
its own firmware programs.

Worth recording because published figures for this part have been wrong:
V4L2_CID_LINK_FREQ is the DDR clock, while the vendor mode descriptors
publish the per-lane bit rate, which is twice that. Taking the descriptor
value verbatim gives 360960000; isys then runs the D-PHY at 721 Mbit/s
against a sensor transmitting 361, and no frame is ever framed. Halving
it produced the first frames captured from this sensor on Linux.

Verified on a Dell XPS 16 DA16260 (IPU7, Panther Lake). The ASUS values
come from the Qualcomm sensor module blob via Ramshouriesh R, who is
submitting the sensor driver.

 drivers/media/pci/intel/ipu-bridge.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel/ipu-bridge.c
--- a/drivers/media/pci/intel/ipu-bridge.c
+++ b/drivers/media/pci/intel/ipu-bridge.c
@@ -50,6 +50,8 @@
  * Please keep the list sorted by ACPI HID.
  */
 static const struct ipu_sensor_config ipu_supported_sensors[] = {
+	/* Himax HM1092 */
+	IPU_SENSOR_CONFIG("HIMX1092", 2, 180000000, 180480000),
 	/* Himax HM11B1 */
 	IPU_SENSOR_CONFIG("HIMX11B1", 1, 384000000),
 	/* Himax HM2170 */