ipa: libipa: camera_sensor_helper: add ov02c10
diff mbox series

Message ID 20260921145635.978219-1-info@humanlearning.ch
State New
Headers show
Series
  • ipa: libipa: camera_sensor_helper: add ov02c10
Related show

Commit Message

François Roux Sept. 21, 2026, 2:56 p.m. UTC
Without an entry for ov02c10, the software ISP used by the simple
pipeline handler can't run AGC for this sensor and logs:

  IPASoft: Failed to create camera sensor helper for ov02c10

The kernel driver (drivers/media/i2c/ov02c10.c) advertises analogue-gain
register values in the range 0x10..0xf8 with a default of 0x10, and
writes them to the 16-bit register at 0x3508 as (val << 4).  That
register is graded in 1/256 steps, so both the control range and the
register encoding agree on 1/16 steps: the default of 0x10 is unity gain
and the maximum of 0xf8 is 15.5x.

The sensor outputs 10-bit Bayer data (MEDIA_BUS_FMT_SGRBG10_1X10).  A
dark-frame measurement gives a mean pedestal of 64.2 LSB with a standard
deviation below 1.1 LSB, unchanged when the integration time is varied
by a factor of 356 (4 to 1425 lines), which confirms a fixed 0x40
pedestal rather than dark current.  That scales to 4096 at the 16-bit
width expected by blackLevel(), as for the other OmniVision sensors in
this file.

Add a helper that follows the same pattern.  Tested on the front camera
of a Microsoft Surface Pro 12 (Qualcomm X1P42100) driven by the qcom
CAMSS pipeline.  Before the change the IPA reported "Exposure 4-2320,
gain 16-248 (1)"; after it reports "Exposure 4-2320, gain 1-15.5
(0.145)".

Signed-off-by: François Roux <info@humanlearning.ch>
---
 src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Patch
diff mbox series

diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index 9457d62b3..4b5c70f52 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -677,6 +677,18 @@  public:
 };
 REGISTER_CAMERA_SENSOR_HELPER("ov01a10", CameraSensorHelperOv01a10)
 
+class CameraSensorHelperOv02c10 : public CameraSensorHelper
+{
+public:
+	CameraSensorHelperOv02c10()
+	{
+		/* From dark frame measurement: 0x40 at 10bits. */
+		blackLevel_ = 4096;
+		gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
+	}
+};
+REGISTER_CAMERA_SENSOR_HELPER("ov02c10", CameraSensorHelperOv02c10)
+
 class CameraSensorHelperOv08x40 : public CameraSensorHelper
 {
 public: