We are using two displays. The requirement is:
LVDS0 - fb0 and fb1
LVDS1 - fb2 and fb3
Kernel version : L3.0.35_4.1.0_130816_source
In SABREAUTO EVK, we tried with HDMI for 1st display and LVDS0 for 2nd display and it worked. But in our board, as per the requirement stated above, it does not work.
I run the following in SABREAUTO EVK and our board with the follwing results:
cat /proc/cmdline ; for i in /sys/class/graphics/fb?; do echo "------------ $i"; cat $i/name; cat $i/mode; cat $i/fsl_disp_*; done
in EVK:
console=ttymxc3,115200 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 enable_wait_mode=off arm_freq=800 nosmp root=/dev/mmcblk0p1 rootwait
------------ /sys/class/graphics/fb0
DISP3 BG
hdmi
2-layer-fb-bg
------------ /sys/class/graphics/fb1
DISP3 FG
overlay
2-layer-fb-fg
------------ /sys/class/graphics/fb2
DISP4 BG
D:1024x768p-60
ldb
2-layer-fb-bg
------------ /sys/class/graphics/fb3
DISP4 FG
overlay
2-layer-fb-fg
in our BOARD:
noinitrd console=ttymxc1,115200n8 video=mxcfb0:dev=ldb,LDB-JDIONE-16@51,if=RGB24,fbpix=RGB565 video=mxcfb2:dev=ldb,LDB-JDITWO-16@51,if=RGB24,fbpix=RGB565 ldb=sep0 enable_wait_mode=off arm_freq=800 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rootwait rw mtdparts=gpmi-nand:16m(boot),16m(kernel),1500m(rootfs)
------------ /sys/class/graphics/fb0
DISP3 BG
D:1920x720p-51
ldb
2-layer-fb-bg
------------ /sys/class/graphics/fb1
DISP3 FG
overlay
2-layer-fb-fg
------------ /sys/class/graphics/fb2
DISP3 BG - DI1
D:800x480p-51
ldb
1-layer-fb
root@freescale /$
LDB-JDIONE and LDB-JDITWO are defined in struct fb_videomode ldb_modedb[] in ldb.c.
We have removed hdmi code in our board. Here is the value of related strcuts:
static struct ipuv3_fb_platform_data sabr_fb_data[] = {
{ /*fb0*/
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "LDB-JDIONE",
.default_bpp = 16,
.int_clk = false,
}, {
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "LDB-JDITWO",
.default_bpp = 16,
.int_clk = false,
},
};
static struct imx_ipuv3_platform_data ipu_data[] = {
{
.rev = 4,
.csi_clk[0] = "clko_clk",
}, {
.rev = 4,
.csi_clk[0] = "clko_clk",
},
};
static struct fsl_mxc_ldb_platform_data ldb_data = {
.ipu_id = 0,
.disp_id = 0,
.ext_ref = 1,
.mode = LDB_SEP0,
.sec_ipu_id = 0,
.sec_disp_id = 1,
};
In our board if I change the boots args to ldb=sep1, I can see the contents of fb0/1 via LVDS1 in 2nd display correctly. But I am never able to see fb2 in either 1st or the 2nd display.
Any pointers will be very helpful.
I changed the following ldb_data strcut as follows and i can see BG and FG sucessfully allocated for fb2.
static struct fsl_mxc_ldb_platform_data ldb_data = {
.ipu_id = 0,
.disp_id = 0,
.ext_ref = 1,
.mode = LDB_SEP0,
.sec_ipu_id = 1,
.sec_disp_id = 1,
};
noinitrd console=ttymxc1,115200n8 video=mxcfb0:dev=ldb,LDB-JDIONE-16@60,if=RGB24,fbpix=RGB565 ldb=sep0 enable_wait_mode=off arm_freq=800 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rootwait rw mtdparts=gpmi-nand:16m(boot),16m(kernel),1500m(rootfs)
------------ /sys/class/graphics/fb0
DISP3 BG
D:1920x720p-51
ldb
2-layer-fb-bg
------------ /sys/class/graphics/fb1
DISP3 FG
overlay
2-layer-fb-fg
------------ /sys/class/graphics/fb2
DISP4 BG - DI1
D:800x480p-51
ldb
2-layer-fb-bg
------------ /sys/class/graphics/fb3
DISP4 FG
overlay
2-layer-fb-fg
But There is no output on LVDS1.
One thing I observed is that on fbset -fb /dev/fb2 --info, i get vsync as 60Hz but I actually set to 51 Hz in struct fb_videomode ldb_modedb[] in ldb.c.
But still there should be some faulty output instead of no output from LVDS1.
Any pointers ?
For single-channel output: up to 85 MHz per interface. (e.g. WXGA-1366 x 768 at 60 Hz + 35% blanking). Please try the lower resolution to see if both channels can display first.