一、概述
1、飛思卡爾 imx6的顯示屏驅動架構:
2
、目标:
因imx6開發闆本身已提供LVDS接口,目标螢幕是LG的LA070WV6,其為RGB接口,imx6和LG屏之間用TW8836晶片來轉接,LG屏的主要參數為:
分辨率:800*480
色彩:32位
時鐘頻率:33.26MHz
二移植過程
1、首先把螢幕的接口接到開發闆的lvds接口上。開發闆提供的lvds接口如下:
如上圖所示,lvds共有20個pin,其中有4組資料線,1組時鐘線,其他還有背光控制、電源、地等接口。
TW8836晶片和LG屏的接口定義我這裡也不做介紹。
2、修改Android的核心源碼。
1)找到drivers/video/mxc/ldb.c的fb_videomode數組變量,它定義了螢幕的相關參數,fb_videomode結構體的定義在include/linux/fb.h中:
[cpp] view plain copy
1. struct fb_videomode {
2. const char *name;
3. u32 refresh;
4. u32 xres; //行像素
5. u32 yres; //列像素
6. u32 pixclock; //時鐘頻率,機關ps,14430
7. u32 left_margin; // HBPD(horizontal back porch):80
8. u32 right_margin; // HFPD(horizontal front porth):48
9. u32 upper_margin; // VBPD(vertical back porch),15
10. u32 lower_margin; // VFBD(vertical front porch),2
11. u32 hsync_len; // HSPW(horizontal sync pulse width):32
12. u32 vsync_len; // VSPW(vertical sync pulse width):47
13. u32 sync;
14. u32 vmode;
15. u32 flag;
16.};
2)修改drivers/video/mxc/ldb.c的fb_videomode數組變量,使它的參數适應LA070WV6的螢幕參數。
[cpp] view plain copy
17. static struct fb_videomode ldb_modedb[] = {
18. {
19. .name ="LDB-XGA",
20. .refresh =60,
21. .xres =800,
22. .yres =480,
23. .pixclock =30066,
24. .left_margin =28,
25. .right_margin =100,
26. .upper_margin =13,
27. .lower_margin =30,
28. .hsync_len =128,
29. .vsync_len =2,
30. .sync =0,
31. .vmode =FB_VMODE_NONINTERLACED,
32. .flag =FB_MODE_IS_DETAILED,
33. }
34. };
名稱:LDB-XGA
重新整理頻率:60
分辨率:800*480
時鐘:10^12/33260000 = 30066
sync:0
vmode:FB_VMODE_NONINTERLACED
flag:FB_MODE_IS_DETAILED
3)設定cmdline,重新編譯kernel,生成boot.img,燒錄到開發闆中:
[html] view plain copy
1. cmdline console=ttymxc3,115200 init=/init video=mxcfb0:dev=ldb,LDB-XGA, if=RGB24,bpp=32 video=mxcfb1:dev=ldb,LDB-XGA, if=RGB24,bpp=32 video=mxcfb2:off fbmem=10M vmalloc=400Mandroidboot.console=ttymxc3
其中video = mxcfb0:dev=ldb,LDB-XGA表示選用fb0的ldb驅動
if=RGB24,bpp=32表示32位色彩