After booting yocto on imx8mpevk, the only i2c devices present in /dev are i2c-0, i2c-1, i2c-2, and i2c-6 . My current understanding is that the I2C_CN connector is i2c5. I'd like to attach a DAC to it; however, there is no /dev/i2c-5 device present on the imx8mp. What steps should I be following to enable this connector for i2c in yocto? Thank you kindly for your assistance.
已解决! 转到解答。
I'm sorry, but your solution did not work for me.
Modifying the imx8mp-evk.dts file in linux-imx produced the correct result, where I am now able to use i2cdetect 4 to query devices on the i2c5 bus.
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
index 0ece8e524e44..a73b55f39578 100755
--- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
@@ -302,7 +302,8 @@ &flexcan1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
xceiver-supply = <®_can1_stby>;
- status = "okay";
+ pinctrl-assert-gpios = <&pca6416 2 GPIO_ACTIVE_HIGH>; /* set high to select i2c5 instead of flexcan1 */
+ status = "disabled";
};
&flexcan2 {
@@ -567,6 +568,20 @@ ov5640_mipi_1_ep: endpoint {
};
};
+&i2c5 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c5>;
+ pinctrl-assert-gpios = <&pca6416 2 GPIO_ACTIVE_HIGH>; /* set high to select i2c5 instead of flexcan1 */
+ status = "okay";
+
+ dac_1: mcp4725@60 {
+ compatible = "microchip,mcp4725";
+ reg = <0x60>;
+ vdd-supply = <®_audio_pwr>;
+ };
+};
+
&irqsteer_hdmi {
status = "okay";
};
@@ -991,6 +1006,13 @@ MX8MP_IOMUXC_I2C3_SDA__I2C3_SDA 0x400001c3
>;
};
+ pinctrl_i2c5: i2c5grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SPDIF_TX__I2C5_SCL 0x400001c3
+ MX8MP_IOMUXC_SPDIF_RX__I2C5_SDA 0x400001c3
+ >;
+ };
+
pinctrl_mipi_dsi_en: mipi_dsi_en {
fsl,pins = <
MX8MP_IOMUXC_GPIO1_IO08__GPIO1_IO08 0x16
Thank you, Khang. Your change does in fact create a /dev/i2c-4 device. We have attached an MCP4725 DAC to this bus, and added support to the dts file:
&i2c5 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c5>;
status = "okay";
mcp4725@60 {
compatible = "microchip,mcp4725";
reg = <0x60>;
vdd_supply = <®_audio_pwr>;
};
};
The mcp4725 driver loads, but it reports "failed to read DAC value". Also, running i2cdetect 4 fails to detect any devices on the i2c5 bus.
Are there any other requirements for setting up the i2c5/I2C_CN bus for communications?
Thank you for your kind assistance.
Hi @johnwbyrd ,
You can probe i2c5's SDA/CSL signals while doing the reading/writing/scanning with i2cset, i2cget, i2cdetect, ... to verify the its functionality first.
Then there's might be issue with I2C address.
Br,
K
I'm sorry, but your solution did not work for me.
Modifying the imx8mp-evk.dts file in linux-imx produced the correct result, where I am now able to use i2cdetect 4 to query devices on the i2c5 bus.
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
index 0ece8e524e44..a73b55f39578 100755
--- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
@@ -302,7 +302,8 @@ &flexcan1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
xceiver-supply = <®_can1_stby>;
- status = "okay";
+ pinctrl-assert-gpios = <&pca6416 2 GPIO_ACTIVE_HIGH>; /* set high to select i2c5 instead of flexcan1 */
+ status = "disabled";
};
&flexcan2 {
@@ -567,6 +568,20 @@ ov5640_mipi_1_ep: endpoint {
};
};
+&i2c5 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c5>;
+ pinctrl-assert-gpios = <&pca6416 2 GPIO_ACTIVE_HIGH>; /* set high to select i2c5 instead of flexcan1 */
+ status = "okay";
+
+ dac_1: mcp4725@60 {
+ compatible = "microchip,mcp4725";
+ reg = <0x60>;
+ vdd-supply = <®_audio_pwr>;
+ };
+};
+
&irqsteer_hdmi {
status = "okay";
};
@@ -991,6 +1006,13 @@ MX8MP_IOMUXC_I2C3_SDA__I2C3_SDA 0x400001c3
>;
};
+ pinctrl_i2c5: i2c5grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SPDIF_TX__I2C5_SCL 0x400001c3
+ MX8MP_IOMUXC_SPDIF_RX__I2C5_SDA 0x400001c3
+ >;
+ };
+
pinctrl_mipi_dsi_en: mipi_dsi_en {
fsl,pins = <
MX8MP_IOMUXC_GPIO1_IO08__GPIO1_IO08 0x16
HI @johnwbyrd ,
You can inspire the existing i2c nodes of imx8mp-evk.dts of imx8mp-evk-lpddr4.dts according to your EVK's revision :
1. Add the i25 node :
&i2c5 {
clock-frequency = <1000000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c5>;
status = "okay";
};
2. Configure GPIOs for i2c5 SDA/SCL :
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;
....
pinctrl_i2c5: i2c5grp {
fsl,pins = <
MX8MP_IOMUXC_SD1_CLK__I2C5_SCL 0x400001c3
MX8MP_IOMUXC_SD1_CMD__I2C5_SDA 0x400001c3
>;
};
};
BR,
Khang