Colibri iMX8x+"iris-v2"+LVDS and imx8qxp-colibri-iris-v2.dtb

I have hardware:

  • colibri IMX8x
  • iris 2.0
  • lvds display 7" 800x480

I download default image 5.4 for colibri IMX8x and update overlays.txt for 7" LVDS

cd /boot
echo fdt_overlays=colibri-imx8x_parallel-rgb-lvds_overlay.dtbo colibri-imx8x_atmel-mxt-connector_overlay.dtbo display-edt7_overlay.dtbo > overlays.txt

the display works fine

I paid attention to a small detail , default DTB is imx8qxp-colibri-eval-v3.dtb

My board is “iris 2.0”
I change DTB to imx8qxp-colibri-iris-v2.dtb
the display is not working

# dmesg |grep drm
[    2.336174] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.343493] [drm] No driver support for vblank timestamp query.
[    2.356860] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops dpu_bliteng_ops)
[    2.365754] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops dpu_crtc_ops)
[    2.373595] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops dpu_crtc_ops)
[    2.611126] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.617827] [drm] No driver support for vblank timestamp query.
[    2.623892] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops dpu_bliteng_ops)
[    2.632391] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops dpu_crtc_ops)
[    2.639981] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops dpu_crtc_ops)
[    2.960957] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.967658] [drm] No driver support for vblank timestamp query.

options:

  • be glad that it works on imx8qxp-colibri-eval-v3.dtb (do not change anything)
  • understand the problem

what is the difference between eval-v3 vs iris 2.0 ?

Compare DT “eval-v3” vs iris-v2
very little difference

HTML with colors: compare.html (47.0 KB generator:WinMerge)

*** tmp_eval-v3.txt	Tue Oct 12 14:22:26 2021
--- tmp_iris-v2.txt	Tue Oct 12 14:22:38 2021
***************
*** 1,20 ****
! # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-eval-v3.dts"
  # 1 "<built-in>"
  # 1 "<command-line>"
! # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-eval-v3.dts"
  
  
  
  
  
  /dts-v1/;
  
  # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 1
  
  
  
  
  
  # 1 "./scripts/dtc/include-prefixes/dt-bindings/pwm/pwm.h" 1
  # 7 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 2
  # 1 "arch/arm64/boot/dts/freescale/imx8qxp.dtsi" 1
--- 1,20 ----
! # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-iris-v2.dts"
  # 1 "<built-in>"
  # 1 "<command-line>"
! # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-iris-v2.dts"
  
  
  
  
  
  /dts-v1/;
  
  # 1 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 1
  
  
  
  
  
  # 1 "./scripts/dtc/include-prefixes/dt-bindings/pwm/pwm.h" 1
  # 7 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 2
  # 1 "arch/arm64/boot/dts/freescale/imx8qxp.dtsi" 1
***************
*** 6217,6266 ****
    compatible = "fsl,imx8-mu1-vpu-m0";
    reg = <0x1020000 0x20000>;
    reg-csr = <0x1050000 0x10000>;
    interrupts = <0 470 4>;
    fsl,vpu_ap_mu_id = <17>;
    fw-buf-size = <0x200000>;
    rpc-buf-size = <0x80000>;
    print-buf-size = <0x80000>;
   };
  };
  # 9 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 2
  
  / {
   model = "Toradex Colibri iMX8QXP Module";
   compatible = "toradex,colibri-imx8x", "fsl,imx8qxp";
  };
! # 9 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-eval-v3.dts" 2
! # 1 "arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi" 1
  
  
  
  
  
  / {
   aliases {
    rtc0 = &rtc_i2c;
-   rtc1 = &rtc;
-  };
- 
- 
-  clk16m: clock-16mhz-fixed {
-   compatible = "fixed-clock";
-   #clock-cells = <0>;
-   clock-frequency = <16000000>;
   };
  
   extcon_usbc_det: usbc_det {
    compatible = "linux,extcon-usb-gpio";
    debounce = <25>;
    id-gpio = <&lsio_gpio5 9 0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_usbc_det>;
   };
  
   reg_3v3: regulator-3v3 {
    compatible = "regulator-fixed";
    regulator-name = "3.3V";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
   };
--- 6217,6264 ----
    compatible = "fsl,imx8-mu1-vpu-m0";
    reg = <0x1020000 0x20000>;
    reg-csr = <0x1050000 0x10000>;
    interrupts = <0 470 4>;
    fsl,vpu_ap_mu_id = <17>;
    fw-buf-size = <0x200000>;
    rpc-buf-size = <0x80000>;
    print-buf-size = <0x80000>;
   };
  };
  # 9 "arch/arm64/boot/dts/freescale/imx8qxp-colibri.dtsi" 2
  
  / {
   model = "Toradex Colibri iMX8QXP Module";
   compatible = "toradex,colibri-imx8x", "fsl,imx8qxp";
  };
