AnsweredAssumed Answered

VGA & LVDS screens together

Question asked by FTO on May 31, 2013
Latest reply on Jun 9, 2013 by MaxTsai
Branched to a new discussion

Hi all,

 

We want to display data on two screens at the same time on Linux, one connected to a LVDS display, and one connected to a VGA screen, with our custom iMX53 board. But we do not succeed yet.

 

 

Displays have different timings, so we think we need to use the two DI separately.
VGA is necessarily linked to DI1, so we choose to use LVDS1 (where is linked our second display in hardware) in dual mode with DI0 source.

It seems to be the only way to display DI0 to LVDS1 and LVDS0 signals are not connected anyway.

 


We use VGA-XGA video mode for VGA display and a custom video mode for the LVDS display :

{
  /* 640x480 @ 60 Hz 25M pixel clk */
  "PRIMEVIEW-PD050VL1", 60, 640, 480, 40000,
  46, 18,
  33, 10,
  96, 2,
  0, // sync
  FB_VMODE_NONINTERLACED, // vmode
  FB_MODE_IS_DETAILED, // flag
}

Timing parameters are based on screen datasheet, but not 100% sure what sync, vmode and flag should be.

 

 

With this and the following kernel command line

console=ttymxc0,115200 consoleblank=0 video=mxcdi1fb:GBR24,VGA-XGA vga di0_primary video=mxcdi0fb:RGB666,PRIMEVIEW-PD050VL1,bpp=32 ldb=dual,di=0,ch0_map=SPWG,ch1_map=SPWG

and after unblanking VGA, we can observe that

  1. LVDS displays an stretched Tux (larger width only) on 1/3 of the screen width. Remaining 2/3 are junk.
  2. VGA displays a strange Tux, like if some little vertical bands have been cut and other parts glued back together. Really difficult to describe.

When drawing a checkerboard

  1. LVDS displays an stretched checkerboard (larger width only) on 1/3 of the screen width. I see 8 squares plus half one (actually rectangles) instead of 64 in x direction, and 48 as expected in y direction. Remaining 2/3 are junk.
  2. VGA displays a checkerboard with variable squares width (actually rectangles).

Moreover, if we use ldb=off instead of dual mode, VGA is just fine.

 

 

I wish to precise that the application writes correct data on fb0 and fb1, the question is NOT about it. Also we use NEITHER gstreamer NOR X-server at all. Data are drawn directly to framebuffers memory through IPU ioctls. The problem is the same with direct write to /dev/fb0 node.

The question is really about displaying the two framebuffers themselves on our two displays simultaneously.

 

 

Every documentation we read always return us to the same kernel command lines & co. So we have tried MANY combinations : di0_primary/di1_primary and turn on the other screen, add video mode also to ldb.c, try other video modes, try timings from PhytecBSP with the same LVDS, change LVDS cable, change LVDS screen, and so on...

 

 

Has anyone ever succeeded in this VGA/LVDS mix ?

Do you have an idea how to do it well ?

Outcomes