The new Jetpack 5.1.2 kernel has a uint32 underflow bug where the min_gain_val
has 1 subtracted from it as a uint32, before an implicit cast to signed sint64, resulting in a check_range()
validation failure (because min becomes greater than max if set to 0 (which is a valid min gain)).
A workaround is to edit DTBs to use a min gain of 1 instead of 0 but fundamentally this is a casting bug in the kernel sources.
The developer probably meant to cast to sint64 before doing the subtraction
((__s64) ctrlprops->min_gain_val) - 1
The failed range check (when using a min gain of 0) manifests as a -34 error during driver load:
[ 12.717909] imx462 202-001a: probing v4l2 sensor
[ 12.717998] imx462 202-001a: initializing mipi...
[ 12.723783] imx462 202-001a: tegracam sensor driver:imx462_v2.0.6
[ 12.794224] imx462 202-001a: ctrl Gain range update failed
[ 12.800117] imx462 202-001a: Error -34 updating mode specific control ranges
[ 12.807501] imx462 202-001a: Error -34 updating control ranges
[ 12.813614] imx462 202-001a: Failed to init ctrls imx462
[ 12.825898] imx462 202-001a: tegra camera subdev registration failed
[ 12.832620] imx462: probe of 202-001a failed with error -34
[ 12.838429] imx462 203-001a: probing v4l2 sensor
[ 12.838491] imx462 203-001a: initializing mipi...
[ 12.846784] imx462 203-001a: tegracam sensor driver:imx462_v2.0.6
[ 12.909648] imx462 203-001a: ctrl Gain range update failed
[ 12.917777] imx462 203-001a: Error -34 updating mode specific control ranges
[ 12.927866] imx462 203-001a: Error -34 updating control ranges
[ 12.937600] imx462 203-001a: Failed to init ctrls imx462
[ 12.944988] imx462 203-001a: tegra camera subdev registration failed
[ 12.955145] imx462: probe of 203-001a failed with error -34