Dual-Channel LVDS DTS Overlay and Display Power-On Sequence Configuration

Hi Toradex team!

I hope you’re doing well.

I’m working on a dual-channel LVDS display setup using a Verdin-AM62 SoM on the Mallow Carrier Board, with a custom image built using Yocto.

I’ve attached the DTS overlay file (dual_channel_lvds.txt) and the display datasheet (Touchscreen TFT datasheet 1.pdf) for reference. Could you kindly review the overlay and confirm if it is correctly configured for this setup?

Additionally, as per the datasheet (screenshot included), the display requires a specific power-on sequence involving control signals such as RESET_N, DISPLAY_ON, and FCS. At the moment, I have left these pins unconnected.

Do I need to configure these pins as GPIOs in the device tree and toggle them during boot according to the required timing? Could the absence of this sequence be the reason the display isn’t turning on?

Any guidance would be greatly appreciated.

Best regards,
Uday

Display_datasheet :
Touchscreen TFT datasheet 1.pdf (1.8 MB)

Dts file :
dual_channel_lvds.txt (3.7 KB)

Power_on_sequence :

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

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


Hello Uday,

Thank you for your detailed message and for sharing the relevant files and information.

Review of Power-On Sequence & Control Signals

Based on your description and the display datasheet screenshot, displays requiring strict power/reset sequencing (like toggling RESET_N, DISPLAY_ON, FCS) must have those signals properly controlled from the SoM. If you left these pins unconnected, this could certainly prevent the display from turning on.

Why Control Signals Matter

  • If the display expects a proper reset or enable signal sequence and these are floating or permanently held inactive, it may not initialize or power on correctly.
  • Proper control via GPIOs allows you to sequence power, reset, and enable lines per the timing specified in the display’s datasheet.

How to Configure Control Signals in the Device Tree

Yes, you should:

  • Allocate and configure these SoM pins (RESET_N, DISPLAY_ON, FCS, etc.) as GPIO outputs via your device tree overlay.
  • Initialize them to the required default state on boot (often RESET_N low, then high after the supply is stable).
  • If more precise timing is needed, you may have to write a simple kernel driver or user-space script to toggle the pins in sequence.

Here’s a reference for how to configure these pins as GPIOs in a device tree overlay:

&iomuxc {
    pinctrl_lvds_ctrl: lvdsctrlgrp {
        fsl,pins = <
            /* Example: MX8MM_IOMUXC_GPIO1_IO01_GPIO1_IO1 0x104 */
            /* Replace with the correct SoC pin macros for AM62 */
        >;
    };
};

&{/} {
    lvds_ctrls {
        compatible = "gpio-leds";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_lvds_ctrl>;

        reset-n {
            label = "lvds-reset";
            gpios = <&gpioX Y GPIO_ACTIVE_LOW>;
            default-state = "off";
        };
        display-on {
            label = "lvds-display-on";
            gpios = <&gpioX Y GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };
        fcs {
            label = "lvds-fcs";
            gpios = <&gpioX Y GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };
    };
};

Replace <&gpioX Y ...> with the correct GPIO controller and line number for your Verdin AM62 setup.

How to Find the Right Pin Mapping

  • Check the Verdin AM62 + Mallow documentation for which physical headers/pins to use (1).

Next Steps

  1. Allocate physical pins for RESET_N, DISPLAY_ON, and FCS between the Verdin AM62 and your display.
  2. Configure them as GPIOs in your device tree overlay as shown above.
  3. Ensure your boot sequence (or a userspace service/udev rule) toggles the lines according to the display’s timing requirements.
  4. Rebuild the device tree overlay and deploy to your image.

You can also refer to the Toradex device tree customization guides for further details:

Conclusion

Yes, the absence of proper signal control is likely why your display is not powering up. Please wire and configure those control signals using your device tree, and ensure your system (via overlay and possible scripts) performs the needed power-on sequence.

If you would like, you can paste the relevant parts of your DTS overlay here (as text) and I can review the GPIO/control signal portions for correctness.

Best regards,
Toradex AI Assistant.

Hi @Uday10122!

I saw you used the links I sent here, but I saw some differences and I would like to understand them.

In your overlay, the node &dds_ports has two child nodes (port@0 and port@1), each with one child node called dpi0_outX, but in both of the examples, there is only one child node (port@0) with two child nodes called dpi0_outX.

Another difference is that in the example, the nodes oldi0 and oldi1 don’t have the argument called dual-channel, and you wrote it in yours.

I noticed that some of the nodes that have the variables address-cells and size-cells don’t have them in yours.

Besides that, in your overlay, the arguments dual-lvds-odd-pixels and dual-lvds-even-pixels are not present either.

Is there a particular reason why you made these changes?

About the power sequence, I’m pretty sure the driver takes care of it. You don’t need to do it manually.

Best regards.

Hi @lucas_az.tx

Thank you for your feedback and for taking the time to review the file.

The main change I made was to the panel timings, which I updated based on the datasheet. Aside from that, I wrote a few new lines, referred to online resources, and made comparisons with the mezzanine file to guide the rest of the edits.

Based on your comments:

  • Regarding the dual-channel argument for oldi0 and oldi1 — I’ve now removed that line as noted.
  • For the nodes missing address-cells and size-cells, I followed the structure from the mezzanine file. Also, some of the address-cells are already present elsewhere in the tree.
  • I had missed the dual-lvds-odd-pixels and dual-lvds-even-pixels parameters from the mezzanine reference — these have now been added.

Additionally, I’ve updated the &dss_ports section like this:

&dss_ports {
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        dpi0_out0: endpoint {
            remote-endpoint = <&oldi_0_in>;
        };
    };
    port@1 {
        reg = <1>;
        dpi0_out1: endpoint {
            remote-endpoint = <&oldi_1_in>;
        };
    };
};

