Driving two LCDs with Dual LVDS on SMARC i.MX8M Plus

Hello,

I am currently testing the SMARC i.MX8M Plus together with the SMARC development board, and I would like to drive two independent LCDs with a resolution of 1280×800 pixels each via the dual‑channel LVDS connector. One display connected through the LVDS0 channel is already working.

This raises two questions for me:

  1. How does the Torizon device tree need to be configured in order to switch the multiplexer MUX TMUXHS4212I (LVDS1/DSI1) on the SMARC i.MX8M Plus to LVDS1?

Ein Bild, das Text, Screenshot, Reihe, Schrift enthält.  KI-generierte Inhalte können fehlerhaft sein.

  1. How does the Torizon device tree need to be configured to enable the split mode of the dual‑channel LVDS interface, and which additional settings may be required?

For better understanding, it would also be helpful to know how I can drive a single display via LVDS1 only.

Best regards,
Juliander

Hi, I’m the Toradex AI Assistant.

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


I’d be glad to help! Could you let me know which OS and version you are using? To provide accurate device tree configuration guidance, I need to understand your specific platform setup.

Please run the tdx-info command on your device to get the complete hardware and software information. You can find more details about this command at tdx-info documentation.

Once I have your platform details, I can provide specific guidance on:

SMARC i.MX8M Plus LVDS Configuration

Based on the available documentation, the SMARC i.MX8M Plus supports dual-channel LVDS configurations (1). However, the exact device tree overlay configuration depends on:

  • Your Torizon OS version
  • Whether you’re using single-channel or dual-channel mode
  • The specific display timings and resolution requirements

Available LVDS Overlays

For SMARC i.MX8M Plus, Toradex provides several LVDS-related overlays (1):

  • toradex-smarc-imx8mp_panel-cap-touch-10inch-lvds_overlay.dtbo (starting from version 7.3.0)
  • toradex-smarc-imx8mp_panel-lvds-dual-channel-1080p_overlay.dtbo (starting from version 7.3.0, downstream only)

Hardware Considerations

The i.MX 8M Plus SoC features one LVDS interface that can be configured for single or dual-channel with 18 and 24-bit support (2). For dual-channel configuration, odd bits are transmitted in the first channel and even bits in the second channel (2).

To provide you with the exact device tree configuration for your multiplexer setup and dual 1280×800 displays, I need to confirm your specific Torizon OS version and hardware configuration first.

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.

The Displays I want to use are the Innolux G101ICE-LH2 on each LVDS channel (1x at LVDS0 and 1x at LVDS1).

Here are the corresponding resolution and timing Requirements:

Summary

Resolution: 1280 x 800
Refresh rate: 60 Hz
Pixel clock: 71.1 MHzHActive: 1280
HFrontPorch: 120
HBackPorch: 32
HSyncLen: 8VActive: 800
VFrontPorch: 7
VBackPorch: 10
VSyncLen: 6Sync polarity: HSYNC = HIGH, VSYNC = HIGH
DE-Only: de-active = <1>;

The Torizon Version I am using is the Torizon OS 7.4.0

In dual channel mode I get now a Picture on both LCDs, but it looks like two ripped Pictures of one single chanel LCD. What im looking for is a setting to get into a splitted LVDS mode to drive the Indipendent LCDs properly.

Best regards,
Juliander

Thank you for the detailed specifications! I understand you want to drive two independent displays (Innolux G101ICE-LH2) - one on LVDS0 and one on LVDS1 - rather than using dual-channel mode for a single display.

Current Issue Analysis

The behavior you’re experiencing is typical of dual-channel LVDS mode, where both channels work together to drive a single display with higher bandwidth (1). What you need is split mode to drive two independent displays.

SMARC i.MX8M Plus LVDS Configuration

Based on the available overlays for SMARC i.MX8M Plus in Torizon OS 7.4.0, the standard overlay is (1):

  • toradex-smarc-imx8mp_panel-lvds-dual-channel-1080p_overlay.dtbo (downstream only)

However, this overlay is designed for dual-channel mode (single display), not split mode (two independent displays).

