diff mbox series

[1/2] ARM: dts: bcm2*: Demux i2c0 with a pinctrl

Message ID 20220209162515.706729-2-detlev.casanova@collabora.com (mailing list archive)
State New, archived
Headers show
Series ARM: dts: Support official Raspberry Pi 7inch touchscreen | expand

Commit Message

Detlev Casanova Feb. 9, 2022, 4:25 p.m. UTC
The i2c0 device has 2 different busses controlled by a pinctrl.
This commit separates the device node into 2 i2c devices:
 * pin 0: Base i2c bus
 * pin 44: DSI i2c bus

i2c0 is renamed to i2c0if so that device-trees referencing i2c0 don't
break and use the i2c0 node defined in i2c0mux node.

i2c_csi_dsi can be used to control devices via the DSI i2c bus, used for
DSI displays.

Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 arch/arm/boot/dts/bcm2711-rpi-4-b.dts         |  1 +
 arch/arm/boot/dts/bcm2711.dtsi                |  2 +-
 arch/arm/boot/dts/bcm2835-rpi.dtsi            |  9 ++++---
 .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi    |  4 +++
 arch/arm/boot/dts/bcm283x.dtsi                | 26 ++++++++++++++++++-
 5 files changed, 37 insertions(+), 5 deletions(-)
 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi

Comments

Stefan Wahren Feb. 9, 2022, 5:26 p.m. UTC | #1
Hi Detlev,

Am 09.02.22 um 17:25 schrieb Detlev Casanova:
> The i2c0 device has 2 different busses controlled by a pinctrl.
> This commit separates the device node into 2 i2c devices:
>  * pin 0: Base i2c bus
>  * pin 44: DSI i2c bus
>
> i2c0 is renamed to i2c0if so that device-trees referencing i2c0 don't
> break and use the i2c0 node defined in i2c0mux node.
>
> i2c_csi_dsi can be used to control devices via the DSI i2c bus, used for
> DSI displays.
>
> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>

just a note: Uwe sends a similiar approach for the RTC on CM4 [1] which
hasn't applied yet.

[1] - https://www.spinics.net/lists/arm-kernel/msg944330.html

