| Message ID | CALr1FG-kFkSwsXtwCegRtHcCcD1Q+-483g_FFAVWabpa1fD49Q@mail.gmail.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
Hi John On Fri, Jul 31, 2026 at 08:15:47AM -0700, John Cronin wrote: > Add CameraSensorHelper for Sony IMX471 (SONY471A), used on Lenovo > ThinkPad X9 / X1 Carbon Gen14 and related IPU7 platforms. > > The kernel imx471 driver writes V4L2_CID_ANALOGUE_GAIN codes 0..800 > directly to register 0x0204. > > Analogue gain model (measured on ThinkPad X9-15 Gen 1, Fedora 44, > kernel 7.1.5): fixed-exposure raw Bayer means track > > G = 1024 / (1024 - code) > > within ~1.5% over codes 0..800 (best-fit k≈1023 for G=k/(k-code)). > Code 800 implies ~4.57x; that is the driver's V4L2 max under this > model, not a full-scale datasheet claim. Other IMX helpers using the > same formula expose higher max codes (e.g. imx355 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. > > Soft-ISP loads without "Failed to create camera sensor helper for > imx471". > > Signed-off-by: John Cronin <john.cronin@opcenter.com> > --- > src/ipa/libipa/camera_sensor_helper.cpp | 29 +++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > 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. > + */ This kind of repeats the commit message content, and I think it's better placed there. With your permission, I'll drop the comment when applying the patch! Thanks j > + blackLevel_ = 4096; > + gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; > + } > +}; > +REGISTER_CAMERA_SENSOR_HELPER("imx471", CameraSensorHelperImx471) > + > class CameraSensorHelperImx477 : public CameraSensorHelper > { > public: > -- > 2.55.0
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 {
Add CameraSensorHelper for Sony IMX471 (SONY471A), used on Lenovo ThinkPad X9 / X1 Carbon Gen14 and related IPU7 platforms. The kernel imx471 driver writes V4L2_CID_ANALOGUE_GAIN codes 0..800 directly to register 0x0204. Analogue gain model (measured on ThinkPad X9-15 Gen 1, Fedora 44, kernel 7.1.5): fixed-exposure raw Bayer means track G = 1024 / (1024 - code) within ~1.5% over codes 0..800 (best-fit k≈1023 for G=k/(k-code)). Code 800 implies ~4.57x; that is the driver's V4L2 max under this model, not a full-scale datasheet claim. Other IMX helpers using the same formula expose higher max codes (e.g. imx355 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. Soft-ISP loads without "Failed to create camera sensor helper for imx471". Signed-off-by: John Cronin <john.cronin@opcenter.com> --- src/ipa/libipa/camera_sensor_helper.cpp | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) public: