pipeline: imx8-isi: Dynamically compute crossbar subdevice's first source.
diff mbox series

Message ID 20250606073459.1869940-1-antoine.bouyer@nxp.com
State Accepted
Commit d3f3b95b64d2239adca7e0c6e9eb35db690ca98d
Headers show
Series
  • pipeline: imx8-isi: Dynamically compute crossbar subdevice's first source.
Related show

Commit Message

Antoine Bouyer June 6, 2025, 7:34 a.m. UTC
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 <antoine.bouyer@nxp.com>
---
 src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Laurent Pinchart June 16, 2025, 9:40 p.m. UTC | #1
Hi Antoine,

Thank you for the patch.

On Fri, Jun 06, 2025 at 09:34:59AM +0200, Antoine Bouyer wrote:
> 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 <antoine.bouyer@nxp.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  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 ecda426a6021..177097ae21d6 100644
> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> @@ -822,7 +822,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;

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
index ecda426a6021..177097ae21d6 100644
--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
@@ -822,7 +822,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;