Configure LVDS display timing in dts overlay

Hi support,
i am working with verdin imx8mp and carrier board mallow v1.1. This is my software summary:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.119-7.5.0-ge5c5595adb06 #1-Torizon SMP PREEMPT Mon Jan  5 09:23:13 UTC 2026
Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/8cc3d175cfab59c568c70d6ca85e2073411cf1acfc397874a4395caf646008d8/0
Distro name:              NAME="Torizon OS"
Distro version:           VERSION_ID=7.5.0-build.30
Distro variant:           VARIANT="Docker"
Hostname:                 verdin-imx8mp-15603379
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Mallow Board
Toradex version:          0064 V1.1A
Serial number:            15603379
Processor arch:           aarch64
------------------------------------------------------------

I am using an LVDS dsplay 10’’ with resoluztion 1280*800. I would like to request support in configuring the display timing parameters in the dts device tree overlay. I have all the timing values from the panel’s datasheet, but I don’t understand how to set alla timing parameters. This is the table:


How should i set these parameters:

 		panel-timing {
			clock-frequency = <>;
			de-active = <>;
			hactive = <>;
			hback-porch = <>;
			hfront-porch = <>;
			hsync-active = <>;
			hsync-len = <>;
			pixelclk-active = <>;
			vactive = <>;
			vback-porch = <>;
			vfront-porch = <>;
			vsync-active = <>;
			vsync-len = <>;
		};

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


Based on your configuration with the Verdin iMX8M Plus on Mallow Board and Torizon OS 7.5.0, you can configure the LVDS display timing parameters using the available device tree overlays(1)(2).

For your 10" LVDS display with 1280x800 resolution, you can use the existing overlay verdin-imx8mp_panel-cap-touch-10inch-lvds_overlay.dtbo as a starting point(1)(2).

Setting the Panel Timing Parameters

Based on your datasheet values, here’s how to configure the timing parameters:

panel-timing {
    clock-frequency = <71100000>;     // Pixel clock from your datasheet (71.1MHz)
    de-active = <1>;                  // Data enable active high
    hactive = <1280>;                 // Horizontal active pixels
    hback-porch = <80>;               // HBP from your datasheet
    hfront-porch = <48>;              // HFP from your datasheet  
    hsync-active = <0>;               // HSYNC polarity (0 = active low, 1 = active high)
    hsync-len = <32>;                 // HSYNC pulse width from your datasheet
    pixelclk-active = <1>;            // Pixel clock polarity (typically 1)
    vactive = <800>;                  // Vertical active lines
    vback-porch = <15>;               // VBP from your datasheet
    vfront-porch = <2>;               // VFP from your datasheet
    vsync-active = <0>;               // VSYNC polarity (0 = active low, 1 = active high)
    vsync-len = <6>;                  // VSYNC pulse width from your datasheet
};

Key Points for Configuration

  1. Clock Frequency: Use your panel’s pixel clock frequency (71.1 MHz in your case)
  2. Active Resolution: Set hactive = <1280> and vactive = <800> for your display
  3. Timing Values: Use the exact HBP, HFP, VBP, VFP values from your datasheet
  4. Sync Polarities: Check your datasheet for HSYNC and VSYNC polarities (active high = 1, active low = 0)
  5. Data Enable: Usually active high (de-active = <1>)

Available LVDS Overlays

For Verdin iMX8M Plus, you have these LVDS overlay options(1)(2):

  • Native LVDS interface: verdin-imx8mp_panel-cap-touch-10inch-lvds_overlay.dtbo
  • DSI to LVDS adapter: verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo
  • Mezzanine board: verdin-imx8mp_mezzanine_panel-cap-touch-10inch-lvds_overlay.dtbo

Since you’re using the Mallow carrier board, you’ll likely need the native LVDS interface overlay or create a custom overlay based on your specific requirements.

You can modify the existing overlay or create a custom one with your specific timing parameters to match your display’s datasheet specifications.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Sorry, but i didin’t understand beacuse you set HBP porch to 80 if the value in datasheet is 88? Same thing for other values. How are these timing values derived? Are there specific formulas used to compute them?

Thanks for the help

Fabio

You’re absolutely correct to question those values! I apologize for the confusion - you should use the exact timing values from your display’s datasheet (1).

How to Set Timing Parameters from Your Datasheet

Based on the Toradex documentation, you should directly use the values from your display datasheet (1). Here’s how to map your datasheet values to the device tree parameters:

