1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
From ccf75f2a6f4045484c4539f7d47264f8f6b8453c Mon Sep 17 00:00:00 2001
From: Timon Skerutsch <kernel@diodes-delight.com>
Date: Mon, 13 Nov 2023 22:52:35 +0100
Subject: [PATCH] overlays: example overlay for using panel-dsi on RPi
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 | 1 +
arch/arm/boot/dts/overlays/README | 31 +++++
.../overlays/vc4-kms-dsi-generic-overlay.dts | 106 ++++++++++++++++++
3 files changed, 138 insertions(+)
create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-dsi-generic-overlay.dts
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -293,6 +293,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 \
--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -4785,6 +4785,37 @@ Params: sizex Touchscr
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
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-generic-overlay.dts
@@ -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";
+ };
+
+};
|