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 = <&reg_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"
EndSection

5. 触摸屏校准

若出现触摸不准,修改 /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 等选项

关联知识