From d3f3b95b64d2239adca7e0c6e9eb35db690ca98d Mon Sep 17 00:00:00 2001 From: Antoine Bouyer Date: Fri, 6 Jun 2025 09:34:59 +0200 Subject: [PATCH] pipeline: imx8-isi: Dynamically compute crossbar subdevice's first source. So far, imx8-isi pipeline supports _symetrical_ crossbar, with same amount of sink and source pads. But for some other imx SoCs, such as i.MX8QM or i.MX95, crossbar is not symetric anymore. Since each crossbar source is already captured as a pipes_ vector entry, we use pipes_ vector's size to compute 1st source index. "1st source index" = "total number of crossbar pads" - pipes_.count() Signed-off-by: Antoine Bouyer Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index b81e436b2..f4014b95d 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -820,7 +820,7 @@ int PipelineHandlerISI::configure(Camera *camera, CameraConfiguration *c) * routing table instead of resetting it. */ V4L2Subdevice::Routing routing = {}; - unsigned int xbarFirstSource = crossbar_->entity()->pads().size() / 2 + 1; + unsigned int xbarFirstSource = crossbar_->entity()->pads().size() - pipes_.size(); for (const auto &[idx, config] : utils::enumerate(*c)) { uint32_t sourcePad = xbarFirstSource + idx;