Ixora Carrier Board v1.1, LVDS 2 port

Hi all.

The display does not output normally.
Therefore, it is necessary to review whether the settings are correct in the bootloader and the kernel.

Below are the system information and tasks.

  • Hardware system

Module: Apalis iMX6, Ixora Carrier Board v1.1

LVDS 2 port : LA123WF4-SL05, 12.3”WU (1920 X RGB X 720) TFT- LCD

  • Operation system

boot2qt : Boot to Qt for Embedded Linux 2.3.4

bootloader: U-Boot 2016.11-dirty

kernel : Linux version 4.1.44-2.7.5+g18717e2

  • LCD timing

1279-image004.png

  • Device Tree of kernel, arch/arm/boot/dts/imx6qdl-apalis.dtsi

    mxcfb1: fb@0 {
    compatible = “fsl,mxc_sdc_fb”;

         disp_dev = "ldb";
    
         interface_pix_fmt = "RGB24";
    
         default_bpp = <24>;
    
         int_clk = <0>;
    
         late_init = <0>;
    
         status = "disabled";  // "okey" in arch/arm/boot/dts/imx6qdl-apalis-ixora-v1.1.dtsi
    

    };

    &ldb {
    status = “okay”;
    split-mode;
    // dual-mode;
    lvds-channel@0 {
    reg = <0>;
    fsl,data-mapping = “spwg”; /* “jeida”; */
    fsl,data-width = <24>;
    crtc = “ipu2-di1”;
    primary;
    status = “okay”;

     	display-timings {
     		native-mode = <&timing01>;
     		timing01: 1920x720 {
     		clock-frequency = <89400000>;
     		hactive = <1920>;
     		vactive = <720>;
     		hback-porch = <96>;
     		hfront-porch = <30>;
     		vback-porch = <3>;
     		vfront-porch = <3>;
     		hsync-len = <2>;
     		vsync-len = <2>;
     		};
     	};
     };
     lvds-channel@1 {
     	reg = <1>;
     	fsl,data-mapping = "spwg";
     	fsl,data-width = <24>;
     	crtc = "ipu1-di0";
     	status = "okay";
     	
     	display-timings {
     		timing02: 1920x720 {
     		clock-frequency = <89400000>;
     		hactive = <1920>;
     		vactive = <720>;
     		hback-porch = <96>;
     		hfront-porch = <30>;
     		vback-porch = <3>;
     		vfront-porch = <3>;
     		hsync-len = <2>;
     		vsync-len = <2>;
     		};
     	};
     };
    

    };

  • u-boot env

    vidargs=video=mxcfb0:dev=ldb,1920x720@60,if=RGB24, video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off

  • kernel log

    :

    [ 0.244330] MIPI DSI driver module loaded

    [ 0.244682] ldb 2000000.aips-bus:ldb@020e0008: split mode

    [ 0.244951] ldb 2000000.aips-bus:ldb@020e0008: split mode or dual mode, ignoring second output

    [ 0.245615] 20e0000.hdmi_video supply HDMI not found, using dummy regulator

    [ 0.247074] mxc_sdc_fb fb@0: registered mxc display driver ldb

    [ 0.262134] mxc_sdc_fb fb@0: 1920x720 h_sync,r,l: 2,30,96 v_sync,l,u: 2,3,3 pixclock=89405000 Hz

    [ 0.272800] imx-ipuv3 2800000.ipu: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)

    [ 0.306740] mxc_sdc_fb fb@0: 1920x720 h_sync,r,l: 2,30,96 v_sync,l,u: 2,3,3 pixclock=89405000 Hz

    [ 0.354510] Console: switching to colour frame buffer device 240x45

    [ 0.389237] mxc_sdc_fb fb@1: mxcfb1 is turned off!

    [ 0.389484] mxc_sdc_fb fb@2: mxcfb2 is turned off!

    [ 0.389720] mxc_sdc_fb fb@3: mxcfb3 is turned off!
    :

  • Run fbset of target

    root@b2qt-apalis-imx6:~# fbset

    mode “1920x720-60”

         # D: 89.405 MHz, H: 43.655 kHz, V: 59.966 Hz
    
         geometry 1920 720 1920 1440 24
    
         timings 11185 96 30 3 3 2 2
    
         accel false
    
         rgba 8/16,8/8,8/0,0/0
    

    endmode

Is there anything else to check?
Thanks.

Hi

I don’t see anything obvious.

Does changing the fsl,data-mapping to jeida help?

