From ccb667c35ffdea7a2bc1304750e6b22368cd55f7 Mon Sep 17 00:00:00 2001 From: Jan-Simon Möller Date: Tue, 4 Jun 2019 19:25:25 +0200 Subject: Fix rpi touchscreen support on master MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We seem to miss a few bits that changed between kernel 4.9 and kernel 4.14 regarding the 7'' touchscreen. One addition is the rpi-backlight.dtbo which we also need to use in our create-combined-dtb recipe for CI use. We also seem to require https://github.com/raspberrypi/linux/pull/2693#issue-217750943 . Thanks to Scott Murray for the help digging through this. v2 and v3: add devicetree changes v4 and v5: fix name of dtbo v6: move append to machine include - we need it as a global var v7: add to config.txt for sdcard boot case Bug-AGL: SPEC-2465 Change-Id: I2bb3cd974b74a790292e1f36ffdca034928e0bca Signed-off-by: Jan-Simon Möller --- ...ree-support-for-RaspberryPi-7-panel-over-.patch | 351 +++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/dsi/0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch (limited to 'meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/dsi/0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch') diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/dsi/0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/dsi/0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch new file mode 100644 index 000000000..fce687290 --- /dev/null +++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/dsi/0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch @@ -0,0 +1,351 @@ +From 380fd9f0da44ed62dff59a7c7e06f1190b58aa64 Mon Sep 17 00:00:00 2001 +From: Kevin Quigley +Date: Mon, 24 Sep 2018 12:22:31 +0000 +Subject: [PATCH 1/4] Add devicetree support for RaspberryPi 7" panel over DSI + I2C + +--- + arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 5 +++ + arch/arm/boot/dts/bcm2708-rpi-b.dts | 6 +++ + arch/arm/boot/dts/bcm2708-rpi.dtsi | 21 ++++++++++ + arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 5 +++ + arch/arm/boot/dts/bcm270x.dtsi | 39 +++++++++++++++++ + arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 6 +++ + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 5 +++ + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 5 +++ + arch/arm/boot/dts/bcm2835-rpi-b.dts | 5 +++ + arch/arm/boot/dts/bcm2835-rpi.dtsi | 2 + + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 5 +++ + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 5 +++ + arch/arm/boot/dts/bcm283x.dtsi | 16 ++++++- + arch/arm/boot/dts/overlays/Makefile | 1 + + .../boot/dts/overlays/rpi-7inch-overlay.dts | 42 +++++++++++++++++++ + 15 files changed, 167 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts + +diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts +index ef0beea3a3a3..83b95b9a6ec3 100644 +--- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts +@@ -121,3 +121,8 @@ + pwr_led_trigger = <&pwr_led>,"linux,default-trigger"; + }; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts +index dea70fae90e6..ea5de651d59d 100644 +--- a/arch/arm/boot/dts/bcm2708-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts +@@ -111,3 +111,9 @@ + act_led_trigger = <&act_led>,"linux,default-trigger"; + }; + }; ++ ++ ++&i2c_dsi { ++ gpios = <&gpio 2 0 ++ &gpio 3 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2708-rpi.dtsi b/arch/arm/boot/dts/bcm2708-rpi.dtsi +index b13632932192..2d8421f6681c 100644 +--- a/arch/arm/boot/dts/bcm2708-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2708-rpi.dtsi +@@ -132,6 +132,27 @@ + power-domains = <&power RPI_POWER_DOMAIN_USB>; + }; + ++&v3d { ++ power-domains = <&power RPI_POWER_DOMAIN_V3D>; ++}; ++ ++&vec { ++ power-domains = <&power RPI_POWER_DOMAIN_VEC>; ++ status = "okay"; ++}; ++ ++&dsi0 { ++ power-domains = <&power RPI_POWER_DOMAIN_DSI0>; ++ status = "okay"; ++}; ++ ++&dsi1 { ++ power-domains = <&power RPI_POWER_DOMAIN_DSI1>; ++ status = "okay"; ++}; ++ ++ ++ + &clocks { + firmware = <&firmware>; + }; +diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts +index 34659505055a..c23f79395791 100644 +--- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts +@@ -122,3 +122,8 @@ + pwr_led_trigger = <&pwr_led>,"linux,default-trigger"; + }; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm270x.dtsi b/arch/arm/boot/dts/bcm270x.dtsi +index f086ff0deec5..0b1ef47b18b0 100644 +--- a/arch/arm/boot/dts/bcm270x.dtsi ++++ b/arch/arm/boot/dts/bcm270x.dtsi +@@ -84,6 +84,26 @@ + status = "disabled"; + }; + ++ dsi1: dsi@7e700000 { ++ compatible = "brcm,bcm2835-dsi1"; ++ reg = <0x7e700000 0x8c>; ++ interrupts = <2 12>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ #clock-cells = <1>; ++ ++ clocks = <&clocks BCM2835_PLLD_DSI1>, ++ <&clocks BCM2835_CLOCK_DSI1E>, ++ <&clocks BCM2835_CLOCK_DSI1P>; ++ clock-names = "phy", "escape", "pixel"; ++ ++ clock-output-names = "dsi1_byte", ++ "dsi1_ddr2", ++ "dsi1_ddr"; ++ ++ status = "disabled"; ++ }; ++ + firmwarekms: firmwarekms@7e600000 { + compatible = "raspberrypi,rpi-firmware-kms"; + /* SMI interrupt reg */ +@@ -93,6 +113,21 @@ + status = "disabled"; + }; + ++ i2c_dsi: i2cdsi { ++ /* We have to use i2c-gpio because the ++ * firmware is also polling another device ++ * using the only hardware I2C bus that could ++ * connect to these pins. ++ */ ++ compatible = "i2c-gpio"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++ ++ }; ++ + smi: smi@7e600000 { + compatible = "brcm,bcm2835-smi"; + reg = <0x7e600000 0x100>; +@@ -187,3 +222,7 @@ + &vc4 { + status = "disabled"; + }; ++ ++&dsi1 { ++ power-domains = <&power RPI_POWER_DOMAIN_DSI1>; ++}; +diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts +index 37aed344cbbf..6ec9b28999f3 100644 +--- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts +@@ -190,3 +190,9 @@ + pwr_led_trigger = <&pwr_led>,"linux,default-trigger"; + }; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 44 0 ++ &gpio 45 0>; ++}; ++ +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index a462de2ce37e..346efbd4a95f 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -109,3 +109,8 @@ + pinctrl-0 = <&uart0_gpio14>; + status = "okay"; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index 264c84e94329..8b9ebf3670c2 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -102,3 +102,8 @@ + pinctrl-0 = <&uart0_gpio14>; + status = "okay"; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 2 0 ++ &gpio 3 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts +index 03e3a7a7dc5e..4020e79fc989 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts +@@ -97,3 +97,8 @@ + pinctrl-0 = <&uart0_gpio14>; + status = "okay"; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index 356d4e6a17e5..0599f0a27e5f 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -101,10 +101,12 @@ + + &dsi0 { + power-domains = <&power RPI_POWER_DOMAIN_DSI0>; ++ status = "okay"; + }; + + &dsi1 { + power-domains = <&power RPI_POWER_DOMAIN_DSI1>; ++ status = "okay"; + }; + + &csi0 { +diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +index 59e70f4a19e5..6c4c9c8d8ed0 100644 +--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +@@ -47,3 +47,8 @@ + pinctrl-0 = <&uart0_gpio14>; + status = "okay"; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +index 8703d006a206..c99f70cefa61 100644 +--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -56,3 +56,8 @@ + status = "okay"; + bus-width = <4>; + }; ++ ++&i2c_dsi { ++ gpios = <&gpio 44 0 ++ &gpio 45 0>; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index 22eca6fad427..3ee99963f827 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -551,7 +551,6 @@ + clock-output-names = "dsi1_byte", + "dsi1_ddr2", + "dsi1_ddr"; +- + status = "disabled"; + }; + +@@ -652,6 +651,21 @@ + vc4: gpu { + compatible = "brcm,bcm2835-vc4"; + }; ++ ++ i2c_dsi: i2cdsi { ++ /* We have to use i2c-gpio because the ++ * firmware is also polling another device ++ * using the only hardware I2C bus that could ++ * connect to these pins. ++ */ ++ compatible = "i2c-gpio"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ gpios = <&gpio 28 0 ++ &gpio 29 0>; ++ ++ }; + }; + + clocks { +diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile +index e0bdd84d21c5..f983d0180b8b 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -110,6 +110,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ + rpi-cirrus-wm5102.dtbo \ + rpi-dac.dtbo \ + rpi-display.dtbo \ ++ rpi-7inch.dtbo \ + rpi-ft5406.dtbo \ + rpi-poe.dtbo \ + rpi-proto.dtbo \ +diff --git a/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts b/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts +new file mode 100644 +index 000000000000..3bb882d79086 +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts +@@ -0,0 +1,42 @@ ++/* ++ * Device Tree overlay for RaspberryPi 7" Touchscreen panel ++ * ++ */ ++ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709"; ++ ++ fragment@1 { ++ target = <&dsi1>; ++ __overlay__ { ++ #address-cells = <1>; size-cells = <0>; ++ status = "okay"; ++ port { ++ dsi_out_port: endpoint { ++ remote-endpoint = <&panel_dsi_port>; ++ }; ++ }; ++ }; ++ }; ++ ++ fragment@2 { ++ target = <&i2c_dsi>; ++ __overlay__ { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ lcd@45 { ++ compatible = "raspberrypi,7inch-touchscreen-panel"; ++ reg = <0x45>; ++ port { ++ panel_dsi_port: endpoint { ++ remote-endpoint = <&dsi_out_port>; ++ }; ++ }; ++ }; ++ }; ++ }; ++}; +-- +2.21.0 + -- cgit 1.2.3-korg