panel-timing {
    clock-frequency = <71100000>;     // Your pixel clock: 71.1 MHz
    de-active = <1>;                  // Data enable polarity (usually active high)
    hactive = <1280>;                 // Horizontal active pixels
    hback-porch = <88>;               // Use your exact HBP value: 88
    hfront-porch = <48>;              // Use your exact HFP value: 48  
    hsync-active = <0>;               // Check datasheet for HSYNC polarity
    hsync-len = <32>;                 // Use your exact HSYNC width: 32
    pixelclk-active = <1>;            // Pixel clock polarity (check datasheet)
    vactive = <800>;                  // Vertical active lines
    vback-porch = <15>;               // Use your exact VBP value: 15
    vfront-porch = <2>;               // Use your exact VFP value: 2
    vsync-active = <0>;               // Check datasheet for VSYNC polarity
    vsync-len = <6>;                  // Use your exact VSYNC width: 6
};

(1)

Important Guidelines

The documentation emphasizes that you should check your display’s datasheet carefully, as every manufacturer provides display timings in a slightly different way (1).

Key validation points (1):

  • Horizontal period = hback_porch + hactive + hfront_porch + hsync-len
  • Vertical period = vback_porch + vactive + vfront_porch + vsync-len
  • hsync-len and vsync-len parameters cannot be zero

No Formula Required

There are no specific formulas to compute these values - you should use the exact timing parameters provided in your display’s datasheet (1). The device tree overlay examples are meant as starting points that you modify according to your specific display requirements.

For your Verdin iMX8M Plus on Mallow, you can create a custom overlay based on the existing LVDS examples, but with your exact datasheet values (2).

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hello Fabio,

Thank you to contact us, I’m glad to help on your case.

You’re right to question the numbers, thanks for catching that.

For custom LVDS panels we expect you to use the exact timings from your panel datasheet in the device tree overlay. That’s documented here in the Torizon display guide:

Configure Other Displays with Torizon

The only real “rules” are the consistency checks:

  • Horizontal period must be hback-porch + hactive + hfront-porch + hsync-len
  • Vertical period must be vback-porch + vactive + vfront-porch + vsync-len

So if your datasheet says HBP = 88, HFP = 48, etc., you should put those exact values into hback-porch, hfront-porch, hsync-len, and the same for the vertical side. There is no special formula that turns 88 into 80; that example is just using different (generic) values.

If you want to dig deeper into how Linux handles these modes and where panel-timing fits in the DRM/KMS pipeline, this article goes into more detail (including LVDS examples on i.MX 8):

Panel LVDS

Let me know if it helped you.

Best regards,

Hi @diegom.tx ,

thanks for the reply. Reading the datasheet and following your instructions, I compiled the parameters in this way:

panel-timing {
			clock-frequency = <66300000 72400000 78900000>;
			de-active = <1>;
			hactive = <1280>;
			hback-porch = <88>;
			hfront-porch = <72>;
			hsync-active = <0>;
			hsync-len = <2>;
			pixelclk-active = <1>;
			vactive = <800>;
			vback-porch = <23>;
			vfront-porch = <15>;
			vsync-active = <0>;
			vsync-len = <2>;
		};

but I am not sure that the values of the clock and of hsync-len and vsync-len are correct. Are these values correct?

Thanks in advance for your help.

Fabio

Hi Fabio,

Great!

About your questions, yes clock-frequency must be a single value, not a list. You should use the typical pixel clock, so:

clock-frequency = <72400000>;

For the both length

hsync-len = <2>;
vsync-len = <2>;

is correct, you can use higher values also, but I suggest to only increase them if you see signal instability.

The critical detail in your case is this: the datasheet defines back porch “with pulse width”, while in Device Tree the porch and sync are separate. So you must subtract the sync width:

  • hback-porch = 88 - 2 = 86

  • vback-porch = 23 - 2 = 21

Putting it all together, this is a clean and consistent configuration:

`hback-porch = <86>;`

vback-porch = <21>;

Your active area and front porch values are correct and aligned with the nominal timing. The main fixes were the pixel clock definition and the back porch interpretation.

For de-active, hsync-active, vsync-active, and pixelclk-active, these must match the signal polarity table of the panel — timing tables don’t define polarity, so this still needs to be verified there.

Thanks @diegom.tx for your help

Fabio