Custom Device Tree Overlay Required

For your specific use case with two independent 1280x800 displays, you’ll need to create a custom device tree overlay. Based on the community discussion about LVDS configurations (2), you can configure individual LVDS channels.

Here’s the approach you should take:

1. Create Custom Overlay Structure

You’ll need to configure two separate LVDS channels with your display timings:

&ldb {
    status = "okay";
    
    lvds-channel@0 {
        reg = <0>;
        fsl,data-mapping = "spwg";
        fsl,data-width = <18>;
        status = "okay";
        
        display-timings {
            native-mode = <&timing0>;
            timing0: timing0 {
                clock-frequency = <71100000>;
                hactive = <1280>;
                vactive = <800>;
                hfront-porch = <120>;
                hback-porch = <32>;
                hsync-len = <8>;
                vfront-porch = <7>;
                vback-porch = <10>;
                vsync-len = <6>;
                hsync-active = <1>;
                vsync-active = <1>;
                de-active = <1>;
                pixelclk-active = <1>;
            };
        };
    };
    
    lvds-channel@1 {
        reg = <1>;
        fsl,data-mapping = "spwg";
        fsl,data-width = <18>;
        status = "okay";
        
        display-timings {
            native-mode = <&timing1>;
            timing1: timing1 {
                clock-frequency = <71100000>;
                hactive = <1280>;
                vactive = <800>;
                hfront-porch = <120>;
                hback-porch = <32>;
                hsync-len = <8>;
                vfront-porch = <7>;
                vback-porch = <10>;
                vsync-len = <6>;
                hsync-active = <1>;
                vsync-active = <1>;
                de-active = <1>;
                pixelclk-active = <1>;
            };
        };
    };
};

(2)

2. Data Mapping Considerations

The Apalis iMX6 datasheet shows LVDS color mapping options (3). You may need to experiment with different fsl,data-mapping values:

  • "spwg" (VESA format)
  • "jeida" (JEIDA format)

3. Implementation Steps

  1. Create the custom overlay with the structure above
  2. Apply the overlay using TorizonCore Builder (1)
  3. Test different data mapping formats if colors appear incorrect (2)

Alternative Approach: Single LVDS Channel

If you want to test with just LVDS1 first, you can disable LVDS0 and configure only LVDS1 (2):

&ldb {
    status = "okay";
    
    lvds-channel@0 {
        status = "disabled";
    };
    
    lvds-channel@1 {
        reg = <1>;
        fsl,data-mapping = "spwg";
        fsl,data-width = <18>;
        status = "okay";
        /* Add your timing configuration here */
    };
};

(2)

Next Steps

  1. Create a custom device tree overlay with the configuration above
  2. Deploy it using the Device Tree Overlays on Torizon process (1)
  3. Test with one display first, then enable both channels

The key difference from dual-channel mode is configuring each LVDS channel independently rather than as a combined interface for a single display.

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.

@ToradexAI Can you tell me what changes I have to make to get into LVDS split mode?

Based on the available documentation, here are the specific changes needed to configure LVDS split mode on your SMARC i.MX8M Plus:

Key Configuration Changes for Split Mode

1. Disable Dual-Channel Mode

Remove or disable the fsl,dual-channel; property from your LDB configuration (1). This property forces both channels to work together for a single display.

2. Configure Individual LVDS Channels

You need to configure each LVDS channel independently. Based on the color mapping documentation (1), here’s the structure:

&ldb2 {
    status = "okay";
    /* Remove fsl,dual-channel; property for split mode */
    
    lvds-channel@0 {
        fsl,data-mapping = "spwg";
        fsl,data-width = <18>;
        status = "okay";
        
        port@1 {
            reg = <1>;
            lvds0_out: endpoint {
                remote-endpoint = <&panel_lvds0_in>;
            };
        };
    };
    
    lvds-channel@1 {
        fsl,data-mapping = "spwg";
        fsl,data-width = <18>;
        status = "okay";
        
        port@1 {
            reg = <1>;
            lvds1_out: endpoint {
                remote-endpoint = <&panel_lvds1_in>;
            };
        };
    };
};

