dt: Implement an I2C pinctrl mux for BSC0.
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Thu, 9 Apr 2020 11:46:13 +0000 (12:46 +0100)
committerpopcornmix <popcornmix@gmail.com>
Wed, 1 Jul 2020 15:33:49 +0000 (16:33 +0100)
BSC0 serves either the HAT EEPROM pins on the 40pin connector,
or the display and camera on a board specific pairing of either
GPIO 28&29, or 44&45.

Use I2C_MUX_PINCTRL to allow exposing both pairs of pins as I2C
busses.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
16 files changed:
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
arch/arm/boot/dts/bcm2708-rpi-b.dts
arch/arm/boot/dts/bcm2708-rpi-cm.dts
arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
arch/arm/boot/dts/bcm2708-rpi-zero.dts
arch/arm/boot/dts/bcm2709-rpi-2-b.dts
arch/arm/boot/dts/bcm270x-rpi.dtsi
arch/arm/boot/dts/bcm2710-rpi-2-b.dts
arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
arch/arm/boot/dts/bcm2710-rpi-3-b.dts
arch/arm/boot/dts/bcm2710-rpi-cm3.dts
arch/arm/boot/dts/bcm2711-rpi-4-b.dts
arch/arm/boot/dts/bcm2711.dtsi
arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi [new file with mode: 0644]
arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi [new file with mode: 0644]
arch/arm/boot/dts/bcm283x.dtsi

index b800699..0e137d8 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index ef47775..47c0933 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,model-b", "brcm,bcm2835";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 64809ae..5dcdf88 100644 (file)
@@ -3,6 +3,7 @@
 #include "bcm2708-rpi-cm.dtsi"
 #include "bcm283x-rpi-csi0-2lane.dtsi"
 #include "bcm283x-rpi-csi1-4lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,compute-module", "brcm,bcm2835";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 92f780a..af883bf 100644 (file)
@@ -3,6 +3,7 @@
 #include "bcm2708.dtsi"
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 2909dde..0e61e82 100644 (file)
@@ -3,6 +3,7 @@
 #include "bcm2708.dtsi"
 #include "bcm2708-rpi.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,model-zero", "brcm,bcm2835";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 4d2262f..77678a3 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2709-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index be11a44..2af64cd 100644 (file)
@@ -21,6 +21,7 @@
                i2s = &i2s;
                i2c0 = &i2c0;
                i2c1 = &i2c1;
+               i2c10 = &i2c_csi_dsi;
                spi0 = &spi0;
                spi1 = &spi1;
                spi2 = &spi2;
@@ -83,9 +84,9 @@
                uart1 = <&uart1>,"status";
                i2s = <&i2s>,"status";
                spi = <&spi0>,"status";
-               i2c0 = <&i2c0>,"status";
+               i2c0 = <&i2c0if>,"status",<&i2c0mux>,"status";
                i2c1 = <&i2c1>,"status";
-               i2c0_baudrate = <&i2c0>,"clock-frequency:0";
+               i2c0_baudrate = <&i2c0if>,"clock-frequency:0";
                i2c1_baudrate = <&i2c1>,"clock-frequency:0";
 
                audio = <&audio>,"status";
        status = "disabled";
 };
 
-&i2c0 {
+&i2c0if {
        status = "disabled";
 };
 
index 65a6f4d..dd7e189 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2709-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 
 / {
        compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 0c36c64..f497386 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2709-rpi.dtsi"
 #include "bcm283x-rpi-lan7515.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 
 / {
        compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index 261827c..112eb73 100644 (file)
@@ -4,6 +4,7 @@
 #include "bcm2709-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 
 / {
        compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index addebe4..88f7fe5 100644 (file)
@@ -4,7 +4,7 @@
 #include "bcm2709-rpi.dtsi"
 #include "bcm283x-rpi-csi0-2lane.dtsi"
 #include "bcm283x-rpi-csi1-4lane.dtsi"
-
+#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
 / {
        compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
        model = "Raspberry Pi Compute Module 3";
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
+&i2c0mux {
+       pinctrl-0 = <&i2c0_pins>;
+};
+
 &i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_pins>;
index b3a00ba..7467817 100644 (file)
 
 #include "bcm2711-rpi.dtsi"
 #include "bcm283x-rpi-csi1-2lane.dtsi"
+#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
 
 /delete-node/ &emmc2;
 
        };
 };
 
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins>;
+&i2c0if {
        clock-frequency = <100000>;
 };
 
index 72cbd23..b34a65f 100644 (file)
        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/bcm283x-rpi-i2c0mux_0_28.dtsi b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
new file mode 100644 (file)
index 0000000..38f0074
--- /dev/null
@@ -0,0 +1,4 @@
+&i2c0mux {
+       pinctrl-0 = <&i2c0_gpio0>;
+       pinctrl-1 = <&i2c0_gpio28>;
+};
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 (file)
index 0000000..119946d
--- /dev/null
@@ -0,0 +1,4 @@
+&i2c0mux {
+       pinctrl-0 = <&i2c0_gpio0>;
+       pinctrl-1 = <&i2c0_gpio44>;
+};
index adb59ca..4426f9e 100644 (file)
                        status = "disabled";
                };
 
-               i2c0: i2c@7e205000 {
+               i2c0if: i2c@7e205000 {
                        compatible = "brcm,bcm2835-i2c";
                        reg = <0x7e205000 0x200>;
                        interrupts = <2 21>;
                        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>;