! # 9 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-iris-v2.dts" 2
! # 1 "arch/arm64/boot/dts/freescale/imx8x-colibri-iris-v2.dtsi" 1
! 
! 
! 
! 
! 
! # 1 "arch/arm64/boot/dts/freescale/imx8x-colibri-iris.dtsi" 1
  
  
  
  
  
  / {
   aliases {
    rtc0 = &rtc_i2c;
   };
  
   extcon_usbc_det: usbc_det {
    compatible = "linux,extcon-usb-gpio";
    debounce = <25>;
    id-gpio = <&lsio_gpio5 9 0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_usbc_det>;
   };
  
   reg_3v3: regulator-3v3 {
    compatible = "regulator-fixed";
    regulator-name = "3.3V";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
   };
***************
*** 6291,6409 ****
  &fec1 {
   status = "okay";
  };
  
  
  &i2c1 {
   status = "okay";
  
  
   rtc_i2c: rtc@68 {
    compatible = "st,m41t0";
    reg = <0x68>;
   };
  
  
  
- 
      tca8418@34 {
      compatible = "ti,tca8418";
      reg = <0x34>;
      interrupt-parent = <&lsio_gpio3>;
      interrupts = <21 3>;
      keypad,num-rows = <5>;
      keypad,num-columns = <7>;
      linux,keymap = <
! # 110 "arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi"
          ((((0x03) & 0xFF) << 24) | (((0x02) & 0xFF) << 16) | ((11) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x03) & 0xFF) << 16) | ((10) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x04) & 0xFF) << 16) | ((9) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x05) & 0xFF) << 16) | ((8) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x06) & 0xFF) << 16) | ((7) & 0xFFFF))
  
  
  
          ((((0x04) & 0xFF) << 24) | (((0x01) & 0xFF) << 16) | ((14) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x02) & 0xFF) << 16) | ((6) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x03) & 0xFF) << 16) | ((5) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x04) & 0xFF) << 16) | ((4) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x05) & 0xFF) << 16) | ((3) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x06) & 0xFF) << 16) | ((2) & 0xFFFF))
          >;
      };
  
  
  };
- 
- &jpegdec {
-  status = "okay";
  };
  
! &jpegenc {
!  status = "okay";
  };
  
  
! &lpspi2 {
!  mcp2515: can@0 {
!   compatible = "microchip,mcp2515";
!   pinctrl-names = "default";
!   pinctrl-0 = <&pinctrl_can_int>;
!   reg = <0>;
!   clocks = <&clk16m>;
!   interrupt-parent = <&lsio_gpio3>;
!   interrupts = <13 2>;
!   spi-max-frequency = <10000000>;
    status = "okay";
   };
  
! 
! 
! 
!  spidev0: spidev@0 {
!   status = "disabled";
!  };
  };
  
  
  &lpuart0 {
   status = "okay";
  };
  
  
  &lpuart2 {
   status = "okay";
  };
  
  
  &lpuart3 {
   status= "okay";
  };
  
  &lsio_gpio3 {
  
  
  
  
  
  
   pad-wakeup = <157 6 10>;
   pad-wakeup-num = <1>;
   };
  
  
  &pwm0 {
   status = "okay";
  };
  
  
  &pwm1 {
   status = "okay";
  };
  
  
  &pwm2 {
   status = "okay";
  };
  
  
  &usb3phynop1 {
--- 6289,6427 ----
  &fec1 {
   status = "okay";
  };
  
  
  &i2c1 {
   status = "okay";
  
  
   rtc_i2c: rtc@68 {
    compatible = "st,m41t0";
    reg = <0x68>;
   };
  
  
  
      tca8418@34 {
      compatible = "ti,tca8418";
      reg = <0x34>;
      interrupt-parent = <&lsio_gpio3>;
      interrupts = <21 3>;
      keypad,num-rows = <5>;
      keypad,num-columns = <7>;
      linux,keymap = <
! # 101 "arch/arm64/boot/dts/freescale/imx8x-colibri-iris.dtsi"
          ((((0x03) & 0xFF) << 24) | (((0x02) & 0xFF) << 16) | ((11) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x03) & 0xFF) << 16) | ((10) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x04) & 0xFF) << 16) | ((9) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x05) & 0xFF) << 16) | ((8) & 0xFFFF))
          ((((0x03) & 0xFF) << 24) | (((0x06) & 0xFF) << 16) | ((7) & 0xFFFF))
  
  
  
          ((((0x04) & 0xFF) << 24) | (((0x01) & 0xFF) << 16) | ((14) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x02) & 0xFF) << 16) | ((6) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x03) & 0xFF) << 16) | ((5) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x04) & 0xFF) << 16) | ((4) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x05) & 0xFF) << 16) | ((3) & 0xFFFF))
          ((((0x04) & 0xFF) << 24) | (((0x06) & 0xFF) << 16) | ((2) & 0xFFFF))
          >;
      };