> ---
>  arch/arm/boot/dts/bcm2711-rpi-4-b.dts         |  1 +
>  arch/arm/boot/dts/bcm2711.dtsi                |  2 +-
>  arch/arm/boot/dts/bcm2835-rpi.dtsi            |  9 ++++---
>  .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi    |  4 +++
>  arch/arm/boot/dts/bcm283x.dtsi                | 26 ++++++++++++++++++-
>  5 files changed, 37 insertions(+), 5 deletions(-)
>  create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
>
> diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> index 4432412044de..5dcce58817e6 100644
> --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> @@ -4,6 +4,7 @@
>  #include "bcm2711-rpi.dtsi"
>  #include "bcm283x-rpi-usb-peripheral.dtsi"
>  #include "bcm283x-rpi-wifi-bt.dtsi"
> +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
>  
>  / {
>  	compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
> diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
> index 3b60297af7f6..bf6e8251c2c7 100644
> --- a/arch/arm/boot/dts/bcm2711.dtsi
> +++ b/arch/arm/boot/dts/bcm2711.dtsi
> @@ -1037,7 +1037,7 @@ &cma {
>  	alloc-ranges = <0x0 0x00000000 0x40000000>;
>  };
>  
> -&i2c0 {
> +&i2c0if {
>  	compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
>  	interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
>  };
> diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
> index 87ddcad76083..1e38f9f0e80e 100644
> --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
> +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
> @@ -49,13 +49,16 @@ alt0: alt0 {
>  	};
>  };
>  
> -&i2c0 {
> -	pinctrl-names = "default";
> -	pinctrl-0 = <&i2c0_gpio0>;
> +&i2c0if {
>  	status = "okay";
>  	clock-frequency = <100000>;
>  };
>  
> +&i2c0mux {
> +	pinctrl-0 = <&i2c0_gpio0>;
> +	status = "okay";
> +};
> +
>  &i2c1 {
>  	pinctrl-names = "default";
>  	pinctrl-0 = <&i2c1_gpio2>;
> diff --git a/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
> new file mode 100644
> index 000000000000..119946d878db
> --- /dev/null
> +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
> @@ -0,0 +1,4 @@
> +&i2c0mux {
> +	pinctrl-0 = <&i2c0_gpio0>;
> +	pinctrl-1 = <&i2c0_gpio44>;
> +};
> diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
> index a3e06b680947..06d04cde52b9 100644
> --- a/arch/arm/boot/dts/bcm283x.dtsi
> +++ b/arch/arm/boot/dts/bcm283x.dtsi
> @@ -334,7 +334,7 @@ spi: spi@7e204000 {
>  			status = "disabled";
>  		};
>  
> -		i2c0: i2c@7e205000 {
> +		i2c0if: i2c@7e205000 {
>  			compatible = "brcm,bcm2835-i2c";
>  			reg = <0x7e205000 0x200>;
>  			interrupts = <2 21>;
> @@ -344,6 +344,30 @@ i2c0: i2c@7e205000 {
>  			status = "disabled";
>  		};
>  
> +		i2c0mux: i2c0mux {
> +			compatible = "i2c-mux-pinctrl";
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			i2c-parent = <&i2c0if>;
> +
> +			pinctrl-names = "i2c0", "i2c_csi_dsi";
> +
> +			status = "disabled";
> +
> +			i2c0: i2c@0 {
> +				reg = <0>;
> +				#address-cells = <1>;
> +				#size-cells = <0>;
> +			};
> +
> +			i2c_csi_dsi: i2c@1 {
> +				reg = <1>;
> +				#address-cells = <1>;
> +				#size-cells = <0>;
> +			};
> +		};
> +
>  		dpi: dpi@7e208000 {
>  			compatible = "brcm,bcm2835-dpi";
>  			reg = <0x7e208000 0x8c>;
Detlev Casanova Feb. 9, 2022, 7:25 p.m. UTC | #2
On Wednesday, February 9, 2022 12:26:15 P.M. EST Stefan Wahren wrote:
> Hi Detlev,
> 
> Am 09.02.22 um 17:25 schrieb Detlev Casanova:
> > The i2c0 device has 2 different busses controlled by a pinctrl.
> > 
> > This commit separates the device node into 2 i2c devices:
> >  * pin 0: Base i2c bus
> >  * pin 44: DSI i2c bus
> > 
> > i2c0 is renamed to i2c0if so that device-trees referencing i2c0 don't
> > break and use the i2c0 node defined in i2c0mux node.
> > 
> > i2c_csi_dsi can be used to control devices via the DSI i2c bus, used for
> > DSI displays.
> > 
> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> 
> just a note: Uwe sends a similiar approach for the RTC on CM4 [1] which
> hasn't applied yet.
> 
> [1] - https://www.spinics.net/lists/arm-kernel/msg944330.html


Oh, I missed that, I'll just hav to wait for it to be merged and base the next 
commit on that (Mainly name change)
 
> > ---
> > 
> >  arch/arm/boot/dts/bcm2711-rpi-4-b.dts         |  1 +
> >  arch/arm/boot/dts/bcm2711.dtsi                |  2 +-
> >  arch/arm/boot/dts/bcm2835-rpi.dtsi            |  9 ++++---
> >  .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi    |  4 +++
> >  arch/arm/boot/dts/bcm283x.dtsi                | 26 ++++++++++++++++++-
> >  5 files changed, 37 insertions(+), 5 deletions(-)
> >  create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
> > 
> > diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> > b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts index 4432412044de..5dcce58817e6
> > 100644
> > --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> > +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
> > @@ -4,6 +4,7 @@
> > 
> >  #include "bcm2711-rpi.dtsi"
> >  #include "bcm283x-rpi-usb-peripheral.dtsi"
> >  #include "bcm283x-rpi-wifi-bt.dtsi"
> > 
> > +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
> > 
> >  / {
> >  
> >  	compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
> > 
> > diff --git a/arch/arm/boot/dts/bcm2711.dtsi
> > b/arch/arm/boot/dts/bcm2711.dtsi index 3b60297af7f6..bf6e8251c2c7 100644
> > --- a/arch/arm/boot/dts/bcm2711.dtsi
> > +++ b/arch/arm/boot/dts/bcm2711.dtsi
> > @@ -1037,7 +1037,7 @@ &cma {
> > 
> >  	alloc-ranges = <0x0 0x00000000 0x40000000>;
> >  
> >  };
> > 
> > -&i2c0 {
> > +&i2c0if {
> > 
> >  	compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
> >  	interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
> >  
> >  };
> > 
> > diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi
> > b/arch/arm/boot/dts/bcm2835-rpi.dtsi index 87ddcad76083..1e38f9f0e80e
> > 100644
> > --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
> > +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
> > @@ -49,13 +49,16 @@ alt0: alt0 {
> > 
> >  	};
> >  
> >  };
> > 
> > -&i2c0 {
> > -	pinctrl-names = "default";
> > -	pinctrl-0 = <&i2c0_gpio0>;
> > +&i2c0if {
> > 
> >  	status = "okay";
> >  	clock-frequency = <100000>;
> >  
> >  };
> > 
> > +&i2c0mux {
> > +	pinctrl-0 = <&i2c0_gpio0>;
> > +	status = "okay";
> > +};
> > +
> > 
> >  &i2c1 {
> >  
> >  	pinctrl-names = "default";
> >  	pinctrl-0 = <&i2c1_gpio2>;
> > 
> > diff --git a/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
> > b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi new file mode 100644
> > index 000000000000..119946d878db
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
> > @@ -0,0 +1,4 @@
> > +&i2c0mux {
> > +	pinctrl-0 = <&i2c0_gpio0>;
> > +	pinctrl-1 = <&i2c0_gpio44>;
> > +};
> > diff --git a/arch/arm/boot/dts/bcm283x.dtsi
> > b/arch/arm/boot/dts/bcm283x.dtsi index a3e06b680947..06d04cde52b9 100644
> > --- a/arch/arm/boot/dts/bcm283x.dtsi
> > +++ b/arch/arm/boot/dts/bcm283x.dtsi
> > @@ -334,7 +334,7 @@ spi: spi@7e204000 {
> > 
> >  			status = "disabled";
> >  		
> >  		};
> > 
> > -		i2c0: i2c@7e205000 {
> > +		i2c0if: i2c@7e205000 {
> > 
> >  			compatible = "brcm,bcm2835-i2c";
> >  			reg = <0x7e205000 0x200>;
> >  			interrupts = <2 21>;
> > 
> > @@ -344,6 +344,30 @@ i2c0: i2c@7e205000 {
> > 
> >  			status = "disabled";
> >  		
> >  		};
> > 
> > +		i2c0mux: i2c0mux {
> > +			compatible = "i2c-mux-pinctrl";
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			i2c-parent = <&i2c0if>;
> > +
> > +			pinctrl-names = "i2c0", "i2c_csi_dsi";
> > +
> > +			status = "disabled";
> > +
> > +			i2c0: i2c@0 {
> > +				reg = <0>;
> > +				#address-cells = <1>;
> > +				#size-cells = <0>;
> > +			};
> > +
> > +			i2c_csi_dsi: i2c@1 {
> > +				reg = <1>;
> > +				#address-cells = <1>;
> > +				#size-cells = <0>;
> > +			};
> > +		};
> > +
> > 
> >  		dpi: dpi@7e208000 {
> >  		
> >  			compatible = "brcm,bcm2835-dpi";
> >  			reg = <0x7e208000 0x8c>;
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
index 4432412044de..5dcce58817e6 100644
--- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
+++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
@@ -4,6 +4,7 @@ 
 #include "bcm2711-rpi.dtsi"
 #include "bcm283x-rpi-usb-peripheral.dtsi"
 #include "bcm283x-rpi-wifi-bt.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 
 / {
 	compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
index 3b60297af7f6..bf6e8251c2c7 100644
--- a/arch/arm/boot/dts/bcm2711.dtsi
+++ b/arch/arm/boot/dts/bcm2711.dtsi
@@ -1037,7 +1037,7 @@  &cma {
 	alloc-ranges = <0x0 0x00000000 0x40000000>;
 };
 
-&i2c0 {
+&i2c0if {
 	compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
 	interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
 };
diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
index 87ddcad76083..1e38f9f0e80e 100644
--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
@@ -49,13 +49,16 @@  alt0: alt0 {
 	};
 };
 
-&i2c0 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&i2c0_gpio0>;
+&i2c0if {
 	status = "okay";
 	clock-frequency = <100000>;
 };
 
+&i2c0mux {
+	pinctrl-0 = <&i2c0_gpio0>;
+	status = "okay";
+};
+
 &i2c1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&i2c1_gpio2>;
diff --git a/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
new file mode 100644
index 000000000000..119946d878db
--- /dev/null
+++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
@@ -0,0 +1,4 @@ 
+&i2c0mux {
+	pinctrl-0 = <&i2c0_gpio0>;
+	pinctrl-1 = <&i2c0_gpio44>;
+};
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
index a3e06b680947..06d04cde52b9 100644
--- a/arch/arm/boot/dts/bcm283x.dtsi
+++ b/arch/arm/boot/dts/bcm283x.dtsi
@@ -334,7 +334,7 @@  spi: spi@7e204000 {
 			status = "disabled";
 		};
 
-		i2c0: i2c@7e205000 {
+		i2c0if: i2c@7e205000 {
 			compatible = "brcm,bcm2835-i2c";
 			reg = <0x7e205000 0x200>;
 			interrupts = <2 21>;
@@ -344,6 +344,30 @@  i2c0: i2c@7e205000 {
 			status = "disabled";
 		};
 
+		i2c0mux: i2c0mux {
+			compatible = "i2c-mux-pinctrl";
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			i2c-parent = <&i2c0if>;
+
+			pinctrl-names = "i2c0", "i2c_csi_dsi";
+
+			status = "disabled";
+
+			i2c0: i2c@0 {
+				reg = <0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+			};
+
+			i2c_csi_dsi: i2c@1 {
+				reg = <1>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+			};
+		};
+
 		dpi: dpi@7e208000 {
 			compatible = "brcm,bcm2835-dpi";
 			reg = <0x7e208000 0x8c>;