| 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 |
| @@ -341,7 +341,7 @@ |
| status = "disabled"; |
| }; |
| |
| - i2c0: i2c@7e205000 { |
| + i2c0if: i2c@7e205000 { |
| compatible = "brcm,bcm2835-i2c"; |
| reg = <0x7e205000 0x200>; |
| interrupts = <2 21>; |
| @@ -351,6 +351,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>; |