(1)

3. Define Separate Panel Nodes

Create two independent panel nodes for your displays (1):

panel_lvds0: panel-lvds0 {
    compatible = "panel-lvds";
    backlight = <&backlight>;
    
    data-mapping = "jeida-18";
    width-mm = <216>;
    height-mm = <135>;
    
    panel-timing {
        clock-frequency = <71100000>;
        hactive = <1280>;
        vactive = <800>;
        hfront-porch = <120>;
        hsync-len = <8>;
        hback-porch = <32>;
        vfront-porch = <7>;
        vsync-len = <6>;
        vback-porch = <10>;
        hsync-active = <1>;
        vsync-active = <1>;
        pixelclk-active = <0>;
    };
    
    port {
        panel_lvds0_in: endpoint {
            remote-endpoint = <&lvds0_out>;
        };
    };
};

panel_lvds1: panel-lvds1 {
    compatible = "panel-lvds";
    backlight = <&backlight>;
    
    data-mapping = "jeida-18";
    width-mm = <216>;
    height-mm = <135>;
    
    panel-timing {
        clock-frequency = <71100000>;
        hactive = <1280>;
        vactive = <800>;
        hfront-porch = <120>;
        hsync-len = <8>;
        hback-porch = <32>;
        vfront-porch = <7>;
        vsync-len = <6>;
        vback-porch = <10>;
        hsync-active = <1>;
        vsync-active = <1>;
        pixelclk-active = <0>;
    };
    
    port {
        panel_lvds1_in: endpoint {
            remote-endpoint = <&lvds1_out>;
        };
    };
};

(1)

4. Color Mapping Configuration

The documentation shows valid combinations for color mapping (1):

fsl,data-mapping fsl,data-width data-mapping (panel-lvds node)
spwg 18 jeida-18
spwg 24 vesa-24
jeida 24 jeida-24

For your Innolux G101ICE-LH2 displays, start with spwg mapping and jeida-18 data mapping (1).

5. Implementation Steps

  1. Create a custom device tree overlay with the above configuration
  2. Deploy using TorizonCore Builder following the Device Tree Overlays process (2)
  3. Test each display independently by enabling one channel at a time
  4. Adjust color mapping if needed based on display output quality

The key difference from your current dual-channel setup is removing the fsl,dual-channel; property and configuring each LVDS channel as an independent display controller rather than as a combined interface.

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 @koelblj,

The AI is incorrect here.
The LVDS output of the i.MX8MP does not support two independent displays.

I recommend that you take a look at the i.MX8MP reference manual from NXP.
Specifically section 13.8.2 Functional Description, which describes which modes the LVDS output can operate.
Only a single display, either single-channel or dual-channel, can be used via the LVDS output from the SoC.

Using channel 0 or channel 1 should be possible for a single-channel display, however in the case of the Toradex SMARC iMX8MP, if using channel 1, the DSI output is unavailable.
This would limit options for multiple display configurations.
Therefore, when using a single-channel display, the use of channel 0 would give the most flexibility.

A possible alternative would be to use the following configuration:

  • 1x Single-channel LVDS display on LVDS Channel 0
  • 1x DSI to LVDS converter connected to the MIPI DSI output

For the DSI to LVDS converter, we have the following example implementation:

This adapter’s Altium design is freely available and for testing it is directly compatible with the Toradex SMARC Evaluation Board.

Best Regards,
Bruno

Hello @bruno.tx ,

Thank you for your answer. Then I will try to drive the second Display over DSI. The SMARC Eval Board and the mentioned DSI to LVDS Adapter are already to my Side and ready to get tested. I´ll let you know when I have succesfully operated both Displays (1xLVDS0 and 1xDSI).

Greetings,
Juliander

1 Like

@bruno.tx Your Solution works as described. Both Displays run now since yesterday Indipendently. Thank you for your Help.

Greetings,

Juliander

Hello @koelblj,

That is good to know, thanks for the update.

Best Regards,
Bruno