bcm27xx: update patches from RPi foundation
[openwrt/staging/luka.git] / target / linux / bcm27xx / patches-5.4 / 950-0667-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch
diff --git a/target/linux/bcm27xx/patches-5.4/950-0667-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch b/target/linux/bcm27xx/patches-5.4/950-0667-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch
new file mode 100644 (file)
index 0000000..002ad86
--- /dev/null
@@ -0,0 +1,434 @@
+From 77d7427bed21c92d1c10e0cc9beabb5ce9bb6c0b Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.com>
+Date: Thu, 9 Apr 2020 12:46:13 +0100
+Subject: [PATCH] dt: Implement an I2C pinctrl mux for BSC0.
+
+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>
+---
+ arch/arm/boot/dts/bcm2708-rpi-b-plus.dts      |  9 ++++---
+ arch/arm/boot/dts/bcm2708-rpi-b.dts           |  9 ++++---
+ arch/arm/boot/dts/bcm2708-rpi-cm.dts          |  9 ++++---
+ arch/arm/boot/dts/bcm2708-rpi-zero-w.dts      |  9 ++++---
+ arch/arm/boot/dts/bcm2708-rpi-zero.dts        |  9 ++++---
+ arch/arm/boot/dts/bcm2709-rpi-2-b.dts         |  9 ++++---
+ arch/arm/boot/dts/bcm270x-rpi.dtsi            |  7 ++---
+ arch/arm/boot/dts/bcm2710-rpi-2-b.dts         |  9 ++++---
+ arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts    |  9 ++++---
+ arch/arm/boot/dts/bcm2710-rpi-3-b.dts         |  9 ++++---
+ arch/arm/boot/dts/bcm2710-rpi-cm3.dts         | 10 ++++---
+ arch/arm/boot/dts/bcm2711-rpi-4-b.dts         |  5 ++--
+ arch/arm/boot/dts/bcm2711.dtsi                |  2 +-
+ .../boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi    |  4 +++
+ .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi    |  4 +++
+ arch/arm/boot/dts/bcm283x.dtsi                | 26 ++++++++++++++++++-
+ 16 files changed, 100 insertions(+), 39 deletions(-)
+ create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
+ create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
+
+--- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
++++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
+@@ -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";
+@@ -68,12 +69,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
++++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
+@@ -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";
+@@ -68,12 +69,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
++++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
+@@ -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";
+@@ -67,12 +68,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
++++ b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
+@@ -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";
+@@ -116,12 +117,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2708-rpi-zero.dts
++++ b/arch/arm/boot/dts/bcm2708-rpi-zero.dts
+@@ -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";
+@@ -71,12 +72,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
++++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
+@@ -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";
+@@ -68,12 +69,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm270x-rpi.dtsi
++++ b/arch/arm/boot/dts/bcm270x-rpi.dtsi
+@@ -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";
+@@ -105,7 +106,7 @@
+       status = "disabled";
+ };
+-&i2c0 {
++&i2c0if {
+       status = "disabled";
+ };
+--- a/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
++++ b/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
+@@ -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";
+@@ -68,12 +69,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
++++ b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
+@@ -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";
+@@ -126,12 +127,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
++++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
+@@ -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";
+@@ -137,12 +138,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
++++ b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
+@@ -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";
+@@ -88,12 +88,14 @@
+       };
+ };
+-&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>;
+--- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
++++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
+@@ -192,6 +192,7 @@
+ #include "bcm2711-rpi.dtsi"
+ #include "bcm283x-rpi-csi1-2lane.dtsi"
++#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
+ /delete-node/ &emmc2;
+@@ -421,9 +422,7 @@
+       };
+ };
+-&i2c0 {
+-      pinctrl-names = "default";
+-      pinctrl-0 = <&i2c0_pins>;
++&i2c0if {
+       clock-frequency = <100000>;
+ };
+--- a/arch/arm/boot/dts/bcm2711.dtsi
++++ b/arch/arm/boot/dts/bcm2711.dtsi
+@@ -986,7 +986,7 @@
+       alloc-ranges = <0x0 0x00000000 0x40000000>;
+ };
+-&i2c0 {
++&i2c0if {
+       compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+       interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ };
+--- /dev/null
++++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
+@@ -0,0 +1,4 @@
++&i2c0mux {
++      pinctrl-0 = <&i2c0_gpio0>;
++      pinctrl-1 = <&i2c0_gpio28>;
++};
+--- /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>;
++};
+--- a/arch/arm/boot/dts/bcm283x.dtsi
++++ b/arch/arm/boot/dts/bcm283x.dtsi
+@@ -340,7 +340,7 @@
+                       status = "disabled";
+               };
+-              i2c0: i2c@7e205000 {
++              i2c0if: i2c@7e205000 {
+                       compatible = "brcm,bcm2835-i2c";
+                       reg = <0x7e205000 0x200>;
+                       interrupts = <2 21>;
+@@ -350,6 +350,30 @@
+                       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>;