b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -644,6 +644,30 @@ class CameraSensorHelperImx462 : public
CameraSensorHelperImx290
};
REGISTER_CAMERA_SENSOR_HELPER("imx462", CameraSensorHelperImx462)
+class CameraSensorHelperImx471 : public CameraSensorHelper
+{
+public:
+ CameraSensorHelperImx471()
+ {
+ /*
+ * Sony IMX471 (IPU7 / ThinkPad X9, X1 Carbon Gen14).
+ *
+ * Analogue gain is programmed via V4L2_CID_ANALOGUE_GAIN to
+ * register 0x0204. The kernel driver (imx471) exposes range
+ * 0..800 and writes the code directly.
+ *
+ * Sony linear gain model used by several IMX sensors:
+ * G = 1024 / (1024 - code)
+ * so code 0 → 1.0x and code 800 → ~4.57x.
+ *
+ * 10-bit optical black pedestal is typically 64 → 4096 at 16-bit.
+ */
+ blackLevel_ = 4096;
+ gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 };
+ }
+};
+REGISTER_CAMERA_SENSOR_HELPER("imx471", CameraSensorHelperImx471)
+
class CameraSensorHelperImx477 : public CameraSensorHelper
{
public:
b/src/libcamera/sensor/camera_sensor_properties.cpp
@@ -297,6 +297,23 @@ const CameraSensorProperties
*CameraSensorProperties::get(const std::string &sen
.hblankDelay = 2
},
} },
+ { "imx471", {
+ /* 1/2.3-type; ~1.4 µm pixels (nm). Delays unverified. */
+ .unitCellSize = { 1400, 1400 },
+ .testPatternModes = {
+ { controls::draft::TestPatternModeOff, 0 },
+ { controls::draft::TestPatternModeSolidColor, 1 },
+ { controls::draft::TestPatternModeColorBars, 2 },
+ { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
+ { controls::draft::TestPatternModePn9, 4 },
+ },
+ .sensorDelays = {
+ .exposureDelay = 2,
+ .gainDelay = 2,
+ .vblankDelay = 2,
+ .hblankDelay = 2
+ },
+ } },
{ "imx477", {
.unitCellSize = { 1550, 1550 },