Hi there,
I’m trying to get a DSI display to work with a ROCK 3A board. My display uses the Sitronix ST7701 driver.
I added the driver to the kernel and wrote the necessary device tree sources (DTS). However, I’m running into some issues, and the console is showing the following errors.
Could you help me identify the mistakes in my DTS?
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&dsi1>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
port {
dsi1_out_port: endpoint {
remote-endpoint = <&panel_dsi_in>;
};
};
st7701:st7701@0 {
compatible = "techstar,ts8550b";
reg = <0x0>;
status = "okay";
// label = "test_display";
// VCC-supply = <&vcc_3v3>;
// IOVCC-supply = <&vcc_3v3>;
reset-gpios = <&gpio1 24 0>;
// prepare-delay-ms = <2>;
// reset-delay-ms = <1>;
// init-delay-ms = <20>;
// enable-delay-ms = <120>;
// disable-delay-ms = <50>;
// unprepare-delay-ms = <20>;
// dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
// MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
// dsi,format = <MIPI_DSI_FMT_RGB888>;
// dsi,lanes = <2>;
panel-init-sequence = [
39 00 06 FF 77 01 00 00 13
39 00 02 EF 08
39 00 06 FF 77 01 00 00 10
39 00 03 C0 63 00
39 00 03 C1 10 02
39 00 03 C2 31 02
39 00 02 CC 10
39 00 11 B0 C0 0C 92 0C 10 05 02 0D 07 21 04 53 11 6A 32 1F
39 00 11 B1 C0 87 CF 0C 10 06 00 03 08 1D 06 54 12 E6 EC 0F
39 00 06 FF 77 01 00 00 11
39 00 02 B0 5D
39 00 02 B1 62
39 00 02 B2 82
39 00 02 B3 80
39 00 02 B5 42
39 00 02 B7 85
39 00 02 B8 20
39 00 02 C0 09
39 00 02 C1 78
39 00 02 C2 78
39 00 02 D0 88
39 FF 02 EE 42
39 00 04 E0 00 00 02
39 00 0C E1 04 A0 06 A0 05 A0 07 A0 00 44 44
39 00 0D E2 00 00 33 33 01 A0 00 00 01 A0 00 00
39 00 05 E3 00 00 33 33
39 00 03 E4 44 44
39 00 11 E5 0C 30 A0 A0 0E 32 A0 A0 08 2C A0 A0 0A 2E A0 A0
39 00 05 E6 00 00 33 33
39 00 03 E7 44 44
39 00 11 E8 0D 31 A0 A0 0F 33 A0 A0 09 2D A0 A0 0B 2F A0 A0
39 00 08 EB 00 01 E4 E4 44 88 00
39 00 11 ED FF F5 47 6F 0B A1 A2 BF FB 2A 1A B0 F6 74 5F FF
39 00 07 EF 08 08 08 40 3F 64
39 00 06 FF 77 01 00 00 13
39 00 03 E8 00 0E
39 00 06 FF 77 01 00 00 00
39 FF 01 11
39 00 06 FF 77 01 00 00 13
39 FF 03 E8 00 0C
39 00 03 E8 00 00
39 00 06 FF 77 01 00 00 00
39 00 02 3A 50
39 FF 01 29
];
display-timings {
native-mode = <&timing0>;
timing0: timing-0 {
clock-frequency = <30000000>;
hactive = <540>;
vactive = <960>;
hfront-porch = <20>;
hback-porch = <20>;
hsync-len = <20>;
vfront-porch = <20>;
vback-porch = <20>;
vsync-len = <20>;
};
};
port {
panel_dsi_in: endpoint {
remote-endpoint = <&dsi1_out_port>;
};
};
};
};
};
fragment@1 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
fragment@3 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@4 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@5 {
target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
__fixups__ {
video_phy1 = "/fragment@1:target:0";
dsi1_in_vp0 = "/fragment@2:target:0";
dsi1_in_vp1 = "/fragment@3:target:0";
route_dsi1 = "/fragment@4:target:0";
hdmi = "/fragment@5:target:0";
};
};
It seems I’m having trouble properly using ports, endpoints, and remote-endpoints. At the moment, I’m using fragments like these:
port {
dsi1_out_port: endpoint {
remote-endpoint = <&panel_dsi_in>;
};
};
and
port {
panel_dsi_in: endpoint {
remote-endpoint = <&dsi1_out_port>;
};
};
But I don’t think these are correct. Additionally, I don’t see a link in /sys/firmware/devicetree/base/symbols to the new driver. I’m not sure if that’s normal or if there’s an issue.
Any pointers would be greatly appreciated!