diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index b645227bc..cf419e811 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -252,20 +252,22 @@ struct SimplePipelineInfo {
 	 * The Software ISP can't be used together with the converters.
 	 */
 	bool swIspAllowed;
+	/* Flags controlling Software ISP behavior. */
+	SoftwareIsp::SoftwareIspFlags swIspFlags;
 };
 
 namespace {
 
 static const SimplePipelineInfo supportedDevices[] = {
-	{ "dcmipp", {}, false },
-	{ "imx7-csi", { { "pxp", 1 } }, true },
-	{ "intel-ipu6", {}, true },
-	{ "intel-ipu7", {}, true },
-	{ "j721e-csi2rx", {}, true },
-	{ "mtk-seninf", { { "mtk-mdp", 3 } }, false },
-	{ "mxc-isi", {}, false },
-	{ "qcom-camss", {}, true },
-	{ "sun6i-csi", {}, false },
+	{ "dcmipp", {}, false, {} },
+	{ "imx7-csi", { { "pxp", 1 } }, true, SoftwareIsp::SoftwareIspFlag::AllocCmaDmaBuffers },
+	{ "intel-ipu6", {}, true, {} },
+	{ "intel-ipu7", {}, true, {} },
+	{ "j721e-csi2rx", {}, true, SoftwareIsp::SoftwareIspFlag::AllocCmaDmaBuffers },
+	{ "mtk-seninf", { { "mtk-mdp", 3 } }, false, {} },
+	{ "mxc-isi", {}, false, {} },
+	{ "qcom-camss", {}, true, {} },
+	{ "sun6i-csi", {}, false, {} },
 };
 
 bool isRaw(const StreamConfiguration &cfg)
@@ -430,6 +432,7 @@ public:
 	V4L2Subdevice *subdev(const MediaEntity *entity);
 	std::shared_ptr<MediaDevice> converter() { return converter_; }
 	bool swIspEnabled() const { return swIspEnabled_; }
+	SoftwareIsp::SoftwareIspFlags swIspFlags() const { return swIspFlags_; }
 
 protected:
 	int queueRequestDevice(Camera *camera, Request *request) override;
@@ -463,6 +466,7 @@ private:
 
 	std::shared_ptr<MediaDevice> converter_;
 	bool swIspEnabled_ = false;
+	SoftwareIsp::SoftwareIspFlags swIspFlags_;
 };
 
 /* -----------------------------------------------------------------------------
@@ -619,7 +623,7 @@ int SimpleCameraData::init()
 	 */
 	if (!converter_ && pipe->swIspEnabled()) {
 		swIsp_ = std::make_unique<SoftwareIsp>(pipe, sensor_.get(),
-						       SoftwareIsp::SoftwareIspFlag::AllocCmaDmaBuffers,
+						       pipe->swIspFlags(),
 						       &controlInfo_);
 		if (!swIsp_->isValid()) {
 			LOG(SimplePipeline, Warning)
@@ -1964,6 +1968,7 @@ bool SimplePipelineHandler::matchDevice(std::shared_ptr<MediaDevice> media,
 		 */
 		numStreams = 2;
 		swIspEnabled_ = true;
+		swIspFlags_ = info.swIspFlags;
 	} else if (converter.dev) {
 		converter_ = std::move(converter.dev);
 		numStreams = converter.streams;
