How do you use the different "display-timings" entries from a dtb inside of uboot and/or the kernel

I’m trying to figure out the linkage between the dtb “display-timings” entries and enabling them via uboot and/or the kernel. We have a display we’ve been using on a different platform and I’d like to test it out using the colibri eval board (with imx7d installed) before we go making interface boards. It doesn’t match any of the entries in the imx7-colibri.dtsi file, so I need to add another (the max clock is only 15M for our board). I can just change the native mode to point to the new entry, but it would sure be great if I could just set a uboot var (vidargs/videomode), or even change the mode via some sort of sysfs write (fb modes/fbset?) We’ve got it wired up on the breakout connector.

This is the display

Thanks!

I know you can set native to make it work, but it’s still interesting why there are multiple timing entries?

If you have a Colibri iMX7 512MB version you can flash WinCE and test display parameters using eBoot settings..

What kind of “multiple timing entries” you are talking about?

Inside of imx7d-colibri.dtsi exists a few “display-timings” entries, which seem to be selected using the “native-mode” entry. It seems strange to have to change the native-mode entry and either recompile the device tree and load or do some sort of uboot magic to change the dtb to activate the different display-timings. Is there a way to select one using a uboot variable and/or something else via the kernel command line? I’ve got a couple of different displays I’m testing, and it would be nice to simply change to them. Here’s a snippet from that file:

&lcdif {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat
             &pinctrl_lcdif_ctrl>;
    display = <&display0>;
    status = "disabled";

    display0: lcd-display {
        bits-per-pixel = <16>;
        bus-width = <18>;

        display-timings {
            native-mode = <&timing_vga>;

            /* Standard VGA timing */
            timing_vga: 640x480 {
                clock-frequency = <25175000>;
                hactive = <640>;
                vactive = <480>;
                hback-porch = <40>;
                hfront-porch = <24>;
                vback-porch = <32>;
                vfront-porch = <11>;
                hsync-len = <96>;
                vsync-len = <2>;

                de-active = <1>;
                hsync-active = <0>;
                vsync-active = <0>;
                pixelclk-active = <0>;
            };

            /* WVGA Timing, e.g. EDT ET070080DH6 */
            timing_wvga: 800x480 {
                clock-frequency = <33260000>;
                hactive = <800>;
                vactive = <480>;
                hback-porch = <216>;
                hfront-porch = <40>;
                vback-porch = <35>;
                vfront-porch = <10>;
                hsync-len = <128>;
                vsync-len = <2>;

                de-active = <1>;
                hsync-active = <0>;
                vsync-active = <0>;
                pixelclk-active = <0>;
            };

Thanks!

Please check this article for details.

Thanks…I’ve read that one a bunch of times. The line in there that says:

To support a specific display we recommend using the device tree to specify the exact display resolution and timings while also specifying the native-modeproperty. See the carrier board device tree file, e.g.arch/arm/boot/dts/imx7-colibri-eval-v3.dtsi`

Is what I do to get my display operational. Anyhow, just thought there was some sort of use of those different timing blocks in a simple fashion, but it doesn’t seem so. Once my display is all working, I’ll just have that one in the device tree anyhow, so it’s all good.

Thank you.