Jetson GMSL I2Cmux mapping

The IMX390 camera use a I2C mux(TI TCA9546) in Jetson GSML online document.
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/gmsl_camera_framework.html#wwpID0E02H0HA

May I to know how to setup I2C mux to mapping the physical I2C slave address and the proxy I2C slave address as below table?

We don’t understand this question.
The I2C mux is responsible to choose I2C? You should set the mapping in SW.

I see the tegra194-p2822-0000-camera-imx390-a00.dtsi.
How to mapping physical to proxy I2C address?
Sensor1: 0x1a to 0x1b
Sensor2: 0x1a to 0x1c

imx390_a@1b {
	/* sensor device connected at link A at proxy address 0x1b (the proxy address is assigned runtime). */
	def-addr = <0x1a>; /* default slave address is 0x1a */
	nvidia,gmsl-ser-device = <&ser_a>; /* link to its serializer device. */
	nvidia,gmsl-dser-device = <&dser>; /* link to its deserializer device. */
};

imx390_b@1c {
	/* sensor device connected at link A at proxy address 0x1b (the proxy address are assigned runtime). */
	def-addr = <0x1a>; /* Default slave address is 0x1a. */
	/* Define clocks, io pins, power sources */
	nvidia,gmsl-ser-device = <&ser_b>; /* Link to its serializer device. */
	nvidia,gmsl-dser-device = <&dser>; /* Link to its deserializer device. */
};

Ser1: 0x62 to 0x40
Ser2: 0x62 to 0x60
Des: 0x48 to N/A

ser_a: max9295_a@40 {
	/* serializer device connected at link A at proxy address 0x40 (the proxy address are assigned runtime) */
	compatible = "nvidia,max9295";
	reg = <0x40>;
	nvidia,gmsl-dser-device = <&dser>; /* link to its deserializer device */
};

ser_b: max9295_b@60 {
	/* serializer device connected at link A at proxy address 0x60 (the proxy address is assigned runtime) */
	compatible = "nvidia,max9295";
	reg = <0x60>;
	nvidia,gmsl-dser-device = <&dser>; /* link to its deserializer device */
};

Did you use the same chip for design?

you see mapping in table:
Ser1: 0x62 to 0x40
Ser2: 0x62 to 0x60
Des: 0x48 to N/A

But in device tree:
ser_a: max9295_a@40 {
reg = <0x40>;
}
ser_b: max9295_b@60 {
reg = <0x60>;
}

So
ser_a: 0x40 to 0x40
ser_b: 0x60 to 0x60
How to?
Ser1: 0x62 to 0x40
Ser2: 0x62 to 0x60
Des: 0x48 to N/A

It depends on SerDes chip and how your driver written. The SerDes data sheets specify, the set of register programming sequence to be executed in a specific order, to update the default physical i2c address with proxy address of given device/module. It happens at boot time when sensor module probes.

You can trace this function in imx390 sensor driver to get idea: imx390_gmsl_serdes_setup()

Exact address assignment happens in this function: max9295_setup_control(

This is serdes module and driver implementation specific.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.