+ };
  
+ &iomuxc { pinctrl-names = "default";
+  pinctrl-0 = <&pinctrl_gpio_iris>;
  
+  gpio {
+   pinctrl_gpio_iris: gpio-iris {
+    fsl,pins = <
+     169 4 0x20
+     5 4 0x20
+     82 4 0x20
+     85 4 0x20
+     84 4 0x20
+     44 4 0x06000020
+     83 4 0x20
+     157 4 0x06700041
+   >;
    };
   };
  
!  uart {
!   pinctrl_uart1_forceoff: uart1_forceoff {
!    fsl,pins = <
!     161 4 0x20
!    >;
    };
  
+   pinctrl_uart23_forceoff: uart23_forceoff {
+    fsl,pins = <
+     123 4 0x20
+    >;
+   };
+  };
+ };
  
! &jpegdec {
   status = "okay";
  };
  
! &jpegenc {
!  status = "okay";
  };
  
  
  &lpuart0 {
   status = "okay";
  };
  
  
  &lpuart2 {
   status = "okay";
  };
  
  
  &lpuart3 {
   status= "okay";
  };
  
  &lsio_gpio3 {
  
  
  
  
  
  
   pad-wakeup = <157 6 10>;
   pad-wakeup-num = <1>;
+ 
+ 
+ 
+ 
+ 
+ 
+  lvds_tx_on {
+   gpio-hog;
+   gpios = <18 0>;
+   output-high;
+  };
  };
  
  
