From 77d7427bed21c92d1c10e0cc9beabb5ce9bb6c0b Mon Sep 17 00:00:00 2001 From: Dave Stevenson 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 --- 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 = ; }; --- /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>;