overlays: example overlay for using panel-dsi on RPi
authorTimon Skerutsch <kernel@diodes-delight.com>
Mon, 13 Nov 2023 21:52:35 +0000 (22:52 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:18 +0000 (11:35 +0000)
Analog to the generic panel-dpi overlay to use panel-dsi with dtparam
to not require a panel specific overlay for simple use cases that
do not require setting more niche DSI modes.

Signed-off-by: Timon Skerutsch <kernel@diodes-delight.com>
arch/arm/boot/dts/overlays/Makefile
arch/arm/boot/dts/overlays/README
arch/arm/boot/dts/overlays/vc4-kms-dsi-generic-overlay.dts [new file with mode: 0644]

index faebe83..14ce8e7 100644 (file)
@@ -294,6 +294,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
        vc4-kms-dpi-hyperpixel4sq.dtbo \
        vc4-kms-dpi-panel.dtbo \
        vc4-kms-dsi-7inch.dtbo \
+       vc4-kms-dsi-generic.dtbo \
        vc4-kms-dsi-lt070me05000.dtbo \
        vc4-kms-dsi-lt070me05000-v2.dtbo \
        vc4-kms-dsi-waveshare-panel.dtbo \
index 1b5b936..6cd2b70 100644 (file)
@@ -4789,6 +4789,37 @@ Params: sizex                   Touchscreen size x (default 800)
                                 the default DSI1 and i2c_csi_dsi).
 
 
+Name:   vc4-kms-dsi-generic
+Info:   Enable a generic DSI display under KMS.
+        Default timings are for a 840x480 RGB888 panel.
+        Requires vc4-kms-v3d to be loaded.
+Load:   dtoverlay=vc4-kms-dsi-generic,<param>=<val>
+Params: clock-frequency         Display clock frequency (Hz)
+        hactive                 Horizontal active pixels
+        hfp                     Horizontal front porch
+        hsync                   Horizontal sync pulse width
+        hbp                     Horizontal back porch
+        vactive                 Vertical active lines
+        vfp                     Vertical front porch
+        vsync                   Vertical sync pulse width
+        vbp                     Vertical back porch
+        width-mm                Define the screen width in mm
+        height-mm               Define the screen height in mm
+        rgb565                  Change to RGB565 output
+        rgb666                  Change to RGB666 output
+        rgb666p                 Change to RGB666 output with pixel packing
+        rgb888                  Change to RGB888 output, this is the default
+        one-lane                Use one DSI lane for data transmission
+                                This is the default
+        two-lane                Use two DSI lanes for data transmission
+        three-lane              Use three DSI lanes for data transmission
+                                Only supported on Pi5 and CM
+        four-lane               Use four DSI lanes for data transmission
+                                Only supported on Pi5 and CM
+        dsi0                    Switch DSI port to DSI0
+                                Only supported on Pi5 and CM
+
+
 Name:   vc4-kms-dsi-lt070me05000
 Info:   Enable a JDI LT070ME05000 DSI display on DSI1.
         Note that this is a 4 lane DSI device, so it will only work on a Compute
diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-generic-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-generic-overlay.dts
new file mode 100644 (file)
index 0000000..cf4ca5b
--- /dev/null
@@ -0,0 +1,106 @@
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "brcm,bcm2835";
+
+       dsi_frag: fragment@0 {
+               target = <&dsi1>;
+               __overlay__{
+                       status = "okay";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       port {
+                               dsi_out:endpoint {
+                                       remote-endpoint = <&panel_dsi_port>;
+                               };
+                       };
+                       panel: panel-dsi-generic@0 {
+                               // See panel-dsi.yaml binding
+                               // Using dummy name for panel model
+                               compatible = "Generic,panel-dsi","panel-dsi";
+                               reg = <0>;
+                               power-supply = <0>;
+                               backlight = <0>;
+                               dsi-color-format = "RGB888";
+                               mode = "MODE_VIDEO";
+                               width-mm = <0>;
+                               height-mm = <0>;
+
+                               port {
+                                       panel_dsi_port: endpoint {
+                                               data-lanes = <1>;
+                                               remote-endpoint = <&dsi_out>;
+                                       };
+                               };
+
+                               timing: panel-timing {
+                                       clock-frequency = <30000000>;
+                                       hactive = <840>;
+                                       vactive = <480>;
+                                       hback-porch = <44>;
+                                       hfront-porch = <46>;
+                                       hsync-len = <2>;
+                                       vback-porch = <18>;
+                                       vfront-porch = <16>;
+                                       vsync-len = <2>;
+                               };
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&panel_dsi_port>;
+               __dormant__ {
+                       data-lanes = <1>;
+               };
+       };
+
+       fragment@2 {
+               target = <&panel_dsi_port>;
+               __dormant__ {
+                       data-lanes = <1 2>;
+               };
+       };
+
+       fragment@3 {
+               target = <&panel_dsi_port>;
+               __dormant__ {
+                       data-lanes = <1 2 3>;
+               };
+       };
+
+       fragment@4 {
+               target = <&panel_dsi_port>;
+               __dormant__ {
+                       data-lanes = <1 2 3 4>;
+               };
+       };
+
+       __overrides__ {
+               dsi0 = <&dsi_frag>, "target:0=",<&dsi0>;
+
+               clock-frequency = <&timing>, "clock-frequency:0";
+               hactive = <&timing>, "hactive:0";
+               hfp = <&timing>, "hfront-porch:0";
+               hsync = <&timing>, "hsync-len:0";
+               hbp = <&timing>, "hback-porch:0";
+               vactive = <&timing>, "vactive:0";
+               vfp = <&timing>, "vfront-porch:0";
+               vsync = <&timing>, "vsync-len:0";
+               vbp = <&timing>, "vback-porch:0";
+
+               width-mm = <&panel>, "width-mm:0";
+               height-mm = <&panel>, "height-mm:0";
+
+               rgb565 = <&panel>, "dsi-color-format=RGB565";
+               rgb666p = <&panel>, "dsi-color-format=RGB666_PACKED";
+               rgb666 = <&panel>, "dsi-color-format=RGB666";
+               rgb888 = <&panel>, "dsi-color-format=RGB888";
+               one-lane = <0>,"+1";
+               two-lane = <0>,"+2";
+               three-lane = <0>,"+3";
+               four-lane = <0>,"+4";
+       };
+
+};