diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h
index 7f705e49..fb5188a1 100644
--- a/include/libcamera/ipa/raspberrypi.h
+++ b/include/libcamera/ipa/raspberrypi.h
@@ -27,26 +27,38 @@ namespace RPi {
  * and the pipeline handler may be reverted so that it aborts when an
  * unsupported control is encountered.
  */
-static const ControlInfoMap Controls({
-		{ &controls::AeEnable, ControlInfo(false, true) },
-		{ &controls::ExposureTime, ControlInfo(0, 999999) },
-		{ &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) },
-		{ &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) },
-		{ &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) },
-		{ &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) },
-		{ &controls::ExposureValue, ControlInfo(0.0f, 16.0f) },
-		{ &controls::AwbEnable, ControlInfo(false, true) },
-		{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },
-		{ &controls::AwbMode, ControlInfo(controls::AwbModeValues) },
-		{ &controls::Brightness, ControlInfo(-1.0f, 1.0f) },
-		{ &controls::Contrast, ControlInfo(0.0f, 32.0f) },
-		{ &controls::Saturation, ControlInfo(0.0f, 32.0f) },
-		{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },
-		{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },
-		{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
-		{ &controls::FrameDurationLimits, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },
-		{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }
-	}, controls::controls);
+static const ControlInfoMap Controls(
+	{ { &controls::AeEnable, ControlInfo(false, true) },
+	  { &controls::ExposureTime, ControlInfo(0, 999999) },
+	  { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) },
+	  { &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) },
+	  { &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) },
+	  { &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) },
+	  { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) },
+	  { &controls::AwbEnable, ControlInfo(false, true) },
+	  { &controls::ColourGains, ControlInfo{
+					    Span<const float>({ 0, 0 }),
+					    Span<const float>({ 32, 32 }),
+					    Span<const float>({ 0, 0 }),
+				    } },
+	  { &controls::AwbMode, ControlInfo(controls::AwbModeValues) },
+	  { &controls::Brightness, ControlInfo(-1.0f, 1.0f) },
+	  { &controls::Contrast, ControlInfo(0.0f, 32.0f) },
+	  { &controls::Saturation, ControlInfo(0.0f, 32.0f) },
+	  { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },
+	  { &controls::ColourCorrectionMatrix, ControlInfo{
+						       Span<const float>({ -16, -16, -16, -16, -16, -16, -16, -16, -16 }),
+						       Span<const float>({ 16, 16, 16, 16, 16, 16, 16, 16, 16 }),
+						       Span<const float>({ 1, 0, 0, 0, 1, 0, 0, 0, 1 }),
+					       } },
+	  { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
+	  { &controls::FrameDurationLimits, ControlInfo{
+						    Span<const int64_t>({ 1000, 1000 }),
+						    Span<const int64_t>({ 1000000000, 1000000000 }),
+						    Span<const int64_t>({ 1000, 1000 }),
+					    } },
+	  { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) } },
+	controls::controls);

 } /* namespace RPi */

diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index 1ea2c898..e64fc2bb 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -267,9 +267,9 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo,
 		frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
 	}

-	controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],
-							       frameDurations[1],
-							       frameDurations[2]);
+	controls[&controls::FrameDurationLimits] = ControlInfo{ Span<const int64_t>({ frameDurations[0], frameDurations[0] }),
+								Span<const int64_t>({ frameDurations[1], frameDurations[1] }),
+								Span<const int64_t>({ frameDurations[2], frameDurations[2] }) };

 	*ipaControls = ControlInfoMap(std::move(controls), controls::controls);
 }
diff --git a/test/serialization/ipa_data_serializer_test.cpp b/test/serialization/ipa_data_serializer_test.cpp
index d2050a86..5503cc8a 100644
--- a/test/serialization/ipa_data_serializer_test.cpp
+++ b/test/serialization/ipa_data_serializer_test.cpp
@@ -32,13 +32,15 @@
 using namespace std;
 using namespace libcamera;

-static const ControlInfoMap Controls = ControlInfoMap({
+static const ControlInfoMap Controls = ControlInfoMap(
+	{
 		{ &controls::AeEnable, ControlInfo(false, true) },
 		{ &controls::ExposureTime, ControlInfo(0, 999999) },
 		{ &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) },
-		{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },
+		{ &controls::ColourGains, ControlInfo{ Span<const float>({ 0, 0 }), Span<const float>({ 32, 32 }), Span<const float>({ 0, 0 }) } },
 		{ &controls::Brightness, ControlInfo(-1.0f, 1.0f) },
-	}, controls::controls);
+	},
+	controls::controls);

 namespace libcamera {

