diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 71853bb2..e6bbff5d 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -298,6 +298,8 @@ public:
 	};
 	std::queue<RequestOutputs> conversionQueue_;
 	bool useConversion_;
+	bool swispRequested_;
+	bool rawRequested_;
 
 	std::unique_ptr<Converter> converter_;
 	std::unique_ptr<SoftwareIsp> swIsp_;
@@ -1188,6 +1190,22 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo
 	if (roles.empty())
 		return config;
 
+	data->swispRequested_ = false;
+	data->rawRequested_ = false;
+	if (data->swIsp_) {
+		for (auto &role : roles)
+			if (role == StreamRole::Raw) {
+				if (data->rawRequested_) {
+					LOG(SimplePipeline, Error)
+						<< "Can't capture multiple raw streams";
+					return nullptr;
+				}
+				data->rawRequested_ = true;
+			} else {
+				data->swispRequested_ = true;
+			}
+	}
+
 	/* Create the formats map. */
 	std::map<PixelFormat, std::vector<SizeRange>> formats;
 
