diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index a0f27ac11735..948e0523ab64 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -74,6 +74,8 @@ public:
 	virtual Transform computeTransform(Orientation *orientation) const = 0;
 	virtual ColorFilterArray bayerOrder(Transform t) const = 0;
 	virtual Orientation mountingOrientation() const = 0;
+	virtual bool isMono() const = 0;
+	virtual bool isRaw() const = 0;
 
 	virtual const ControlInfoMap &controls() const = 0;
 	virtual ControlList getControls(std::span<const uint32_t> ids) = 0;
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 8f47b77dc7c4..d1bfcd020c64 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -91,6 +91,8 @@ public:
 	Transform computeTransform(Orientation *orientation) const override;
 	ColorFilterArray bayerOrder(Transform t) const override;
 	Orientation mountingOrientation() const override { return mountingOrientation_; }
+	bool isMono() const override { return cfa_ && cfa_ == ColorFilterArray::MONO; }
+	bool isRaw() const override { return cfa_.has_value(); }
 
 	const ControlInfoMap &controls() const override;
 	ControlList getControls(std::span<const uint32_t> ids) override;
@@ -882,7 +884,7 @@ V4L2Subdevice::Stream CameraSensorLegacy::imageStream() const
 
 int CameraSensorLegacy::sensorInfo(IPACameraSensorInfo *info) const
 {
-	if (!cfa_)
+	if (!isRaw())
 		return -EINVAL;
 
 	info->model = model();
@@ -986,8 +988,8 @@ Transform CameraSensorLegacy::computeTransform(Orientation *orientation) const
 ColorFilterArray CameraSensorLegacy::bayerOrder(Transform t) const
 {
 	/* Return a defined by meaningless value for non-Bayer sensors. */
-	if (!cfa_)
-		return ColorFilterArray::BGGR;
+	if (!isRaw())
+		return ColorFilterArray::MONO;
 
 	if (!flipsAlterBayerOrder_)
 		return *cfa_;
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index c703db31d658..e45f2225b779 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -104,6 +104,8 @@ public:
 	testPatternModes() const override { return testPatternModes_; }
 	int setTestPatternMode(controls::draft::TestPatternModeEnum mode) override;
 	const CameraSensorProperties::SensorDelays &sensorDelays() override;
+	bool isMono() const override { return cfa_ == ColorFilterArray::MONO; }
+	bool isRaw() const override { return true; }
 
 protected:
 	std::string logPrefix() const override;
