diff --git a/src/ipa/rpi/controller/rpi/agc_channel.cpp b/src/ipa/rpi/controller/rpi/agc_channel.cpp
index 1e7eae06d425..3efb6482b67f 100644
--- a/src/ipa/rpi/controller/rpi/agc_channel.cpp
+++ b/src/ipa/rpi/controller/rpi/agc_channel.cpp
@@ -253,6 +253,8 @@ int AgcConfig::read(const libcamera::YamlObject &params)
 
 	stableRegion = params["stable_region"].get<double>(0.02);
 
+	desaturate = params["desaturate"].get<int>(1);
+
 	return 0;
 }
 
@@ -860,8 +862,10 @@ bool AgcChannel::applyDigitalGain(double gain, double targetY, bool channelBound
 	 * quickly (and we then approach the correct value more quickly from
 	 * below).
 	 */
-	bool desaturate = !channelBound &&
-			  targetY > config_.fastReduceThreshold && gain < sqrt(targetY);
+	bool desaturate = false;
+	if (config_.desaturate)
+		desaturate = !channelBound &&
+			     targetY > config_.fastReduceThreshold && gain < sqrt(targetY);
 	if (desaturate)
 		dg /= config_.fastReduceThreshold;
 	LOG(RPiAgc, Debug) << "Digital gain " << dg << " desaturate? " << desaturate;
diff --git a/src/ipa/rpi/controller/rpi/agc_channel.h b/src/ipa/rpi/controller/rpi/agc_channel.h
index c1808422498a..4cf7233eef25 100644
--- a/src/ipa/rpi/controller/rpi/agc_channel.h
+++ b/src/ipa/rpi/controller/rpi/agc_channel.h
@@ -76,6 +76,7 @@ struct AgcConfig {
 	libcamera::utils::Duration defaultExposureTime;
 	double defaultAnalogueGain;
 	double stableRegion;
+	bool desaturate;
 };
 
 class AgcChannel
