CSI-2 Lane Swaping

I have a Jetson Orin NX on a Jetson Orin nano Carrier dev board. I want to interface a four lane CSI-2 camera on to the second camera port, Cam 1, J21.

All the power and control pins between the camera and the board match. The 4 camera lanes do not match the 4 dev board lanes. All 4 lane polarities are in the same order between the camera and the dev board, meaning that in all cases CSIX-DY_N always occurs ordinally before CSIX-DY_P. Therefore it seems I should be able to easily swap the logical physical position of the lanes.

Since we are building 1250 units, I would prefer not to create a custom hardware board to re-route the signals.

I am relatively new to Nvidea and Linux. I have seen in the writings that I need to create a custom device tree overlay. I have also seen that pinmux is used.

Can someone please point me to a case example that demonstrates how to perform such a lane swap?



There’s lane_polarity in the device tree for N/P swap.
You can reference to Orin NX CAM0 like imx477/imx219 for the device tree configure.

	* lane_polarity
 				* Based on the camera connector pin.
 				* CSIx_D0 | CSIx_D1 | CSI(X+1)_D0 | CSI(X+1)CSIx_D1
 				*    LSB  |   BIT1  |     BIT2    |      MSB
 				* if there is a polarity swap on any lane, the bit corrsponding
 				* to the lane should be set
 				* e.g. polarity swap on CSIx_D0 only -> lane_polarity = "1"; 0001
 				* e.g. polarity swap on CSIx_D1 and CSI(X+1)_D0 -> lane_polarity = "6"; 0110

Thank you Shane, this will prove useful.

To be more concise, I am happy with the polarity. I want to swap the lanes themselves.

Specifically, I was hoping to make lane 1 be lane 3 and lane 2 be lane 4, as an example.

So I am looking for a way to remap the lanes themselves to other valid lane pins with the same polarity in this case… Perhaps there is a lane token in software that can be assigned to a particular set of lane pins?

Specifically I want to effectively swap the following lanes in software.

Is there a way to do it? Seems like it would make life easier in the Ecosystem. Otherwise we have to do it in hardware on a case by case basis.


Don’t support it.


Thank you Shane,

This confirms what my Nvidea partner carrier board manufacturer also says. Trust and verify. I trust the Forum first and foremost.

If you know of a customer wish list, maybe support for this could be on it.

Justification -

As a machine vision system manufacturer trying to move our products into NVIDEA’s AI ecosystem there are a litany of carrier boards and a plethora of CSI Cameras.

Most (that I have seen so far) all have the power and control pins either matched or perfectly backwards. This is easily matched by a flat ribbon cable with same or opposite side exposed terminals as the case may require.

But for some reason the CSI ordinal assignments do not match. If on the wish list there were a way to choose what channels go to what channel pins, integrators such as myself could more easily mix and match ecosystem products. This would lead to more Nvidia systems being purchased and the machine vision industry being better served,

In the meantime, I have to make a custom interface board.

Alas for a MIPI standard…


Maybe you can check the design guide and TRM for more information.