I’m trying to get this display to work on a Toradex Verdin Developement Board V1.1A.
Based on the “tdx-reference-multimedia-image” I created my own target. In the kernel config I added ST7701 driver as module ( CONFIG_DRM_PANEL_SITRONIX_ST7701=m ). Currently with no modifications to this driver.
Then I created a new device-tree-overlay file for this display similiar to the raydium display. But it does’nt work. I’m getting a few errors like “st7701: probe of 32e10000.mipi_dsi.0 failed with error -22” and i’m not sure if the device tree overlay is correct.
Display is connected via lane-0 (p/n) , lane-1 (p/n) and clk (p/n), reset is connected to GPIO_10_DSI / SODIMM_21. I expected at least some traffic on the lines, but it seems there is no communication at all.
I would be happy to receive any advice how to proceed further.
Hello @SFAUST2201 and Welcome to the Toradex Community!
Could you share a connection diagram between the carrier board and DSI Display?
Have you done any other changes to the software and devicetree? If yes, could you share the changes?
currently it is a wire entanglement but a pcb is in production.
There is no disturbed image, it’s just black and I see the backlight. We already checked wiring several times.
Independent of wiring shouldn’t I see some kind of traffic on data0 line? at least a reset signal during driver probing?
With a gpioset gpiochip2 3=1 I can set the reset line to high, so reset line is connected right.
Did I made any mistake(s) in creating DTS-File? Have i described the link between DSI-Interface and panel correctly? This is our first project with embedded linux so mistakes could happen anywhere.
thanks for response. If I use lt8912 device tree overlay file , i can see reset-line is going high. But no other signals on data-lane0 / clk-lane. But I guess that’s because of the missing eeprom.
Meanwhile I get rid of error -22. In device tree overlay the entry for Backlight was missing. Now this error is gone and is see the panel is probed 5 times.
But Reset-signal ( GPIO_10_DSI ) still remains low. So maybe I’m using the wrong GPIO?
Comparing with the work you’ve done, the only noticeable difference is you don’t have a pinctrl-0 node. This node should refer to a pinctrl group that configures the reset GPIO that you are attempting to use. This ensures that the pin is reserved for use by the MIPI DSI interface.
I imagine this is causing some of the issues you’re seeing, though not sure if it is the only issue. Assuming the hardware and software driver have no issues of their own.
I was able to integrate our device with a custom DTO and by editing the Raydium 67191 driver available in the kernel to the specs of our display. Thanks for taking a look! I’ve added our device tree overlay in case it is useful for someone else. The compatible string is that of the modified driver, and the key I missed was to enable the GPIO10_DSI which we use as ‘STBYB’ of the display (Ampire 480x1920 LCD).
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "dt-bindings/pwm/pwm.h"
// Largely based on verdin-imx8mm_sn65dsi84_overlay.dts, branch toradex_5.4-2.3.x-imx
/ {
compatible = "toradex,verdin-imx8mm";
};
&backlight {
// Increase frequency of backlight PWM to 15 kHz
pwms = <&pwm1 0 66667 PWM_POLARITY_INVERTED>;
status = "okay";
};
/* Verdin I2C_2_DSI */
&i2c2 {
clock-frequency = <10000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
};
&gpu {
status = "okay";
};
&lcdif {
status = "okay";
};
&mipi_dsi {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
panel@0 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
reg = <0>;
compatible = "ampire,am4801920";
// Enable gpio_10_dsi (STBYB signal of the display in our layout)
enable-gpios = <&gpio3 3 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_10_dsi>;
backlight = <&backlight>;
dsi-lanes = <4>;
video-mode = <2>;
// These 2 properties are not read by the raydium driver
width-mm = <55>;
height-mm = <219>;
port {
panel_in: endpoint {
remote-endpoint = <&mipi_panel_out>;
};
};
};
port@1 {
reg = <1>;
mipi_panel_out: endpoint {
remote-endpoint = <&panel_in>;
};
};
};