Custom DSI panel doesnt work
Hi, I try to add custom display, but for some reason DRM doesnt connect it in any way. Is DSI panels works or not in kernel?
root@orangepicm4:~# dmesg | grep drm;echo "" ;dmesg | grep dsi ; echo ""; dmesg | grep panel [ 5.501723] OF: fdt: Reserved memory: failed to reserve memory for node 'drm-logo@00000000': base 0x0000000000000000, size 0 MiB [ 5.502845] OF: fdt: Reserved memory: failed to reserve memory for node 'drm-cubic-lut@00000000': base 0x0000000000000000, size 0 MiB [ 9.512595] dw-mipi-dsi-rockchip fe070000.dsi: [drm] ERROR modalias failure on /dsi@fe070000/port@1 [ 9.529773] dw-mipi-dsi-rockchip fe070000.dsi: [drm:dw_mipi_dsi_host_attach] ERROR Failed to find panel or bridge: -19 [ 10.387747] [drm] Initialized rknpu 0.9.2 20231018 for fde40000.npu on minor 0
[ 9.512595] dw-mipi-dsi-rockchip fe070000.dsi: [drm] ERROR modalias failure on /dsi@fe070000/port@1 [ 9.528975] panel-simple-dsi fe070000.dsi.0: Looking up power-supply from device tree [ 9.529070] panel-simple-dsi fe070000.dsi.0: Looking up power-supply property in node /dsi@fe070000/panel@0 failed [ 9.529135] panel-simple-dsi fe070000.dsi.0: supply power not found, using dummy regulator [ 9.529773] dw-mipi-dsi-rockchip fe070000.dsi: [drm:dw_mipi_dsi_host_attach] ERROR Failed to find panel or bridge: -19
[ 9.528975] panel-simple-dsi fe070000.dsi.0: Looking up power-supply from device tree [ 9.529070] panel-simple-dsi fe070000.dsi.0: Looking up power-supply property in node /dsi@fe070000/panel@0 failed [ 9.529135] panel-simple-dsi fe070000.dsi.0: supply power not found, using dummy regulator [ 9.529773] dw-mipi-dsi-rockchip fe070000.dsi: [drm:dw_mipi_dsi_host_attach] ERROR Failed to find panel or bridge: -19 [ 16.882886] waveshare_panel_regulator: loading out-of-tree module taints kernel. [ 16.893858] waveshare_touchscreen 1-0045: waveshare panel hw id = 0x1 [ 16.904957] waveshare_touchscreen 1-0045: waveshare panel size = 101 [ 16.917636] waveshare_touchscreen 1-0045: waveshare panel mcu version = 0x1
/*
- vc4-kms-dsi-ili9881-5inch-overlay.dts */
/dts-v1/; /plugin/;
/ { fragment@4 { target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
fragment@5 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@6 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@10 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@11 {
target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
fragment@12 {
target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
i2c_frag: fragment@0 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
display_mcu: display_mcu@45 {
compatible = "waveshare,touchscreen-panel-regulator";
reg = <0x45>;
gpio-controller;
#gpio-cells = <2>;
};
touch: goodix@5d {
compatible = "goodix,gt9271";
reg = <0x5d>;
reset-gpio = <&display_mcu 9 0>;
};
};
};
dsi_frag: fragment@1 {
target = <&dsi1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
panel = <&dsi_panel>;
//rockchip,lane-rate = <1000>;
//port@1 {
// reg = <0x01>;
// dsi_out_panel: endpoint {
// remote-endpoint = <&dsi_in_panel>;
// //remote-endpoint = <0xa0>;
// //phandle = <0xdc>;
// status = "okay";
// };
//};
//dsi_panel: panel@0 {//
// reg = <0>;
// compatible = "waveshare,10.1-dsi-touch-a";
// reset-gpio = <&display_mcu 1 0>;
// backlight = <&display_mcu>;
// phandle = <0x1b2>;
// status = "okay";
// port {
// endpoint {
// remote-endpoint = <0xdc>;
// phandle = <0xa0>;
// };
// };
//};
dsi_panel: panel@0 {//dsi_panel_simple:@1
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
//select the backlight node of the previous configuration
//backlight = <&display_mcu>;
//reset-gpio = <&display_mcu 1 0>;
//sets the timing of startup of LCD
enable-delay-ms = <50>;
prepare-delay-ms = <200>;
reset-delay-ms = <50>;
init-delay-ms = <55>;
unprepare-delay-ms = <50>;
disable-delay-ms = <20>;
mipi-data-delay-ms = <200>;
size,width = <120>;
size,height = <170>;
//set the output mode of DSI (DPHY). the default mode is Video
dsi,flags = <0xc11>;//c11 //411
//sets the output format for DSI pixel data, depending on whether the receiving screen supports the format
dsi,format = <0>;
//set the number of lanes to be used. Default is 4 lanes
dsi,lanes = <2>;
//set the power-on command for the MIPI DSI
panel-init-sequence = [
13 00 02 E0 00
13 00 02 E1 93
13 00 02 E2 65
13 00 02 E3 F8
13 00 02 80 01
13 00 02 E0 01
13 00 02 00 00
13 00 02 01 38
13 00 02 03 10
13 00 02 04 38
13 00 02 0C 74
13 00 02 17 00
13 00 02 18 AF
13 00 02 19 00
13 00 02 1A 00
13 00 02 1B AF
13 00 02 1C 00
13 00 02 35 26
13 00 02 37 09
13 00 02 38 04
13 00 02 39 00
13 00 02 3A 01
13 00 02 3C 78
13 00 02 3D FF
13 00 02 3E FF
13 00 02 3F 7F
13 00 02 40 06
13 00 02 41 A0
13 00 02 42 81
13 00 02 43 1E
13 00 02 44 0D
13 00 02 45 28
13 00 02 55 02
13 00 02 57 69
13 00 02 59 0A
13 00 02 5A 2A
13 00 02 5B 17
13 00 02 5D 7F
13 00 02 5E 6A
13 00 02 5F 5B
13 00 02 60 4F
13 00 02 61 4A
13 00 02 62 3D
13 00 02 63 41
13 00 02 64 2A
13 00 02 65 44
13 00 02 66 43
13 00 02 67 44
13 00 02 68 62
13 00 02 69 52
13 00 02 6A 59
13 00 02 6B 4C
13 00 02 6C 48
13 00 02 6D 3A
13 00 02 6E 26
13 00 02 6F 00
13 00 02 70 7F
13 00 02 71 6A
13 00 02 72 5B
13 00 02 73 4F
13 00 02 74 4A
13 00 02 75 3D
13 00 02 76 41
13 00 02 77 2A
13 00 02 78 44
13 00 02 79 43
13 00 02 7A 44
13 00 02 7B 62
13 00 02 7C 52
13 00 02 7D 59
13 00 02 7E 4C
13 00 02 7F 48
13 00 02 80 3A
13 00 02 81 26
13 00 02 82 00
13 00 02 E0 02
13 00 02 00 42
13 00 02 01 42
13 00 02 02 40
13 00 02 03 40
13 00 02 04 5E
13 00 02 05 5E
13 00 02 06 5F
13 00 02 07 5F
13 00 02 08 5F
13 00 02 09 57
13 00 02 0A 57
13 00 02 0B 77
13 00 02 0C 77
13 00 02 0D 47
13 00 02 0E 47
13 00 02 0F 45
13 00 02 10 45
13 00 02 11 4B
13 00 02 12 4B
13 00 02 13 49
13 00 02 14 49
13 00 02 15 5F
13 00 02 16 41
13 00 02 17 41
13 00 02 18 40
13 00 02 19 40
13 00 02 1A 5E
13 00 02 1B 5E
13 00 02 1C 5F
13 00 02 1D 5F
13 00 02 1E 5F
13 00 02 1F 57
13 00 02 20 57
13 00 02 21 77
13 00 02 22 77
13 00 02 23 46
13 00 02 24 46
13 00 02 25 44
13 00 02 26 44
13 00 02 27 4A
13 00 02 28 4A
13 00 02 29 48
13 00 02 2A 48
13 00 02 2B 5F
13 00 02 2C 01
13 00 02 2D 01
13 00 02 2E 00
13 00 02 2F 00
13 00 02 30 1F
13 00 02 31 1F
13 00 02 32 1E
13 00 02 33 1E
13 00 02 34 1F
13 00 02 35 17
13 00 02 36 17
13 00 02 37 37
13 00 02 38 37
13 00 02 39 08
13 00 02 3A 08
13 00 02 3B 0A
13 00 02 3C 0A
13 00 02 3D 04
13 00 02 3E 04
13 00 02 3F 06
13 00 02 40 06
13 00 02 41 1F
13 00 02 42 02
13 00 02 43 02
13 00 02 44 00
13 00 02 45 00
13 00 02 46 1F
13 00 02 47 1F
13 00 02 48 1E
13 00 02 49 1E
13 00 02 4A 1F
13 00 02 4B 17
13 00 02 4C 17
13 00 02 4D 37
13 00 02 4E 37
13 00 02 4F 09
13 00 02 50 09
13 00 02 51 0B
13 00 02 52 0B
13 00 02 53 05
13 00 02 54 05
13 00 02 55 07
13 00 02 56 07
13 00 02 57 1F
13 00 02 58 40
13 00 02 5B 30
13 00 02 5C 00
13 00 02 5D 34
13 00 02 5E 05
13 00 02 5F 02
13 00 02 63 00
13 00 02 64 6A
13 00 02 67 73
13 00 02 68 07
13 00 02 69 08
13 00 02 6A 6A
13 00 02 6B 08
13 00 02 6C 00
13 00 02 6D 00
13 00 02 6E 00
13 00 02 6F 88
13 00 02 75 FF
13 00 02 77 DD
13 00 02 78 2C
13 00 02 79 15
13 00 02 7A 17
13 00 02 7D 14
13 00 02 7E 82
13 00 02 E0 04
13 00 02 00 0E
13 00 02 02 B3
13 00 02 09 61
13 00 02 0E 48
13 00 02 37 58
13 00 02 2B 0F
13 00 02 E0 00
13 00 02 E6 02
13 00 02 E7 0C
05 78 01 11
05 3C 01 29
];
//set the power-off command for the MIPI DSI
panel-exit-sequence = [
05 00 01 28
05 00 01 10
];
//set the display timing of the LCD screen (this part can be obtained from the corresponding screen, as shown in the figure above)
disp_timings0: display-timings {
native-mode = <&dsi0_timing0>;
dsi0_timing0: timing0 {
/* the conversion formula for display timing sequence is generally:
(hactive + hsync-len + hback-porch + hfront-porch)
x
( vactive + vsync-len + vback-porch + vfront-porch)x fps
= clock-frequency
*/
clock-frequency = <70000000>;//<80000000>;
hactive = <800>;//800;//880
vactive = <1280>;//1280//1324
hsync-len = <20>; //20, 50,10
hback-porch = <20>; //50, 56,10
hfront-porch = <40>;//50, 30,180
vsync-len = <4>;//4
vback-porch = <10>;//4
vfront-porch = <30>;//8
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
ports {
port {
dsi_in_panel: endpoint {
//remote-endpoint = <0xdd>;
//phandle = <0xa1>;
remote-endpoint = <&dsi_out_panel>;
};
};
};
};
port@1 {
reg = <0x01>;
dsi_out_panel: endpoint {
remote-endpoint = <&dsi_in_panel>;
//remote-endpoint = <0xa1>;
//phandle = <0xdd>;
status = "okay";
};
};
};
};
fragment@7 {
target = <0xffffffff>;
__overlay__ {
status = "disabled";
};
};
fragment@8 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@9 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
__overrides__ {
//10_1_inch_a = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-a";
//10_1_inch_a_4lane = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-a,4lane";
//10_1_inch_b = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-b";
//10_1_inch_b_4lane = <&dsi_panel>, "compatible=waveshare,10.1-dsi-touch-b,4lane";
dsi1 = <&dsi_frag>, "target:0=",<&dsi1>,
<&i2c_frag>, "target:0=",<&i2c1>;
};
__fixups__ {
dsi1 = "/fragment@10:target:0";
i2c1 = "/fragment@5:target:0";
video_phy1 = "/fragment@6:target:0";
dsi1_in_vp0 = "/fragment@7:target:0";
dsi1_in_vp1 = "/fragment@8:target:0";
route_dsi1 = "/fragment@9:target:0";
hdmi = "/fragment@4:target:0";
edp = "/fragment@11:target:0";
panel_in_edp = "/fragment@12:target:0";
};
};