kernel 3.14.28, double lvds issue

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

kernel 3.14.28, double lvds issue

2,780 Views
angelo_d
Senior Contributor I

Dear all,

i am using double LVDS in a similar sabre-auto board. Upgrading from 3.10.17 to 3.14.28, double (using separate fb's) LVDS (one fb for each LVDS) seems corrupted.

In particular

1) seems kernel bootargs as

setenv bootargs 'console=ttymxc3,115200 rootwait root=/dev/sda2 \

video=mxcfb0:dev=ldb,1024x768,if=RGB666,bpp=16 \

video=mxcfb1:off video=mxcfb2:dev=ldb,1280x800,if=RGB666,bpp=16'

are not taking effect.

2) Even if i used different IPU for each LVDS channel, LVDS1 at Kernel init phase, seems to impact previously inited LVDS0 destroying the image content, and adding flickering.

There are no errors in dmesg, /sys/class/graphic/fb modes seems correct.

[user@localhost ~]$ cat /sys/class/graphics/fb0/mode

U:1024x768p-65

[user@localhost ~]$ cat /sys/class/graphics/fb2/mode

U:1280x800p-52

Is there any known issue with ldb and kernel 3.14 ?

Thanks,

Best regards

angelo

Labels (2)
5 Replies

777 Views
angelo_d
Senior Contributor I

Hi Alejandro,

well, yes, something seems changed at clock level, can't check right now, my solution works and had no time to go deeper. Will check eventually/hopefully in the near future.

Angelo,

there are boolean properties (see ldb.c):

dual-mode

split-mode

default should separate mode.

See also the new "display-timings" entries in the device tree, they allow to assign a display to a lvds port, setting proper display options.

0 Kudos

777 Views
angelos
Contributor II

Hello,

I'm using 3.14.28 too and I noticed that single/separate mode are no more supported.

I mean, in ldb.c there's no more references to these operational modes - how did you configure 2 lvds ports to display 2 different images?

Thanks in advance.

Regards,

Angelo

0 Kudos

777 Views
angelo_d
Senior Contributor I

Hi,

some more info:

blanking one of the LVDS displays impact and distort the other LVDS display.  This the effects:

LVDS0 is on IPU1-DI1, uses fb0 and fb1(overlay)

LVDS1 is on IPU2-DI1, uses fb2 and fb3(overlay)

1) blank and unblank LVDS0 (mapped to fb0), produces blank on both displays when blanking, correct image on fb0 and stretch second display to a double width image (on fb2 / LVDS1) when unblanking.

bash-3.2# echo 1 > /sys/class/graphics/fb0/blank

bash-3.2# echo 0 > /sys/class/graphics/fb0/blank

mxc_sdc_fb fb.25: 1024x768 h_sync,r,l: 60,220,40  v_sync,l,u: 10,21,7 pixclock=65002000 Hz

angelo: ipu_init_sync_panel(), rem = 19984000

angelo: ipu_init_sync_panel(), rem = 19984000

angelo: ipu_init_sync_panel(), ldb_di0_clk bc028780, ldb_di1_clk bc028800, di_parent bc028780

imx-ipuv3 2400000.ipu: use special clk parent

imx-ipuv3 2400000.ipu: disp=1, pixel_clk=65002000 75428571 parent=75428571 div=1

angelo: ldb_enable() : what mode we are ? ldb->spl_mode 0, ldb->dual_mode 0, chno 0

2) blank and unblank LVDS1 (mapped to fb2), produces sometime a warning on unblank :

echo 1 > /sys/class/graphics/fb2/blank

mxc_sdc_fb fb.26: MXCFB_WAIT_FOR_VSYNC: timeout 0

And sometime correct image on fb2 (correct width now) but corrupt first display with garbage and horizontal and vertical lines (on fb2 / LVDS1).

bash-3.2# echo 0 > /sys/class/graphics/fb2/blank

mxc_sdc_fb fb.26: 1280x800 h_sync,r,l: 156,2,2  v_sync,l,u: 19,2,2 pixclock=71103000 Hz

angelo: ipu_init_sync_panel(), rem1 = 42279000

angelo: ipu_init_sync_panel(), rem2 = 42279000

angelo: ipu_init_sync_panel(), ldb_di0_clk bc028780, ldb_di1_clk bc028800, di_parent bc028800

imx-ipuv3 2800000.ipu: use special clk parent

imx-ipuv3 2800000.ipu: disp=1, pixel_clk=71103000 75428571 parent=75428571 div=1

angelo: ldb_enable() : what mode we are ? ldb->spl_mode 0, ldb->dual_mode 0, chno 1

0 Kudos

777 Views
angelo_d
Senior Contributor I

I finally found a way to avoid the issue, that seems related to the clocks applied to the ldb serializer interface.

For some reason, skipping this line for first display, allow to have applications

displayed correctly ion both displays.

linux-imx6/drivers/video/mxc/ldb.c (kernel 3.14.28)

serial_clk = ldb->spl_mode ? chan.vm.pixelclock * 7 / 2 :

            chan.vm.pixelclock * 7;

clk_set_rate(ldb_di_sel_parent, serial_clk);  // <<<

I am investigating further.

Regards

angelo

777 Views
alejandrolozan1
NXP Employee
NXP Employee

Hi Angelo,

Thanks for sharing your solution. It seems that the clock parent or divider is changed making one of the lvds panels to fail.

Have you checked that the frequency remains with no change after that line in both displays?

/Alejandro

0 Kudos