diff --git a/src/libcamera/pipeline/rpi/pisp/pisp.cpp b/src/libcamera/pipeline/rpi/pisp/pisp.cpp
index 15dd950682eeff9dc1a9b4ae2f927da85c0eaac6..49a97415c67f0c7c36b3c0b8bd597c278af16838 100644
--- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp
+++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp
@@ -740,6 +740,16 @@ public:
 		return cfe_[Cfe::Output0].dev();
 	}
 
+	int bindDevice(V4L2VideoDevice *dev)
+	{
+		return mediaContext_->bindDevice(dev);
+	}
+
+	int bindDevice(V4L2Subdevice *dev)
+	{
+		return mediaContext_->bindDevice(dev);
+	}
+
 	CameraConfiguration::Status
 	platformValidate(RPi::RPiCameraConfiguration *rpiConfig) const override;
 
@@ -776,6 +786,8 @@ public:
 	unsigned int tdnInputIndex_;
 	unsigned int stitchInputIndex_;
 
+	std::unique_ptr<MediaContext> mediaContext_;
+
 	struct Config {
 		/*
 		 * Number of CFE config and stats buffers to allocate and use. A
@@ -935,6 +947,7 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator)
 					("pisp_frontend", true, pisp->pispVariant_);
 			pisp->be_ = SharedMemObject<BackEnd>
 					("pisp_backend", BackEnd::Config({}), pisp->pispVariant_);
+			pisp->mediaContext_ = ispDevice->createContext();
 
 			if (!pisp->fe_.fd().isValid() || !pisp->be_.fd().isValid()) {
 				LOG(RPI, Error) << "Failed to create ISP shared objects";
@@ -1155,6 +1168,16 @@ int PipelineHandlerPiSP::platformRegister(std::unique_ptr<RPi::CameraData> &came
 			return ret;
 	}
 
+	/* Bind devices to the media device. */
+	data->bindDevice(data->isp_[Isp::Input].dev());
+	data->bindDevice(data->isp_[Isp::Output0].dev());
+	data->bindDevice(data->isp_[Isp::Output1].dev());
+	data->bindDevice(data->isp_[Isp::Config].dev());
+	data->bindDevice(data->isp_[Isp::TdnInput].dev());
+	data->bindDevice(data->isp_[Isp::TdnOutput].dev());
+	data->bindDevice(data->isp_[Isp::StitchInput].dev());
+	data->bindDevice(data->isp_[Isp::StitchOutput].dev());
+
 	/* Write up all the IPA connections. */
 	data->ipa_->prepareIspComplete.connect(data, &PiSPCameraData::prepareIspComplete);
 	data->ipa_->processStatsComplete.connect(data, &PiSPCameraData::processStatsComplete);
