Hello Experts,
I am working on display integration for iMX6Q AI, Here we procured HDMI display with 720p(1280×800, 10.1 inch Captive Touch Screen LCD). But it looks like the default support for the iMX6Q BSP supports only 1080p. Kindly help to add support for 720p.
Below is my technical analysis of integration:
With this parameters, I see the display is working fine on FHD TV. But same is not working with the above 720p display panel I have.
After which it will go and configure the default display.
I believe the root of the issue is this failure only. On success it will retrieve all the display parameters(hsync, vsync, clock, resolution etc.) from the target and will set accordingly.
But here it is setting some preconfigured parameters hard coded in imx6 kernel code.
https://community.nxp.com/thread/379601.
It seems the issue I am facing is the known issue on imx6 platform. Also, fix for the issue is given in the form of patch here.
But the patch is based on some later version of kernel and so I am unable to apply the patch.
The kernel version I am using is 3.14.52. Is there any later updated version than this for imx6 platform. Please let me know.
For more info on HDMI panel I am using, please refer below vendor web site:
http://www.waveshare.com/wiki/10.1inch_HDMI_LCD_(B)_(with_case)
Please provide me the patch for above mentioned issue.
Thank you,
Rohit
Thanks Qiang.
unfortunately our display doesn't has EDID information.
cat /sys/devices/soc0/soc.0/20e0000.hdmi_video/edid returning always zero.
If device doesn't have EDID embed in display, then is there any possibility that display still work in Linux. I mean to say, if we get timing parameters from vendor or VESA, and add mode as per your reference patch. will unsupported resolution display still work ?
Hello,
Is anyone find solution for 1024x600 resolution LCD?
You can reference to the 1600*900 patch to add your 1024*600 parameters, of cource this is not a standard HDMI timing, you should get the timing parameters from the LCD vendor.
This resolution is not a standard CEA-861-D resolution, so the default HDMI driver doesn't support it.
You can add this format into drivers\video\mxc\mxc_hdmi.c, and in mxc_hdmi_edid_rebuild_modelist(), add this format.
+static const struct fb_videomode wvga_mode = {
+ /* 1280x960 @ 60 Hz */
+ NULL, 60, 1280, 960, 9259, 312, 96, 36, 1, 112, 3,
+ FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+ FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, FB_MODE_IS_VESA,
+};
static void mxc_hdmi_edid_rebuild_modelist(struct mxc_hdmi *hdmi)
{
int i;
struct fb_videomode *mode;
dev_dbg(&hdmi->pdev->dev, "%s\n", __func__);
console_lock();
fb_destroy_modelist(&hdmi->fbi->modelist);
fb_add_videomode(&vga_mode, &hdmi->fbi->modelist);
+ fb_add_videomode(&wvga_mode, &hdmi->fbi->modelist);
Hi Qiang,
Thank you for your reply. I tried the changes you suggested, but still not able to get the Display. Could you please give provide me data for 1280x800@60 Hz i hope that will be great help to me. Please help me.
Many Thanks,
Rohit Kp,
Work: (91) 80 67807777 | Extn: 851478 | Mob: (91) 78 2986 2989
In drivers/video/mxc/mxc_edid.c
const struct fb_videomode mxc_cea_mode[64], we also need to add this video format:
/* #60: 1280x800p@60 */
[60] = {
NULL, 60, 1280, 800, 14084, 10, 6, 14, 3, 4, 6,
FB_SYNC_HOR_HIGH_ACT,
FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, 0
},
The above 1280*800 timing parameters are from "VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)" specification.
When boot up the kernel, set video mode as followed:
video=mxcfb0:dev=hdmi,1280x800M@60,if=RGB24,bpp=32
After booted into rootfs, you can use the followed command to check the resolution:
# cat /sys/class/graphics/fb0/mode
Hi Qiang,
I applied the changes as suggested by you in below mentioned files:
In driver/video/mxc/mxc_edid.c
driver/video/mxc/mxc_hdmi.c
myandroid/device/fsl/sabreauto_6q/BoardConfig.mk
for /* #60: 1280x800p@60 */.
After applying it, i am get the android boot animation logo with flickers on display and at log code is running below loop continuously till "
period 66, timeout is 0, wake up is :0":
======================log_start================
Rohit mxc_hdmi_cable_connected:1974
Rohit Func:mxc_hdmi_default_edid_cfg, Line:1847
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_default_modelist
mxc_hdmi 20e0000.hdmi_video: create default modelist
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected exit
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x0
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x2
mxc_hdmi 20e0000.hdmi_video: EVENT=plugin
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected
Rohit Func:mxc_hdmi_cable_connected, Line:1947, EDID_STATUS-1
mxc_hdmi 20e0000.hdmi_video: Read EDID again
Rohit Func:mxc_hdmi_cable_connected, Line:1956, retry_status-1
Rohit mxc_hdmi_cable_connected:1974
Rohit Func:mxc_hdmi_default_edid_cfg, Line:1847
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_default_modelist
mxc_hdmi 20e0000.hdmi_video: create default modelist
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected exit
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x0
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x2
mxc_hdmi 20e0000.hdmi_video: EVENT=plugin
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected
Rohit Func:mxc_hdmi_cable_connected, Line:1947, EDID_STATUS-1
mxc_hdmi 20e0000.hdmi_video: Read EDID again
Rohit Func:mxc_hdmi_cable_connected, Line:1956, retry_status-1
Rohit mxc_hdmi_cable_connected:1974
Rohit Func:mxc_hdmi_default_edid_cfg, Line:1847
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_default_modelist
mxc_hdmi 20e0000.hdmi_video: create default modelist
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected exit
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x0
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x2
mxc_hdmi 20e0000.hdmi_video: EVENT=plugin
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected
Rohit Func:mxc_hdmi_cable_connected, Line:1947, EDID_STATUS-1
mxc_hdmi 20e0000.hdmi_video: Read EDID again
Rohit Func:mxc_hdmi_cable_connected, Line:1956, retry_status-1
Rohit mxc_hdmi_cable_connected:1974
Rohit Func:mxc_hdmi_default_edid_cfg, Line:1847
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_default_modelist
mxc_hdmi 20e0000.hdmi_video: create default modelist
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected exit
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x0
mxc_hdmi 20e0000.hdmi_video: phy_int_stat=0x3d, phy_int_pol=0x2
mxc_hdmi 20e0000.hdmi_video: EVENT=plugin
mxc_hdmi 20e0000.hdmi_video: mxc_hdmi_cable_connected
Rohit Func:mxc_hdmi_cable_connected, Line:1947, EDID_STATUS-1
mxc_hdmi 20e0000.hdmi_video: Read EDID again
Rohit Func:mxc_hdmi_cable_connected, Line:1956, retry_status-1
==========================log_end=============================
I think you need dump the EDID from your HDMI display and check what's timing parameter for the 1280*800 resolution.
You can search the EDIDViewer from google and dump the EDID from PC with this tool, then update the 1280*800 timing parameters into mxc_edid.c and mxc_hdmi.c.
Hello Qiang,
Could you do me a favor?
We have 1024 X 600 HDMI display and would like to apply similar changes.
Thanks in advance.
BR,
Taehyuk
You just need find a workable 1024x600 HDMI timing parameters for your display, then followed the above steps.
Hello Qiang,
I could not find the setting for 1024x600. So i tried some values from a codes in for other Soc. It was something like below,
/* #48: 1024x600p@60Hz */ [48] = { NULL, 60, 1024, 600, 40846, 144, 40, 18, 1, 104, 3, FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED,0 }, But it did not work. BTW, I also tried on imx7 board and the panel is working without any changes. I have the latest release,
I would like to understand how 1024x600 is working on IXM7. Also I am wondering if the same changes can be applied back to imx6 boards.
Thanks in advance.
Taehyuk
You need get the timing parameters from your HDMI display for this special 1024x600 resolution, it is not a standard mode, so the timing parameters are not defined from specification.
For iMX7, there is no HDMI module in the chip, so this modification has no effect to it.
Thanks for responding.
We have IMX7 Sabre board and it has HDMI port on it. I connected the display to the connector. I am seeing it is working. Could you double check ?
Hi Taehyuk Kwon, on iMX7 Sabre board, the HDMI function is implemented by external SII902x chip, it will convert the parallel display signal to HDMI signal. So the driver is not same as iMX6.
Hi Qiang,
I have gone through this post and looks like we have similar problem.
We wanted to attach 5inch HDMI LCD (B) of resolution 800x480 http://www.waveshare.com/wiki/5inch_HDMI_LCD_(B) on nitrogen6x board. This display has HDMI interface.
We are using 3.14.55 kernel. we have explored the code for mxc_edid.c( drivers/video/mxc) and found that this mode 800x480 is not defined in struct fb_videomode.
hdmi supports only modes which are found in struct fb_videomode, This is the reason we are not seeing any output on display when we connect 5inch HDMI LCD (B)
I think we can set “mxc_hdmi.only_cea=0” in Kernel command line parameters an see if 800x480 appears in mode list. if it appears, we can select that mode.
or we have to add this format into drivers\video\mxc\mxc_hdmi.c, and in mxc_hdmi_edid_rebuild_modelist(), suggested in above post by you.
Thanks in advance.
Thanks Qiang for your prompt reply.
you meant to say, now there is no need of "mxc_hdmi.only_cea=0” kernel command line parameter required? If I refer your patch, problem should be fixed.. I have gone through your patch and find, some point need clarification.
+ [60] = {
+ NULL, 60, 1600, 900, 8457, 256, 88, 26, 3, 168, 5,
+ 0,
+ FB_VMODE_NONINTERLACED, 0
+ },
What does[60] represent here. in my kernel code in struct fb_videomode() after[9] we have entry start from [14] and so on also I didn't get VESA timing parameters for 800*480 display 5 inch Resistive Touch Screen LCD, HDMI interface, supports various systems. Let me know where i can get timings for this display and i will verify new resolution is added and working fine.
The CEA-861 specification had defined 1~59 formats, from [60], they are reserved formats which can be defined by user.
And for these non-standard formats, the timing parameters should be defined by yourself based on your display datasheet.
Hi Qiang,
My EDID was failing all the time.
So in mxc_hdmi_read_edid() even ret < 0, I am returning HDMI_EDID_SUCCESS instead HDMI_EDID_FAIL.
Now I am able to see the display on screen. Thank you for your prompt replies all the time.
BR,
Rohit Kp