diff --git a/dts/arm/infineon/xmc4500_F100x1024-pinctrl.dtsi b/dts/arm/infineon/xmc4500_F100x1024-pinctrl.dtsi index 4491f7c89d..fd05d415d3 100644 --- a/dts/arm/infineon/xmc4500_F100x1024-pinctrl.dtsi +++ b/dts/arm/infineon/xmc4500_F100x1024-pinctrl.dtsi @@ -388,4 +388,41 @@ /omit-if-no-ref/ i2c_scl_p0_8_u0c0: i2c_scl_p0_8_u0c0 { pinmux = ; /* USIC scl-src = DX1B */ }; + + /omit-if-no-ref/ i2c_sda_dx0_p0_4_u1c0: i2c_sda_dx0_p0_4_u1c0 { + pinmux = ; /* USIC sda-src = DX0A */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p3_4_u2c1: i2c_sda_dx0_p3_4_u2c1 { + pinmux = ; /* USIC sda-src = DX0B */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p0_0_u1c1: i2c_sda_dx0_p0_0_u1c1 { + pinmux = ; /* USIC sda-src = DX0D */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p4_0_u2c1: i2c_sda_dx0_p4_0_u2c1 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p2_15_u1c0: i2c_sda_dx0_p2_15_u1c0 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p1_4_u0c0: i2c_sda_dx0_p1_4_u0c0 { + pinmux = ; /* USIC sda-src = DX0B */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p2_2_u0c1: i2c_sda_dx0_p2_2_u0c1 { + pinmux = ; /* USIC sda-src = DX0A */ + }; + /omit-if-no-ref/ i2c_sda_dout0_p0_1_u1c1: i2c_sda_dout0_p0_1_u1c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p1_7_u0c0: i2c_sda_dout0_p1_7_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dx1_p4_0_u1c1: i2c_scl_dx1_p4_0_u1c1 { + pinmux = ; /* USIC scl-src = DX1C */ + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_6_u0c0: i2c_scl_dout1_p1_6_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_10_u0c0: i2c_scl_dout1_p1_10_u0c0 { + pinmux = ; + }; }; diff --git a/dts/arm/infineon/xmc4700_F144x2048-pinctrl.dtsi b/dts/arm/infineon/xmc4700_F144x2048-pinctrl.dtsi index be73cdcd4a..75988d493e 100644 --- a/dts/arm/infineon/xmc4700_F144x2048-pinctrl.dtsi +++ b/dts/arm/infineon/xmc4700_F144x2048-pinctrl.dtsi @@ -900,4 +900,89 @@ /omit-if-no-ref/ pwm_out_p6_1_ccu81_ch6_high: pwm_out_p6_1_ccu81_ch6_high { pinmux = ; }; + /omit-if-no-ref/ i2c_sda_dx0_p3_12_u2c1: i2c_sda_dx0_p3_12_u2c1 { + pinmux = ; /* USIC sda-src = DX0D */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p4_0_u2c1: i2c_sda_dx0_p4_0_u2c1 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p0_0_u1c1: i2c_sda_dx0_p0_0_u1c1 { + pinmux = ; /* USIC sda-src = DX0D */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p4_6_u2c1: i2c_sda_dx0_p4_6_u2c1 { + pinmux = ; /* USIC sda-src = DX0E */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p2_2_u0c1: i2c_sda_dx0_p2_2_u0c1 { + pinmux = ; /* USIC sda-src = DX0A */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p6_3_u0c1: i2c_sda_dx0_p6_3_u0c1 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p3_7_u2c0: i2c_sda_dx0_p3_7_u2c0 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p3_14_u1c1: i2c_sda_dx0_p3_14_u1c1 { + pinmux = ; /* USIC sda-src = DX0B */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p2_15_u1c0: i2c_sda_dx0_p2_15_u1c0 { + pinmux = ; /* USIC sda-src = DX0C */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p0_4_u1c0: i2c_sda_dx0_p0_4_u1c0 { + pinmux = ; /* USIC sda-src = DX0A */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p6_5_u2c0: i2c_sda_dx0_p6_5_u2c0 { + pinmux = ; /* USIC sda-src = DX0D */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p1_14_u1c0: i2c_sda_dx0_p1_14_u1c0 { + pinmux = ; /* USIC sda-src = DX0E */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p3_4_u2c1: i2c_sda_dx0_p3_4_u2c1 { + pinmux = ; /* USIC sda-src = DX0B */ + }; + /omit-if-no-ref/ i2c_sda_dx0_p1_4_u0c0: i2c_sda_dx0_p1_4_u0c0 { + pinmux = ; /* USIC sda-src = DX0B */ + }; + + /omit-if-no-ref/ i2c_sda_dout0_p3_8_u2c0: i2c_sda_dout0_p3_8_u2c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p1_9_u1c1: i2c_sda_dout0_p1_9_u1c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p6_4_u0c1: i2c_sda_dout0_p6_4_u0c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p1_15_u1c0: i2c_sda_dout0_p1_15_u1c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p3_11_u2c1: i2c_sda_dout0_p3_11_u2c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p0_1_u1c1: i2c_sda_dout0_p0_1_u1c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p1_7_u0c0: i2c_sda_dout0_p1_7_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_sda_dout0_p6_6_u2c0: i2c_sda_dout0_p6_6_u2c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_8_u1c1: i2c_scl_dout1_p1_8_u1c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p3_13_u2c1: i2c_scl_dout1_p3_13_u2c1 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_6_u0c0: i2c_scl_dout1_p1_6_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_9_u0c0: i2c_scl_dout1_p1_9_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p1_10_u0c0: i2c_scl_dout1_p1_10_u0c0 { + pinmux = ; + }; + /omit-if-no-ref/ i2c_scl_dout1_p3_9_u2c0: i2c_scl_dout1_p3_9_u2c0 { + pinmux = ; + }; }; diff --git a/dts/bindings/i2c/infineon,xmc4xxx-i2c.yaml b/dts/bindings/i2c/infineon,xmc4xxx-i2c.yaml index f3af802531..5b3fdc6803 100644 --- a/dts/bindings/i2c/infineon,xmc4xxx-i2c.yaml +++ b/dts/bindings/i2c/infineon,xmc4xxx-i2c.yaml @@ -103,10 +103,67 @@ properties: We expect that the phandles will reference pinctrl nodes. These nodes will have a nodelabel that matches the Infineon SoC Pinctrl defines and have following - format: _p__ + format: i2c__p__ Examples: pinctrl-0 = <&i2c_scl_p5_2_u2c0 &i2c_sda_p5_0_u2c0>; + + The pins should set to open-drain and hwctrl should be disabled. + + &i2c_scl_p5_2_u2c0 { + drive-strength = "strong-sharp-edge"; + drive-open-drain; + hwctrl = "disabled"; + }; + + In the above example, the pin is both an input and output (as is + required for I2C setup). It is internally connected to both DX0 + and DOUT0 of USIC2 channel 0. (See XMC4700/4800 reference manual + page 18-110, Figure 18-50 for more details). + This limits the number of pins that can be used for the I2C module. + + To get around this pin limitation, it is possible to use pins + that do not have this internal connection, and instead connect the + pins externally on the board. + For example, for the SDA line on USIC2 channel 0, P3.8 may be used + for DOUT0 and P6.5 for DX0. These type of pinctrl nodes will have + labels: + i2c_sda_dout0_p3_8_u2c0 and i2c_sda_dx0_p6_5_u2c0. + The generalized format is: i2c___p__ + + An example for SCL and SDA signals on the xmc4700: + pinctrl-0 = <&i2c_sda_dout0_p3_8_u2c0 &i2c_sda_dx0_p6_5_u2c0 + &i2c_scl_dout1_p3_9_u2c0 &i2c_scl_p5_2_u2c0>; + + Externally P3.8 should be connected to P6.5; P3.9 should be connected + to P5.2. + + Note that any pins that do not have dout0/dx0 or dout1/dx1 can have either + function. Thus node i2c_scl_p5_0_u2c0 can be both dout1 and dx1. + + For the pin configurations, the output pins (dout0 and dout1) should be set + to open-drain while the input pins (dx0 and dx1) should not include this setting. + + &i2c_sda_dout0_p3_8_u2c0 { + drive-strength = "strong-sharp-edge"; + drive-open-drain; + hwctrl = "disabled"; + }; + + &i2c_scl_dout1_p3_9_u2c0 { + drive-strength = "strong-sharp-edge"; + drive-open-drain; + hwctrl = "disabled"; + }; + + &i2c_sda_dx0_p6_5_u2c0 { /* will require USIC setting sda-src = DX0D */ + hwctrl = "disabled"; + }; + + &i2c_scl_p5_2_u2c0 { /* will require USIC scl-src = DX1A */ + hwctrl = "disabled"; + }; + required: true pinctrl-names: