Verdin iMX8M Mini and Sitronix ST7701 based 480x480 MIPI-DSI Display

Hello,

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.

Kernel-Log:
dmesg.txt (32.2 KB)

DevicetreeOverlay:
ST7701_overlay.dts (1.2 KB)

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?

Thanks and best regards,
Jaski

Hello Jaski,

thank you for the welcome and response. I attach the schematic for the used display adapter.
I haven’t done any other changes to the devicetree yet.

Best regards
Sascha!

MipiAdapter|690x446

Hello SFAUST2201,

Did you follow the controlled impedance recommendation of our layout design guide.

Best Regards,

Matthias

Hello Matthias,

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.

Best Regards
Sascha

Hello,
Did you try to use the device tree from the verdin DVB which is using the DSI to HDMI > you should be able to see some signal there.

Best Regards,

Matthias Gohlke

Hello Matthias,

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?

Best regards
Sascha

Just to provide some feedback on the device tree side.

This is the reference device tree for a MIPI DSI display on the i.MX8MM from NXP: imx8mm-ddr4-evk-revb-rm67191.dts « freescale « dts « boot « arm64 « arch - linux-toradex.git - Linux kernel for Apalis and Colibri modules

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.

Best Regards,
Jeremias

Hello Jeremias,

thanks for your feedback. Based on this dts example I created my file.
Of course I also tried this line, but got errors from bootloader.

I wasn’t sure if it gets used by ST7701 driver, because documentation mentioned nothing about such a property.

[https://www.kernel.org/doc/Documentation/devicetree/bindings/display/panel/sitronix%2Cst7701.txt]

But documentation there says the backlight property is optional too.

Now I got Reset-Line working. Found the GPIO in file “imx8mm-verdin-nonwifi.dtsi” and tried “reset-gpios = <&gpio3 3 GPIO_ACTIVE_LOW>;”. Success.

Tomorrow i will check the data/clk line(s).

Best regards
Sascha

Hi, I’m also trying to integrate a MIPI-DSI display. Did you ever progress with this?

Would you mind sharing your updated Device Tree Overlay?

Kind regards,

Ernest

@jeremias.tx can you help here ?

Best Regards,

Matthias

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>;
		};
	};
};

Hello Ernest,

that is great news!

Best Regards,

matthias