From 9f10313800d9ed2d8397288b6aa80661691e3c12 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 9 Apr 2020 12:43:22 +0100 Subject: [PATCH 1/5] defconfig: Enable I2C_MUX_PINCTRL in all Pi configs To be used to switch between the camera/display pins, and the HAT pins for i2c-0. (arm64/bcmrpi3_defconfig was missing all the I2C mux support, so enable it all) Signed-off-by: Dave Stevenson --- arch/arm/configs/bcm2709_defconfig | 1 + arch/arm/configs/bcm2711_defconfig | 1 + arch/arm/configs/bcmrpi_defconfig | 1 + arch/arm64/configs/bcm2711_defconfig | 1 + arch/arm64/configs/bcmrpi3_defconfig | 4 ++++ 5 files changed, 8 insertions(+) diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig index e5168c0359b237..35ee59842466cc 100644 --- a/arch/arm/configs/bcm2709_defconfig +++ b/arch/arm/configs/bcm2709_defconfig @@ -655,6 +655,7 @@ CONFIG_I2C_CHARDEV=m CONFIG_I2C_MUX=m CONFIG_I2C_MUX_GPMUX=m CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_BCM2708=m CONFIG_I2C_BCM2835=m CONFIG_I2C_GPIO=m diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig index 19a8ec28f8a450..27b906723ba66e 100644 --- a/arch/arm/configs/bcm2711_defconfig +++ b/arch/arm/configs/bcm2711_defconfig @@ -628,6 +628,7 @@ CONFIG_I2C_CHARDEV=m CONFIG_I2C_MUX=m CONFIG_I2C_MUX_GPMUX=m CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_BCM2708=m CONFIG_I2C_BCM2835=m CONFIG_I2C_GPIO=m diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig index 543948a9499d71..892840ab9370e5 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -648,6 +648,7 @@ CONFIG_I2C_CHARDEV=m CONFIG_I2C_MUX=m CONFIG_I2C_MUX_GPMUX=m CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_BCM2708=m CONFIG_I2C_BCM2835=m CONFIG_I2C_GPIO=m diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig index 14398af7f55893..1389bdc5880848 100644 --- a/arch/arm64/configs/bcm2711_defconfig +++ b/arch/arm64/configs/bcm2711_defconfig @@ -662,6 +662,7 @@ CONFIG_I2C_CHARDEV=m CONFIG_I2C_MUX=m CONFIG_I2C_MUX_GPMUX=m CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_BCM2708=m CONFIG_I2C_BCM2835=m CONFIG_I2C_GPIO=m diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig index 34aa78d5d814d7..3a39acd6d0abe0 100644 --- a/arch/arm64/configs/bcmrpi3_defconfig +++ b/arch/arm64/configs/bcmrpi3_defconfig @@ -592,6 +592,10 @@ CONFIG_TCG_TPM=m CONFIG_TCG_TIS_SPI=m CONFIG_I2C=y CONFIG_I2C_CHARDEV=m +CONFIG_I2C_MUX=m +CONFIG_I2C_MUX_GPMUX=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_BCM2708=m CONFIG_I2C_BCM2835=m CONFIG_I2C_GPIO=m From eb7fd8300bb127eb313fdecb349564b97f93ecb9 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 9 Apr 2020 12:46:13 +0100 Subject: [PATCH 2/5] 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 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts index b800699a03fbd6..0e137d85897b63 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts index ef47775692ceaf..47c093364683b1 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2708-rpi-cm.dts b/arch/arm/boot/dts/bcm2708-rpi-cm.dts index 64809aee5c0ca7..5dcdf8888ec127 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts index 92f780a3e55779..af883bf02ec5ad 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2708-rpi-zero.dts b/arch/arm/boot/dts/bcm2708-rpi-zero.dts index 2909ddeafc8336..0e61e8269efc8f 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts index 4d2262f8d376b2..77678a3d7ef915 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm270x-rpi.dtsi b/arch/arm/boot/dts/bcm270x-rpi.dtsi index be11a443627992..2af64cd43729b1 100644 --- 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"; }; diff --git a/arch/arm/boot/dts/bcm2710-rpi-2-b.dts b/arch/arm/boot/dts/bcm2710-rpi-2-b.dts index 65a6f4d06866fa..dd7e1897ea4564 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts index 0c36c64aaeeff2..f4973868818704 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts index 261827cdb957ca..112eb73f2cc1f2 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts index addebe448e32c8..88f7fe53b97f25 100644 --- 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>; diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts index b3a00baba96288..7467817bfe7d1d 100644 --- 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>; }; diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi index 72cbd23c9796de..b34a65ff63163e 100644 --- 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 = ; }; 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 index 00000000000000..38f0074bce3ff9 --- /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>; +}; 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 index 00000000000000..119946d878dbf2 --- /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>; +}; diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi index 6128baed83c244..7e95601376d00c 100644 --- 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>; From 2c294f96027bbdec7ff797baaf41cba2343c738f Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 9 Apr 2020 15:04:14 +0100 Subject: [PATCH 3/5] dtoverlays: Update CSI overlays to use i2c_csi_dsi Update all overlays that were using i2c_vc for talking to CSI source devices to use the new i2c_csi_dsi node via i2c_mux_pinctrl. Remove the pins overrides as well. Signed-off-by: Dave Stevenson --- arch/arm/boot/dts/overlays/README | 42 ++++--------------- .../boot/dts/overlays/adv7282m-overlay.dts | 29 +++---------- arch/arm/boot/dts/overlays/imx219-overlay.dts | 41 +++++------------- .../arm/boot/dts/overlays/irs1125-overlay.dts | 33 ++++----------- arch/arm/boot/dts/overlays/ov5647-overlay.dts | 33 ++++----------- .../boot/dts/overlays/tc358743-overlay.dts | 32 ++++---------- 6 files changed, 47 insertions(+), 163 deletions(-) diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 1df13b1fbc513c..eaf26f19392e57 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -331,22 +331,14 @@ Info: Analog Devices ADV7282M analogue video to CSI2 bridge. Uses Unicam1, which is the standard camera connector on most Pi variants. Load: dtoverlay=adv7282m,= -Params: i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. - addr Overrides the I2C address (default 0x21) +Params: addr Overrides the I2C address (default 0x21) Name: adv728x-m Info: Analog Devices ADV728[0|1|2]-M analogue video to CSI2 bridges. This is a wrapper for adv7282m, and defaults to ADV7282M. Load: dtoverlay=adv728x-m,= -Params: i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. - addr Overrides the I2C address (default 0x21) +Params: addr Overrides the I2C address (default 0x21) adv7280m Select ADV7280-M. adv7281m Select ADV7281-M. adv7281ma Select ADV7281-MA. @@ -1384,12 +1376,8 @@ Name: imx219 Info: Sony IMX219 camera module. Uses Unicam 1, which is the standard camera connector on most Pi variants. -Load: dtoverlay=imx219,= -Params: i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. +Load: dtoverlay=imx219 +Params: Name: iqaudio-codec @@ -1453,12 +1441,8 @@ Name: irs1125 Info: Infineon irs1125 TOF camera module. Uses Unicam 1, which is the standard camera connector on most Pi variants. -Load: dtoverlay=irs1125,= -Params: i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. +Load: dtoverlay=irs1125 +Params: Name: jedec-spi-nor @@ -1743,12 +1727,8 @@ Name: ov5647 Info: Omnivision OV5647 camera module. Uses Unicam 1, which is the standard camera connector on most Pi variants. -Load: dtoverlay=ov5647,= -Params: i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. +Load: dtoverlay=ov5647 +Params: Name: papirus @@ -2555,12 +2535,6 @@ Params: 4lane Use 4 lanes (only applicable to Compute Modules (574Mbit/s) and 486000000 (972Mbit/s - default) are supported by the driver. - i2c_pins_0_1 Use pins 0&1 for the I2C instead of 44&45. - Useful on Compute Modules. - - i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45. - This is required for Pi B+, 2, 0, and 0W. - Name: tc358743-audio Info: Used in combination with the tc358743-fast overlay to route the audio diff --git a/arch/arm/boot/dts/overlays/adv7282m-overlay.dts b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts index 197c8f41a26587..238acd2bee723a 100644 --- a/arch/arm/boot/dts/overlays/adv7282m-overlay.dts +++ b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts @@ -7,7 +7,7 @@ compatible = "brcm,bcm2835"; fragment@0 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { #address-cells = <1>; #size-cells = <0>; @@ -45,37 +45,20 @@ }; }; fragment@2 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <28 29>; - brcm,function = <4>; /* alt0 */ - }; - - }; - fragment@3 { - target = <&i2c0_pins>; + target = <&i2c0if>; __overlay__ { - brcm,pins = <44 45>; - brcm,function = <5>; /* alt1 */ - }; - }; - fragment@4 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <0 1>; - brcm,function = <4>; /* alt0 */ + status = "okay"; }; }; - fragment@5 { - target = <&i2c_vc>; + + fragment@3 { + target = <&i2c0mux>; __overlay__ { status = "okay"; }; }; __overrides__ { - i2c_pins_0_1 = <0>,"-2-3+4"; - i2c_pins_28_29 = <0>,"+2-3-4"; addr = <&adv728x>,"reg:0"; }; }; diff --git a/arch/arm/boot/dts/overlays/imx219-overlay.dts b/arch/arm/boot/dts/overlays/imx219-overlay.dts index b9e3d9e5730d40..5fd39060ee87c6 100644 --- a/arch/arm/boot/dts/overlays/imx219-overlay.dts +++ b/arch/arm/boot/dts/overlays/imx219-overlay.dts @@ -9,7 +9,7 @@ compatible = "brcm,bcm2835"; fragment@0 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { #address-cells = <1>; #size-cells = <0>; @@ -61,34 +61,13 @@ }; fragment@2 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <28 29>; - brcm,function = <4>; /* alt0 */ - }; - }; - fragment@3 { - target = <&i2c0_pins>; - __overlay__ { - brcm,pins = <44 45>; - brcm,function = <5>; /* alt1 */ - }; - }; - fragment@4 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <0 1>; - brcm,function = <4>; /* alt0 */ - }; - }; - fragment@5 { - target = <&i2c_vc>; + target = <&i2c0if>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@3 { target-path="/"; __overlay__ { imx219_vana: fixedregulator@0 { @@ -114,16 +93,18 @@ }; }; - fragment@7 { + fragment@4 { + target = <&i2c0mux>; + __overlay__ { + status = "okay"; + }; + }; + + fragment@5 { target-path="/__overrides__"; __overlay__ { cam0-pwdn-ctrl = <&imx219_vana>,"gpio:0"; cam0-pwdn = <&imx219_vana>,"gpio:4"; }; }; - - __overrides__ { - i2c_pins_0_1 = <0>,"-2-3+4"; - i2c_pins_28_29 = <0>,"+2-3-4"; - }; }; diff --git a/arch/arm/boot/dts/overlays/irs1125-overlay.dts b/arch/arm/boot/dts/overlays/irs1125-overlay.dts index b9006715a5397a..3fc7a9e23019ad 100644 --- a/arch/arm/boot/dts/overlays/irs1125-overlay.dts +++ b/arch/arm/boot/dts/overlays/irs1125-overlay.dts @@ -7,7 +7,7 @@ compatible = "brcm,bcm2835"; fragment@0 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { #address-cells = <1>; #size-cells = <0>; @@ -55,43 +55,24 @@ }; fragment@2 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <28 29>; - brcm,function = <4>; /* alt0 */ - }; - }; - fragment@3 { - target = <&i2c0_pins>; + target = <&i2c0if>; __overlay__ { - brcm,pins = <44 45>; - brcm,function = <5>; /* alt1 */ - }; - }; - fragment@4 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <0 1>; - brcm,function = <4>; /* alt0 */ + status = "okay"; }; }; - fragment@5 { - target = <&i2c_vc>; + + fragment@3 { + target = <&i2c0mux>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@4 { target-path="/__overrides__"; __overlay__ { cam0-pwdn-ctrl = <&irs1125>,"pwdn-gpios:0"; cam0-pwdn = <&irs1125>,"pwdn-gpios:4"; }; }; - - __overrides__ { - i2c_pins_0_1 = <0>,"-2-3+4"; - i2c_pins_28_29 = <0>,"+2-3-4"; - }; }; diff --git a/arch/arm/boot/dts/overlays/ov5647-overlay.dts b/arch/arm/boot/dts/overlays/ov5647-overlay.dts index 5266d4b8758d39..34aa9f38617828 100644 --- a/arch/arm/boot/dts/overlays/ov5647-overlay.dts +++ b/arch/arm/boot/dts/overlays/ov5647-overlay.dts @@ -7,7 +7,7 @@ compatible = "brcm,bcm2835"; fragment@0 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { #address-cells = <1>; #size-cells = <0>; @@ -55,34 +55,20 @@ }; fragment@2 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <28 29>; - brcm,function = <4>; /* alt0 */ - }; - }; - fragment@3 { - target = <&i2c0_pins>; + target = <&i2c0if>; __overlay__ { - brcm,pins = <44 45>; - brcm,function = <5>; /* alt1 */ - }; - }; - fragment@4 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <0 1>; - brcm,function = <4>; /* alt0 */ + status = "okay"; }; }; - fragment@5 { - target = <&i2c_vc>; + + fragment@3 { + target = <&i2c0mux>; __overlay__ { status = "okay"; }; }; - fragment@6 { + fragment@4 { target-path="/__overrides__"; __overlay__ { cam0-pwdn-ctrl = <&ov5647>,"pwdn-gpios:0"; @@ -91,9 +77,4 @@ cam0-led = <&ov5647>,"pwdn-gpios:16"; }; }; - - __overrides__ { - i2c_pins_0_1 = <0>,"-2-3+4"; - i2c_pins_28_29 = <0>,"+2-3-4"; - }; }; diff --git a/arch/arm/boot/dts/overlays/tc358743-overlay.dts b/arch/arm/boot/dts/overlays/tc358743-overlay.dts index 2a1a3a80de4937..f8c059827234d7 100644 --- a/arch/arm/boot/dts/overlays/tc358743-overlay.dts +++ b/arch/arm/boot/dts/overlays/tc358743-overlay.dts @@ -7,7 +7,7 @@ compatible = "brcm,bcm2835"; fragment@0 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { #address-cells = <1>; #size-cells = <0>; @@ -54,7 +54,7 @@ }; fragment@2 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __overlay__ { tc358743@0f { port { @@ -67,7 +67,7 @@ }; fragment@3 { - target = <&i2c_vc>; + target = <&i2c_csi_dsi>; __dormant__ { tc358743@0f { port { @@ -80,36 +80,20 @@ }; fragment@4 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <28 29>; - brcm,function = <4>; /* alt0 */ - }; - }; - fragment@5 { - target = <&i2c0_pins>; + target = <&i2c0if>; __overlay__ { - brcm,pins = <44 45>; - brcm,function = <5>; /* alt1 */ - }; - }; - fragment@6 { - target = <&i2c0_pins>; - __dormant__ { - brcm,pins = <0 1>; - brcm,function = <4>; /* alt0 */ + status = "okay"; }; }; - fragment@7 { - target = <&i2c_vc>; + + fragment@5 { + target = <&i2c0mux>; __overlay__ { status = "okay"; }; }; __overrides__ { - i2c_pins_0_1 = <0>,"-4-5+6"; - i2c_pins_28_29 = <0>,"+4-5-6"; 4lane = <0>, "-2+3"; link-frequency = <&tc358743>,"link-frequencies#0"; }; From 39e472b4091f0946828d089cc181f8630c45b0d8 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 9 Apr 2020 17:26:13 +0100 Subject: [PATCH 4/5] dt: Update all mainline bcm283x dt files for i2c0 pinctrl mux BSC0 (aka i2c0) can me muxed via pinctrl to GPIOs 0&1, 28&29, or 44&45. These have different uses based on the platform (40pin header, and CSI/DSI connectors), so add a pinctrl I2C mux between the different options. Signed-off-by: Dave Stevenson --- arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 5 +++++ arch/arm/boot/dts/bcm2835-rpi-a.dts | 7 +++++++ arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 5 +++++ arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 7 +++++++ arch/arm/boot/dts/bcm2835-rpi-b.dts | 7 +++++++ arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts | 5 +++++ arch/arm/boot/dts/bcm2835-rpi-zero-w.dts | 5 +++++ arch/arm/boot/dts/bcm2835-rpi-zero.dts | 5 +++++ arch/arm/boot/dts/bcm2835-rpi.dtsi | 10 +++++++--- arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 5 +++++ arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts | 5 +++++ arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 5 +++++ arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 5 +++++ arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts | 5 +++++ 14 files changed, 78 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts index 6c8ce39833bf68..e82e75ec342a32 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts @@ -126,3 +126,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 28&29 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts index 17fdd48346ffbb..d400f88127db0a 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-a.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts @@ -121,3 +121,10 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header. + * To avoid having to remap everything, map both ports to gpios 0&1 + */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio0>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts index b0355c229cdc21..57ab4d44349395 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts @@ -128,3 +128,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 28&29 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts index 33b3b5c0252190..cb08d5ac0412c0 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts @@ -121,3 +121,10 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header. + * To avoid having to remap everything, map both ports to gpios 0&1 + */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio0>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts index 2b69957e0113ee..d5b4d9d204248e 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-b.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts @@ -116,3 +116,10 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* camera/display connector use BSC1 on GPIOS 2&3. + * To avoid having to remap everything, map both ports to gpios 0&1 + */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio0>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts b/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts index a75c882e65751f..95564c93a64526 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts @@ -95,3 +95,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* WHAT TO DO HERE? */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts index 4c3f606e5b8d8e..fd70987486947b 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts @@ -149,3 +149,8 @@ pinctrl-0 = <&uart1_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 28&29 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts index 6dd93c6f496665..cad16a2df24552 100644 --- a/arch/arm/boot/dts/bcm2835-rpi-zero.dts +++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts @@ -117,3 +117,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 28&29 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi index fd2c766e0f7108..c011b7914688b9 100644 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi @@ -46,13 +46,17 @@ }; }; -&i2c0 { - pinctrl-names = "default"; - pinctrl-0 = <&i2c0_gpio0>; +&i2c0if { status = "okay"; clock-frequency = <100000>; }; +&i2c0mux { + pinctrl-0 = <&i2c0_gpio0>; + /* pinctrl-1 varies based on platform */ + status = "okay"; +}; + &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_gpio2>; diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts index 0455a680394a22..f62eff03dae100 100644 --- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts @@ -128,3 +128,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 28&29 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts index 66ab35eccba7bb..66ba24e9ff3754 100644 --- a/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts +++ b/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts @@ -176,3 +176,8 @@ pinctrl-0 = <&uart1_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 44&45 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio44>; +}; diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts index 74ed6d04780703..63f4592ba7dd6a 100644 --- a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts @@ -179,3 +179,8 @@ pinctrl-0 = <&uart1_gpio14>; status = "okay"; }; + +/* i2c on camera/display connector is gpio 44&45 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio44>; +}; diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts index 054ecaa355c9ab..5474f8ab894fae 100644 --- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts @@ -174,3 +174,8 @@ status = "okay"; bus-width = <4>; }; + +/* i2c on camera/display connector is gpio 44&45 */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio44>; +}; diff --git a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts index 588d9411ceb61a..dde209ade51b9c 100644 --- a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts +++ b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts @@ -94,3 +94,8 @@ pinctrl-0 = <&uart0_gpio14>; status = "okay"; }; + +/* WHAT TO DO HERE? */ +&i2c0mux { + pinctrl-1 = <&i2c0_gpio28>; +}; From c5ecb350bd6a900d1db366c4775972bd7c15bbce Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 21 Apr 2020 17:34:27 +0100 Subject: [PATCH 5/5] ARM: dts: Create bcm2708-rpi-b-rev1.dts The first revision of the Pi Model B used I2C0 to address the camera and I2C0 was available for user applications on the 26-pin header. The second revision switched the roles, kept I2C0 on the 26-pin header and added I2C1 on a new 8-way header (P5). Up to now, downstream DTS has used a single file for both revisions of the board, with a small amount of patching from the firmware. With the introduction of an I2C mux to share I2C0 between the camera/display connectors and the IDC headers, the difference between the two versions becomes too great to comfortably manage with tweaking, hence this split. Upstream DTS files already have bcm2835-rpi-b.dts and bcm2835-rpi-b-rev2.dts, but for backwards compatibility the new file is being added as bcm2708-rpi-b-rev1.dts, rather than renaming the old shared version to bcm2708-rpi-b-rev2.dts. Signed-off-by: Phil Elwell --- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts | 127 +++++++++++++++++++++++ arch/arm/boot/dts/bcm270x-rpi.dtsi | 4 + 3 files changed, 132 insertions(+) create mode 100644 arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 54f3c1d1e9f586..990457a51843b4 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -2,6 +2,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2708-rpi-b.dtb \ + bcm2708-rpi-b-rev1.dtb \ bcm2708-rpi-b-plus.dtb \ bcm2708-rpi-cm.dtb \ bcm2708-rpi-zero.dtb \ diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts b/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts new file mode 100644 index 00000000000000..7b554b465b277e --- /dev/null +++ b/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts @@ -0,0 +1,127 @@ +/dts-v1/; + +#include "bcm2708.dtsi" +#include "bcm2708-rpi.dtsi" +#include "bcm283x-rpi-smsc9512.dtsi" +#include "bcm283x-rpi-csi1-2lane.dtsi" + +/ { + compatible = "raspberrypi,model-b", "brcm,bcm2835"; + model = "Raspberry Pi Model B"; +}; + +&gpio { + spi0_pins: spi0_pins { + brcm,pins = <9 10 11>; + brcm,function = <4>; /* alt0 */ + }; + + spi0_cs_pins: spi0_cs_pins { + brcm,pins = <8 7>; + brcm,function = <1>; /* output */ + }; + + i2c0_pins: i2c0 { + brcm,pins = <0 1>; + brcm,function = <4>; + }; + + i2c1_pins: i2c1 { + brcm,pins = <2 3>; + brcm,function = <4>; + }; + + i2s_pins: i2s { + brcm,pins = <28 29 30 31>; + brcm,function = <6>; /* alt2 */ + }; + + audio_pins: audio_pins { + brcm,pins = <40 45>; + brcm,function = <4>; + }; +}; + +&uart0 { + status = "okay"; +}; + +&spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&spi0_pins &spi0_cs_pins>; + cs-gpios = <&gpio 8 1>, <&gpio 7 1>; + + spidev0: spidev@0{ + compatible = "spidev"; + reg = <0>; /* CE0 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; + + spidev1: spidev@1{ + compatible = "spidev"; + reg = <1>; /* CE1 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; +}; + +/delete-node/ &i2c0mux; + +i2c0: &i2c0if { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins>; + clock-frequency = <100000>; +}; + +i2c_csi_dsi: &i2c1 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins>; + clock-frequency = <100000>; +}; + +/ { + aliases { + i2c0 = &i2c0; + }; + + __overrides__ { + i2c0 = <&i2c0>, "status"; + }; +}; + +&i2c2 { + clock-frequency = <100000>; +}; + +&i2s { + pinctrl-names = "default"; + pinctrl-0 = <&i2s_pins>; +}; + +&leds { + act_led: act { + label = "led0"; + linux,default-trigger = "mmc0"; + gpios = <&gpio 16 1>; + }; +}; + +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; +}; + +&audio { + pinctrl-names = "default"; + pinctrl-0 = <&audio_pins>; +}; + +/ { + __overrides__ { + act_led_gpio = <&act_led>,"gpios:4"; + act_led_activelow = <&act_led>,"gpios:8"; + act_led_trigger = <&act_led>,"linux,default-trigger"; + }; +}; diff --git a/arch/arm/boot/dts/bcm270x-rpi.dtsi b/arch/arm/boot/dts/bcm270x-rpi.dtsi index 2af64cd43729b1..e3d90b4262f1fb 100644 --- a/arch/arm/boot/dts/bcm270x-rpi.dtsi +++ b/arch/arm/boot/dts/bcm270x-rpi.dtsi @@ -110,6 +110,10 @@ status = "disabled"; }; +&i2c0mux { + status = "disabled"; +}; + &i2c1 { status = "disabled"; };