Add a device tree overlay to support the official Raspberrypi 7" touchscreen for
the bcm2711 devices.
The panel is connected on the DSI 1 port and uses the simple-panel
driver.
The device tree also makes sure to activate the pixelvalve[0-4] CRTC modules
Signed-off-by: Detlev Casanova <[email protected]>
---
arch/arm/boot/dts/Makefile | 4 +
arch/arm/boot/dts/overlays/Makefile | 3 +
.../dts/overlays/bcm2711-rpi-7-inches-ts.dts | 125 ++++++++++++++++++
arch/arm64/boot/dts/broadcom/Makefile | 4 +
.../arm64/boot/dts/broadcom/overlays/Makefile | 3 +
.../overlays/bcm2711-rpi-7-inches-ts.dts | 2 +
6 files changed, 141 insertions(+)
create mode 100644 arch/arm/boot/dts/overlays/Makefile
create mode 100644 arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
create mode 100644 arch/arm64/boot/dts/broadcom/overlays/Makefile
create mode 100644 arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 235ad559acb2..eb0b0b121947 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -1549,3 +1549,7 @@ dtb-$(CONFIG_ARCH_ASPEED) += \
aspeed-bmc-vegman-n110.dtb \
aspeed-bmc-vegman-rx20.dtb \
aspeed-bmc-vegman-sx20.dtb
+
+ifeq ($(CONFIG_OF_OVERLAY),y)
+subdir-y += overlays
+endif
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
new file mode 100644
index 000000000000..c90883dfaf91
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-7-inches-ts.dtbo
diff --git a/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts b/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
new file mode 100644
index 000000000000..de98a6c1079a
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
@@ -0,0 +1,125 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+/plugin/;
+
+&{/} {
+ #address-cells = <2>;
+ #size-cells = <1>;
+
+ panel_disp1: panel@0 {
+ reg = <0 0 0>;
+ compatible = "raspberrypi,7inch-dsi", "simple-panel";
+ backlight = <®_display>;
+ power-supply = <®_display>;
+ status = "okay";
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&bridge_out>;
+ };
+ };
+ };
+
+ reg_bridge: regulator@0 {
+ reg = <0 0 0>;
+ compatible = "regulator-fixed";
+ regulator-name = "bridge_reg";
+ gpio = <®_display 0 0>;
+ vin-supply = <®_display>;
+ enable-active-high;
+ status = "okay";
+ };
+};
+
+&i2c_csi_dsi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ft5406: touchscreen@38 {
+ compatible = "edt,edt-ft5506";
+ reg = <0x38>;
+ status = "okay";
+
+ vcc-supply = <®_display>;
+ reset-gpio = <®_display 1 1>;
+
+ touchscreen-size-x = < 800 >;
+ touchscreen-size-y = < 480 >;
+
+ touchscreen-inverted-x;
+ touchscreen-inverted-y;
+ };
+
+ reg_display: regulator@45 {
+ compatible = "raspberrypi,7inch-touchscreen-panel-regulator";
+ reg = <0x45>;
+ status = "okay";
+
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+
+};
+
+&dsi1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "okay";
+
+ port {
+ dsi_out: endpoint {
+ remote-endpoint = <&bridge_in>;
+ };
+ };
+
+ bridge@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ reg = <0>;
+ compatible = "toshiba,tc358762";
+
+ vddc-supply = <®_bridge>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ bridge_in: endpoint {
+ remote-endpoint = <&dsi_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ bridge_out: endpoint {
+ remote-endpoint = <&panel_in>;
+ };
+ };
+ };
+ };
+};
+
+&pixelvalve0 {
+ status = "okay";
+};
+
+&pixelvalve1 {
+ status = "okay";
+};
+
+&pixelvalve2 {
+ status = "okay";
+};
+
+&pixelvalve3 {
+ status = "okay";
+};
+
+&pixelvalve4 {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile
index c6882032a428..a6c43c5b053a 100644
--- a/arch/arm64/boot/dts/broadcom/Makefile
+++ b/arch/arm64/boot/dts/broadcom/Makefile
@@ -7,6 +7,10 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \
bcm2837-rpi-3-b-plus.dtb \
bcm2837-rpi-cm3-io3.dtb
+ifeq ($(CONFIG_OF_OVERLAY),y)
+subdir-y += overlays
+endif
+
subdir-y += bcm4908
subdir-y += northstar2
subdir-y += stingray
diff --git a/arch/arm64/boot/dts/broadcom/overlays/Makefile b/arch/arm64/boot/dts/broadcom/overlays/Makefile
new file mode 100644
index 000000000000..c90883dfaf91
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/overlays/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-7-inches-ts.dtbo
diff --git a/arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts b/arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts
new file mode 100644
index 000000000000..7d532b090305
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "arm/overlays/bcm2711-rpi-7-inches-ts.dts"
--
2.36.0
On Wed, Apr 27, 2022 at 02:52:43PM -0400, Detlev Casanova wrote:
> Add a device tree overlay to support the official Raspberrypi 7" touchscreen for
> the bcm2711 devices.
>
> The panel is connected on the DSI 1 port and uses the simple-panel
> driver.
>
> The device tree also makes sure to activate the pixelvalve[0-4] CRTC modules
>
> Signed-off-by: Detlev Casanova <[email protected]>
> ---
> arch/arm/boot/dts/Makefile | 4 +
> arch/arm/boot/dts/overlays/Makefile | 3 +
> .../dts/overlays/bcm2711-rpi-7-inches-ts.dts | 125 ++++++++++++++++++
.dtso is preferred. I think... It was discussed, but I never got an
updated patch to switch.
> arch/arm64/boot/dts/broadcom/Makefile | 4 +
> .../arm64/boot/dts/broadcom/overlays/Makefile | 3 +
> .../overlays/bcm2711-rpi-7-inches-ts.dts | 2 +
> 6 files changed, 141 insertions(+)
> create mode 100644 arch/arm/boot/dts/overlays/Makefile
> create mode 100644 arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
A global (to arm) 'overlays' directory will create the same mess that we
have in arch/arm/boot/dts/. IMO, first you should move all the Broadcom
dts files to a 'broadcom' subdirectory like we have for arm64.
> create mode 100644 arch/arm64/boot/dts/broadcom/overlays/Makefile
> create mode 100644 arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 235ad559acb2..eb0b0b121947 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -1549,3 +1549,7 @@ dtb-$(CONFIG_ARCH_ASPEED) += \
> aspeed-bmc-vegman-n110.dtb \
> aspeed-bmc-vegman-rx20.dtb \
> aspeed-bmc-vegman-sx20.dtb
> +
> +ifeq ($(CONFIG_OF_OVERLAY),y)
> +subdir-y += overlays
I don't think this should depend on the config. If it does, you can do
this in scripts/Makefile.lib by removing .dtbo targets. Or this could
have been just:
subdir-$(CONFIG_OF_OVERLAY) += overlays
But I prefer the former so each platform is not picking their own way.
> +endif
> diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
> new file mode 100644
> index 000000000000..c90883dfaf91
> --- /dev/null
> +++ b/arch/arm/boot/dts/overlays/Makefile
> @@ -0,0 +1,3 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-7-inches-ts.dtbo
The overlays should be applied to the base dtb(s) to ensure they
actually apply and so we can validate them with schema. kbuild supports
this already.
> diff --git a/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
> b/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
> new file mode 100644
> index 000000000000..de98a6c1079a
> --- /dev/null
> +++ b/arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
> @@ -0,0 +1,125 @@
> +// SPDX-License-Identifier: GPL-2.0
No one uses RPi with *BSD? Dual licensing is preferred. Of course, what
this applies to should have similar licensing.
> +
> +/dts-v1/;
> +/plugin/;
> +
> +&{/} {
> + #address-cells = <2>;
> + #size-cells = <1>;
> +
> + panel_disp1: panel@0 {
What is '0' representing?
> + reg = <0 0 0>;
> + compatible = "raspberrypi,7inch-dsi", "simple-panel";
> + backlight = <®_display>;
> + power-supply = <®_display>;
> + status = "okay";
That's the default. Same thing in a few other spots.
> +
> + port {
> + panel_in: endpoint {
> + remote-endpoint = <&bridge_out>;
> + };
> + };
> + };
> +
> + reg_bridge: regulator@0 {
Oops! 2 different things at the same address!
> + reg = <0 0 0>;
'regulator-fixed' doesn't have an address.
> + compatible = "regulator-fixed";
> + regulator-name = "bridge_reg";
> + gpio = <®_display 0 0>;
> + vin-supply = <®_display>;
> + enable-active-high;
> + status = "okay";
> + };
> +};
> +
> +&i2c_csi_dsi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ft5406: touchscreen@38 {
> + compatible = "edt,edt-ft5506";
> + reg = <0x38>;
> + status = "okay";
> +
> + vcc-supply = <®_display>;
> + reset-gpio = <®_display 1 1>;
> +
> + touchscreen-size-x = < 800 >;
> + touchscreen-size-y = < 480 >;
> +
> + touchscreen-inverted-x;
> + touchscreen-inverted-y;
> + };
> +
> + reg_display: regulator@45 {
> + compatible = "raspberrypi,7inch-touchscreen-panel-regulator";
> + reg = <0x45>;
> + status = "okay";
> +
> + gpio-controller;
> + #gpio-cells = <2>;
The regulator is a gpio-controller?
> + };
> +
> +};
> +
> +&dsi1 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + status = "okay";
> +
> + port {
> + dsi_out: endpoint {
> + remote-endpoint = <&bridge_in>;
> + };
> + };
> +
> + bridge@0 {
> + #address-cells = <1>;
> + #size-cells = <0>;
Not valid here. But I shouldn't have to tell you this as the schema
checks will. Please run them. Applied to a base should work for sure. As
just a .dtbo, there's probably some issues, but complete nodes like this
should validate fine.
> +
> + reg = <0>;
> + compatible = "toshiba,tc358762";
> +
> + vddc-supply = <®_bridge>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + bridge_in: endpoint {
> + remote-endpoint = <&dsi_out>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> + bridge_out: endpoint {
> + remote-endpoint = <&panel_in>;
> + };
> + };
> + };
> + };
> +};
> +
> +&pixelvalve0 {
> + status = "okay";
> +};
> +
> +&pixelvalve1 {
> + status = "okay";
> +};
> +
> +&pixelvalve2 {
> + status = "okay";
> +};
> +
> +&pixelvalve3 {
> + status = "okay";
> +};
> +
> +&pixelvalve4 {
> + status = "okay";
> +};
Hi Rob,
On Wed, Apr 27, 2022 at 11:23 PM Rob Herring <[email protected]> wrote:
> On Wed, Apr 27, 2022 at 02:52:43PM -0400, Detlev Casanova wrote:
> > Add a device tree overlay to support the official Raspberrypi 7" touchscreen for
> > the bcm2711 devices.
> >
> > The panel is connected on the DSI 1 port and uses the simple-panel
> > driver.
> >
> > The device tree also makes sure to activate the pixelvalve[0-4] CRTC modules
> >
> > Signed-off-by: Detlev Casanova <[email protected]>
> > ---
> > arch/arm/boot/dts/Makefile | 4 +
> > arch/arm/boot/dts/overlays/Makefile | 3 +
> > .../dts/overlays/bcm2711-rpi-7-inches-ts.dts | 125 ++++++++++++++++++
>
> .dtso is preferred. I think... It was discussed, but I never got an
> updated patch to switch.
Unfortunately that switch indeed hasn't happened yet.
My main gripe with .dts for overlays is that you cannot know whether
it's an overlay or not without reading the file's contents.
Hence tools like make also cannot know, and you need to e.g. list
all files explicitly in a Makefile.
> > arch/arm64/boot/dts/broadcom/Makefile | 4 +
> > .../arm64/boot/dts/broadcom/overlays/Makefile | 3 +
> > .../overlays/bcm2711-rpi-7-inches-ts.dts | 2 +
> > 6 files changed, 141 insertions(+)
> > create mode 100644 arch/arm/boot/dts/overlays/Makefile
> > create mode 100644 arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
>
> A global (to arm) 'overlays' directory will create the same mess that we
> have in arch/arm/boot/dts/. IMO, first you should move all the Broadcom
> dts files to a 'broadcom' subdirectory like we have for arm64.
As I believe this display is not only used with real Raspberry Pi
devices, it makes sense to not have it a broadcom directory.
In fact it may be used on other architectures than arm, too, so I
think we need an arch-agnostic directory for overlays[1]?
This may need remapping of labels. I'm aware the rpi infrastructure has
support for remapping labels when applying overlays during boot, but
AFAIK this is not yet supported by fdtoverlay (or perhaps by a fork?)?
Note that the remapping is also needed if you want to apply two
instances of the same overlay.
> > create mode 100644 arch/arm64/boot/dts/broadcom/overlays/Makefile
> > create mode 100644 arch/arm64/boot/dts/broadcom/overlays/bcm2711-rpi-7-inches-ts.dts
And this one just includes the former, and thus sort-of serves as an
example of my point above ;-)
[1] Note that this does not only apply to overlays: soon we will
have a full SoC peripheral description in r9a07g043.dtsi to
share between RZ/G2UL (arm64) and RZ/Five (riscv)).
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
On Thu, Apr 28, 2022 at 08:44:17AM +0200, Geert Uytterhoeven wrote:
> Hi Rob,
>
> On Wed, Apr 27, 2022 at 11:23 PM Rob Herring <[email protected]> wrote:
> > On Wed, Apr 27, 2022 at 02:52:43PM -0400, Detlev Casanova wrote:
> > > Add a device tree overlay to support the official Raspberrypi 7" touchscreen for
> > > the bcm2711 devices.
> > >
> > > The panel is connected on the DSI 1 port and uses the simple-panel
> > > driver.
> > >
> > > The device tree also makes sure to activate the pixelvalve[0-4] CRTC modules
> > >
> > > Signed-off-by: Detlev Casanova <[email protected]>
> > > ---
> > > arch/arm/boot/dts/Makefile | 4 +
> > > arch/arm/boot/dts/overlays/Makefile | 3 +
> > > .../dts/overlays/bcm2711-rpi-7-inches-ts.dts | 125 ++++++++++++++++++
> >
> > .dtso is preferred. I think... It was discussed, but I never got an
> > updated patch to switch.
>
> Unfortunately that switch indeed hasn't happened yet.
> My main gripe with .dts for overlays is that you cannot know whether
> it's an overlay or not without reading the file's contents.
> Hence tools like make also cannot know, and you need to e.g. list
> all files explicitly in a Makefile.
See my reply in the other thread for that.
> > > arch/arm64/boot/dts/broadcom/Makefile | 4 +
> > > .../arm64/boot/dts/broadcom/overlays/Makefile | 3 +
> > > .../overlays/bcm2711-rpi-7-inches-ts.dts | 2 +
> > > 6 files changed, 141 insertions(+)
> > > create mode 100644 arch/arm/boot/dts/overlays/Makefile
> > > create mode 100644 arch/arm/boot/dts/overlays/bcm2711-rpi-7-inches-ts.dts
> >
> > A global (to arm) 'overlays' directory will create the same mess that we
> > have in arch/arm/boot/dts/. IMO, first you should move all the Broadcom
> > dts files to a 'broadcom' subdirectory like we have for arm64.
>
> As I believe this display is not only used with real Raspberry Pi
> devices, it makes sense to not have it a broadcom directory.
Then at a minimum 'bcm2711' in the name is not appropriate.
I'm doubtful that as-is the overlay would apply to boards outside of
RPi's. For this to work (well), there needs to be a connector node to
translate between connector resources and the base board resources. See
the recent mikrobus thread[2].
> In fact it may be used on other architectures than arm, too, so I
> think we need an arch-agnostic directory for overlays[1]?
Probably so.
Personally, I would prefer no DTs under /arch.
> This may need remapping of labels. I'm aware the rpi infrastructure has
> support for remapping labels when applying overlays during boot, but
> AFAIK this is not yet supported by fdtoverlay (or perhaps by a fork?)?
> Note that the remapping is also needed if you want to apply two
> instances of the same overlay.
First I've heard of label remapping... I have a lot of concerns about
using labels for overlays. For starters, with a flip of a switch (-@),
they all become an ABI when they were not previously. I think at a
minimum, we need an annotation so that a subset can be exported.
Anything that's an ABI, we should be documenting and reviewing.
The requirement for overlays upstream is that they are applied at build
time to a base DT. Otherwise, we can't validate them completely. So if
there's a label remapping dependency on these, sounds like there is some
more work to do. The first being getting agreement that label remapping
is the right approach.
Common label names or some remapping for targets kind of works, but
easily falls apart. For example, GPIO (or any provider with identifier
cells) numbering or SPI CS numbering would be different.
Rob
[2] https://lore.kernel.org/all/YmFo+EntwxIsco%[email protected]/