Please find the updated dual-channel-lvds-native.dts attached as dual_channnel_lvds_updated.txt.
Could you kindly review it and let me know if any further changes are needed?
code : dual_channnel_lvds_updated.txt (3.6 KB)

Also, if you happen to have a template or reference DTS where simply updating the panel timings is sufficient to make it work, it would be really helpful if you could share it — I’d like to use that as a base for future updates.

best regards,
Uday

Hi @Uday10122!

Unfortunately, I don’t have any reference DTS.

About the overlay, were you able to test it after the modifications? If not, please test it and let me know the results.

Best regards.

Hi @lucas_az.tx,

I’ve made some further updates to the device tree, and after incorporating the recent changes, my DTS file now looks like this:

dts :

// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2023 Toradex
 */

// Verdin AM62 dual-channel LVDS for AUO C123HAX02.2

/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pwm/pwm.h>
#include "k3-pinctrl.h"

/ {
    compatible = "toradex,verdin-am62";
};

&{/} {
    backlight_lvds_native: backlight-lvds-native {
        compatible = "pwm-backlight";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2s_2_d_out_gpio>;
        brightness-levels = <0 45 63 88 119 158 203 255>;
        default-brightness-level = <4>;
        enable-gpios = <&main_gpio0 34 GPIO_ACTIVE_HIGH>;
        pwms = <&epwm0 1 6666667 PWM_POLARITY_INVERTED>;
    };

    panel-lvds-native {
        compatible = "panel-lvds";
        #address-cells = <1>;
        #size-cells = <0>;
        backlight = <&backlight_lvds_native>;
        data-mapping = "vesa-24"; /* Verify with panel */
        height-mm = <109>; /* From datasheet: 109.512 mm */
        width-mm = <292>; /* From datasheet: 292.032 mm */
        status = "okay";

        panel-timing {
            clock-frequency = <89600000>; /* 89.6 MHz */
            de-active = <1>;
            hactive = <1920>;
            hback-porch = <56>;
            hfront-porch = <40>;
            hsync-active = <0>;
            hsync-len = <32>;
            pixelclk-active = <1>;
            vactive = <720>;
            vback-porch = <4>;
            vfront-porch = <3>;
            vsync-active = <0>;
            vsync-len = <2>;
        };

        port@0 {
            reg = <0>;
            dual-lvds-odd-pixels;
            panel_lvds_in0: endpoint {
                remote-endpoint = <&oldi_0_out>;
            };
        };

        port@1 {
            reg = <1>;
            dual-lvds-even-pixels;
            panel_lvds_in1: endpoint {
                remote-endpoint = <&oldi_1_out>;
            };
        };
    };
};

&main_pmx0 {
    pinctrl_i2s_2_d_in_gpio: main-gpio0-33-default-pins {
        pinctrl-single,pins = <
            AM62X_IOPAD(0x0088, PIN_INPUT, 7) /* SODIMM 48 */
        >;
    };

    pinctrl_i2s_2_sync_gpio: main-gpio0-37-default-pins {
        pinctrl-single,pins = <
            AM62X_IOPAD(0x0098, PIN_INPUT, 7) /* SODIMM 44 */
        >;
    };

    pinctrl_i2s_2_d_out_gpio: main-gpio0-34-default-pins {
        pinctrl-single,pins = <
            AM62X_IOPAD(0x008c, PIN_OUTPUT, 7) /* SODIMM 46 */
        >;
    };
};

&dss {
    status = "okay";
};

&dss_ports {
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        dpi0_out0: endpoint@0 {
            reg = <0>;
            remote-endpoint = <&oldi_0_in>;
        };
        dpi0_out1: endpoint@1 {
            reg = <1>;
            remote-endpoint = <&oldi_1_in>;
        };
    };
};

&epwm0 {
    status = "okay";
};

&main_i2c2 {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";

    touch@4a {
        compatible = "atmel,maxtouch"; /* Verify TDDI IC */
        reg = <0x4a>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2s_2_d_in_gpio>, <&pinctrl_i2s_2_sync_gpio>;
        interrupt-parent = <&main_gpio0>;
        interrupts = <37 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&main_gpio0 33 GPIO_ACTIVE_LOW>;
    };
};

&oldi0 {
    status = "okay";
};

&oldi0_ports {
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        oldi_0_in: endpoint {
            remote-endpoint = <&dpi0_out0>;
        };
    };
    port@1 {
        reg = <1>;
        oldi_0_out: endpoint {
            remote-endpoint = <&panel_lvds_in0>;
        };
    };
};

&oldi1 {
    status = "okay";
};

&oldi1_ports {
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        oldi_1_in: endpoint {
            remote-endpoint = <&dpi0_out1>;
        };
    };
    port@1 {
        reg = <1>;
        oldi_1_out: endpoint {
            remote-endpoint = <&panel_lvds_in1>;
        };
    };
};

Both the pre-built single-channel overlay and my modified dual-channel overlay result in the display output shown below:



Regards
Uday

Hi @Uday10122!

Could you display your application on the screen? Or are these the only outputs you can get?

Best regards.

Hi @lucas_az.tx,

Thank you for your response.

This is the only output I’m getting — even that home screen is also not appearing.

Best regards.
Uday

Hi @Uday10122!

Could you try to reinstall a standard image to check if it works as expected?

At this point, I’m not sure what could cause this behavior, and without the hardware to test, it is difficult to define.

In this case, I recommend taking a look at our Partner Network. There, you can find experts who will be capable of helping you with your issue by testing and debugging it, accelerating the entire development process.

Best regards.