OKMX6DL/Q 8英寸LCD屏移植笔记
基于飞凌 FETMX6DL/Q 核心版,适用于 Linux 4.1.15 操作系统。介绍 800x480 分辨率 LCD 屏的移植配置。
修改内容
1. 内核驱动层(mxc_lcdif.c)
修改 linux-4.1.15/drivers/video/fbdev/mxc/mxc_lcdif.c,在 lcdif_modedb[] 中添加显示模式:
/* 800x480 @ 57 Hz, pixel clk @ 27MHz */
{ "CLAA-WVGA", 57, 800, 480, 37037, 40, 60, 10, 10, 20, 10,
FB_SYNC_CLK_LAT_FALL, FB_VMODE_NONINTERLACED, 0},
/* 800x480 @ 60 Hz, pixel clk @ 32MHz */
{ "SEIKO-WVGA", 60, 800, 480, 29850, 89, 164, 23, 10, 10, 10,
FB_SYNC_CLK_LAT_FALL, FB_VMODE_NONINTERLACED},
/* 800x600 @ 60 Hz (AT080) */
{ "AT080-WVGA", 60, 800, 600, 21276, 46, 23, 210, 12, 1, 1,
FB_SYNC_CLK_LAT_FALL, FB_VMODE_NONINTERLACED},2. 设备树配置(imx6qdl-sabresd.dtsi)
添加 LCD 节点:
lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
default_ifmt = "RGB24";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1>;
disp-power-on-supply = <®_lcdif_pwr_on>;
status = "okay";
};配置 framebuffer 节点:
mxcfb1: fb@0 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
mode_str = "AT080-WVGA";
default_bpp = <16>;
int_clk = <0>;
late_init = <0>;
status = "disabled";
};3. U-Boot 配置(mx6sabre_common.h)
修改 framebuffer 环境变量:
#define MXC_FB0 "mxcfb0=video=mxcfb0:dev=lcd,AT080-WVGA,if=RGB24,bpp=16,int_clk\0"
#define MXC_FB1 "mxcfb1=video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24,bpp=16\0"4. X11 配置(xorg.conf)
修改 /etc/X11/xorg.conf,配置 Vivante 驱动:
Section "Device"
Identifier "i.MX Accelerated Framebuffer Device"
Driver "vivante"
Option "fbdev" "/dev/fb0"
Option "vivante_fbdev" "/dev/fb0"
Option "HWcursor" "false"
EndSection
Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection5. 触摸屏校准
若出现触摸不准,修改 /etc/X11/xorg.conf 中的 InputClass:
Section "InputClass"
Identifier "calibration"
MatchProduct "TSC2007 Touchscreen"
Option "SwapAxes" "0"
Option "InvertX" "1"
EndSection保存后执行校准并重启:
rm /etc/pointercal.xinput
sync
reboot注意事项
- 关键:
mode_str中的屏型号名称(如AT080-WVGA)必须与内核驱动中定义的名称一致 - 时序参数需根据具体屏幕手册计算,可通过搜索引擎了解
FB_SYNC_*等参数含义 - 移植后若触摸不准,需调整
SwapAxes和InvertX等选项