diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch | 434 |
1 files changed, 434 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch b/target/linux/bcm27xx/patches-5.4/950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch new file mode 100644 index 0000000000..002ad8686e --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch @@ -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>; |