Could you describe what ‘The display does not output normally.’ means? Or could you attach a photo?

Max

Hi

  1. This is the screen of the problem.
    [upload|R3bsctw73pQ7c+zMtrpBaixvBNg=]

  2. This is a screen that should come out normally.
    [upload|WkTrJuwsMLRSK2XR7nIK2ux233Y=]

As you seem to have two displays, both do not work? Have you tried our regular stable BSP 2.7 based on the same Linux kernel?

Hi.
There was a problem with the pinmap.
Now the screen comes out, but two screens are displayed instead of one screen.

1.set to split-mode

  1. Timing
    clock-frequency = <89400000>;
    hactive = <1920>;
    vactive = <720>;
    hback-porch = <96>;
    hfront-porch = <30>;
    vback-porch = <3>;
    vfront-porch = <3>;
    hsync-len = <2>;
    vsync-len = <2>;
  

=> Two screens, pushed to the right.
[upload|iTB5UWODJk4u53ZkLPu2oc9W058=]

  1. Timing
clock-frequency = <44700000>;
hactive = <1920>;
vactive = <720>;
hback-porch = <48>;
hfront-porch = <15>;
vback-porch = <3>;
vfront-porch = <3>;
hsync-len = <1>;
vsync-len = <2>;

[upload|rG+3XcAg3JYwwXkVtnUpLsaifao=]

  1. If both of them operate in a single mode, the screen will not come out.

  2. Data mapping was done with “spwg”. (If you use “jeida”, the colors are strange.)

I have to come out on one screen. Can you help me with setting up?
Thank you.

Hi

It looks like your display is showing whatever is coming from LVDS Channel 0 on the left side of the screen and whatever is coming from LVDS Channel 1 on the right side.

However the i.MX6 split mode is generating data with the even pixels (0, 2, 4 …) on LVDS Channel 0 and the odd pixels (1, 3, 5 …) on LVDS Channel 1.

You should verify with your display supplier if that is true.

Max

Hi.
Thanks your advice.

You are right. The LCD outputs half of each channel.

How do I set it up?

Will I use dual-mode?

Hi

my LCD is dual display.

1292-dual.png

Hi

If your LCD really is able to display the data stream from two independent LVDS channels and you really want to have two independent displays with independent framebuffers then you can model this in the device tree and kernel command line as follows:

  • Remove or comment the two properties split-mode and dual-mode.
  • Configure the display timings of each of the two 960x1080 displays in lvds-channel@0 and lvds-channel@1.

e.g.

&ldb {
     status = "okay";
 //    split-mode;
 //      dual-mode;
     lvds-channel@0 {
         reg = <0>;
         fsl,data-mapping = "spwg"; /* "jeida"; */
         fsl,data-width = <24>;
         crtc = "ipu2-di1";
         primary;
         status = "okay";
         
         display-timings {
             native-mode = <&timing01>;
             timing01: 960x720 {
             clock-frequency = <44700000>;
             hactive = <960>;
             vactive = <720>;
             hback-porch = <48>;
             hfront-porch = <15>;
             vback-porch = <3>;
             vfront-porch = <4>;
             hsync-len = <1>;
             vsync-len = <1>;
             };
         };
     };
     lvds-channel@1 {
         reg = <1>;
         fsl,data-mapping = "spwg";
         fsl,data-width = <24>;
         crtc = "ipu1-di0";
         status = "okay";
         
         display-timings {
             native-mode = <&timing01>;
             timing01: 960x720 {
             clock-frequency = <44700000>;
             hactive = <960>;
             vactive = <720>;
             hback-porch = <48>;
             hfront-porch = <15>;
             vback-porch = <3>;
             vfront-porch = <4>;
             hsync-len = <1>;
             vsync-len = <1>;
             };
         };
     };
 };

And U-Boot vidargs:

vidargs=video=mxcfb0:dev=ldb,if=RGB24 video=mxcfb1:dev=ldb,if=RGB24 video=mxcfb2:off video=mxcfb3:off

This should give you two framebuffer devices, /dev/fb0 and /dev/fb2. /dev/fb0 probably shows the boot2qt application, the other is all black. You paint random pixels on it by e.g. cat /dev/urandom > /dev/fb2.

I believe (meaning I’m not very familiar with boot2qt) that boot2qt uses:

  • eglfs backend by default.
  • one Qt application can only use one framebuffer. i.e. to use the second framebuffer you will need a second Qt application which gets configured to use that second framebuffer.

Max