+ 
  &pwm0 {
   status = "okay";
  };
  
  
  &pwm1 {
   status = "okay";
  };
  
  
  &pwm2 {
   status = "okay";
  };
  
  
  &usb3phynop1 {
***************
*** 6434,6457 ****
  
  &usdhc2 {
   status = "okay";
  };
  
  &vpu_decoder {
   status = "okay";
  };
  
  &vpu_encoder {
   status = "okay";
  };
  
  &vpu_lpcg {
   status = "okay";
  };
! # 10 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-eval-v3.dts" 2
  
  / {
!  model = "Toradex Colibri iMX8QXP on Colibri Evaluation Board V3";
!  compatible = "toradex,colibri-imx8x-eval-v3",
         "toradex,colibri-imx8x",
         "fsl,imx8qxp";
  };
--- 6452,6516 ----
  
  &usdhc2 {
   status = "okay";
  };
  
  &vpu_decoder {
   status = "okay";
  };
  
  &vpu_encoder {
   status = "okay";
  };
  
  &vpu_lpcg {
   status = "okay";
  };
! # 7 "arch/arm64/boot/dts/freescale/imx8x-colibri-iris-v2.dtsi" 2
! 
! / {
!  reg_3v3_vmmc: regulator-3v3-vmmc {
!   compatible = "regulator-fixed";
!   pinctrl-names = "default";
!   pinctrl-0 = <&pinctrl_enable_3v3_vmmc>;
!   regulator-name = "3v3_vmmc";
!   regulator-min-microvolt = <3300000>;
!   regulator-max-microvolt = <3300000>;
!   gpio = <&lsio_gpio0 31 0>;
!   startup-delay-us = <100>;
!   enable-active-high;
!  };
! };
! 
! &iomuxc {
!  pinctrl-names = "default";
!  pinctrl-0 = <&pinctrl_lvds_converter &pinctrl_gpio_iris>;
! 
!  usdhc {
!   pinctrl_enable_3v3_vmmc: enable_3v3_vmmc {
!    fsl,pins = <
!     88 4 0x20
!    >;
!   };
!  };
! };
! 
! 
! &usdhc2 {
!  pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
!  sd-uhs-sdr12;
!  sd-uhs-sdr25;
!  sd-uhs-sdr50;
!  sd-uhs-sdr104;
!  cap-power-off-card;
!  /delete-property/ keep-power-in-suspend;
!  vmmc-supply = <&reg_3v3_vmmc>;
!  status = "okay";
! };
! # 10 "arch/arm64/boot/dts/freescale/imx8qxp-colibri-iris-v2.dts" 2
  
  / {
!  model = "Toradex Colibri iMX8QXP on Colibri Iris V2 Board";
!  compatible = "toradex,colibri-imx8x-iris-v2",
         "toradex,colibri-imx8x",
         "fsl,imx8qxp";
  };


fdt_overlays:
fdt_overlays=colibri-imx8x_parallel-rgb-lvds_overlay.dtbo colibri-imx8x_atmel-mxt-connector_overlay.dtbo display-edt7_overlay.dtbo

I added differences to “eval-v3” DT

LVDS display stop working after add to “arch/arm64/boot/dts/freescale/imx8x-colibri-iris.dtsi”

&lsio_gpio3 {
 lvds_tx_on {
   gpio-hog;
   gpios = <18 0>;
   output-high;
  };
  };

part of “colibri-imx8x_parallel-rgb-lvds_overlay.dts”

&lsio_gpio3 {
        /* This turns the LVDS transceiver on */
         LVDS_PWRDWN {
                gpio-hog;
                gpios = <18 GPIO_ACTIVE_HIGH>;
                output-high;
                line-name = "LVDS_PWRDWN";
        };
};

I’m just learning DT , the same GPIO3.18 in two places , this is a problem ?

Hi @MariusM ,

I noticed a small mistake in your fdt_overlays line:

If you follow the link below, you see all the overlays you need for the LVDS screen on the Colibri iMX8X.

Device Tree Overlays | LVDS

There you can see that the 3 overlays you need are:

colibri-imx8x_parallel-rgb-lvds_overlay.dtbo
colibri-imx8x_atmel-mxt-connector_overlay.dtbo
display-dpi-lt170410_overlay.dtbo

The last one is missing in your file. You can remove “display-edt7_overlay.dtbo” and place the otherone instead.

Let me know if it works now.

Best Regards
Kevin

in my first post fdt_overlays consists of:

  1. colibri-imx8x_parallel-rgb-lvds_overlay.dtbo
  2. colibri-imx8x_atmel-mxt-connector_overlay.dtbo
  3. display-edt7_overlay.dtbo

ad.1 Enable the parallel RGB interface on Colibri iMX8X and the LVDS tranceiver on Iris v2.0
ad.2 Atmel MXT touchscreen for boards with TS connector. Supports the 7 inch and 10 inch display orderable at Toradex. My display does not have a touch panel, it is unnecessary in my case
ad.3 EDT7 display with a resolution of 800x480 pixel There is only resolution and timing in the file

enough:
fdt_overlays=colibri-imx8x_parallel-rgb-lvds_overlay.dtbo display-lt161010_overlay.dtbo
or
fdt_overlays=colibri-imx8x_parallel-rgb-lvds_overlay.dtbo display-edt7_overlay.dtbo

I am inquisitive :smile:

I would like to understand why a file imx8qxp-colibri-iris-v2.dtb dedicated to my “iris 2.0” and my module “imx8qxp” do not work properly

Maybe my display is strange Mitsubishi AA070MC01 ?

Hi @MariusM ,

your analysis of the different overlays is correct.

I recommend you give the following articles a quick read. They show a lot of interesting information about device trees and their customization.

Device Tree Customization
Device Tree Customization (Examples)

If you use a third-party display, there will be changes needed to either the device tree or the overlay for sure.

Best Regards
Kevin