diff --git a/src/ipa/libipa/camera_sensor_helper.cpp
b/src/ipa/libipa/camera_sensor_helper.cpp
index cc16e25..31d8169 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -644,6 +644,35 @@ class CameraSensorHelperImx462 : public
CameraSensorHelperImx290
 };
 REGISTER_CAMERA_SENSOR_HELPER("imx462", CameraSensorHelperImx462)

+class CameraSensorHelperImx471 : public CameraSensorHelper
+{
+public:
+	CameraSensorHelperImx471()
+	{
+		/*
+		 * Sony IMX471 (IPU7 platforms: ThinkPad X9 / X1 Carbon Gen14,
+		 * ACPI SONY471A).
+		 *
+		 * Kernel imx471 writes V4L2_CID_ANALOGUE_GAIN directly to
+		 * register 0x0204 with range 0..800 (IMX471_ANA_GAIN_MIN/MAX).
+		 *
+		 * Analogue gain model (measured on ThinkPad X9-15 Gen 1):
+		 *   G = 1024 / (1024 - code)
+		 * Fixed exposure raw Bayer means (black-subtracted) track this
+		 * model within ~1.5% over codes 0..800 (best-fit k≈1023 for
+		 * G=k/(k-code)). Code 800 → ~4.57x is the driver max, not a
+		 * datasheet "full range" claim; other IMX helpers with the same
+		 * formula use higher max codes (e.g. imx355 code 960 → ~16x).
+		 *
+		 * Black level: measured ~64 DN at 10-bit on min exposure/gain
+		 * raw frames (mean≈64.1, p50=64) → 4096 at 16-bit.
+		 */
+		blackLevel_ = 4096;
+		gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 };
+	}
+};
+REGISTER_CAMERA_SENSOR_HELPER("imx471", CameraSensorHelperImx471)
+
 class CameraSensorHelperImx477 : public CameraSensorHelper
 {
