imx6dl需要支持lcd接口的屏,imx6dl的datasheet并没有明确的说明lcd相关的配置,只在Display Content Integrity Checker (DCIC)一章中介绍。本文记录imx6支持lcd的方法。

参考链接

http://developer.toradex.com/knowledge-base/display-output-resolution-and-timings-linux

https://community.nxp.com/thread/307613

http://cache.freescale.com/files/32bit/doc/user_guide/MX53UG.pdf

https://boundarydevices.com/configuring-i-mx6-machines-different-screens-nitrogen6x-sabre-lite/

uboot

更改bootargs,添加lcd支持:video=mxcfb0:dev=lcd,SEIKO-WVGA,if=RGB24,bpp=32

include/configs/mx6dl_sabresd_android.h

#define CONFIG_EXTRA_ENV_SETTINGS                   \
"netdev=eth0\0" \
"ethprime=FEC0\0" \
"uboot=u-boot.bin\0" \
"kernel=uImage\0" \
"nfsroot=/opt/eldk/arm\0" \
"bootargs_base=setenv bootargs console=ttymxc0,115200 video=mxcfb0:dev=lcd,SEIKO-WVGA,if=RGB24,bpp=32\0"\
"bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs "\
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0"\
"bootcmd_net=run bootargs_base bootargs_nfs; " \
"tftpboot ${loadaddr} ${kernel}; bootm\0" \
"bootargs_mmc=setenv bootargs ${bootargs} ip=none " \
"root=/dev/mmcblk0p1 rootwait\0" \
"bootcmd_mmc=run bootargs_base bootargs_mmc; " \
"mmc dev 2; " \
"mmc read ${loadaddr} 0x800 0x3000; bootm\0" \
"bootcmd=run bootcmd_mmc\0 " \
"splashimage=0x30000000\0" \
"splashpos=m,m\0" \
"lvds_num=1\0"

kernel

需要注册设备和驱动

device

配置引脚复用

arch/arm/mach-mx6/board-mx6dl_sabresd.h

static iomux_v3_cfg_t mx6dl_sabresd_pads[] = {
......
MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK,
MX6DL_PAD_DI0_PIN15__IPU1_DI0_PIN15, /* DE */
MX6DL_PAD_DI0_PIN2__IPU1_DI0_PIN2, /* HSync */
MX6DL_PAD_DI0_PIN3__IPU1_DI0_PIN3, /* VSync */
MX6DL_PAD_DI0_PIN4__IPU1_DI0_PIN4, /* Contrast */
MX6DL_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0,
MX6DL_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1,
MX6DL_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2,
MX6DL_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3,
MX6DL_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4,
MX6DL_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5,
MX6DL_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6,
MX6DL_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7,
MX6DL_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8,
MX6DL_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9,
MX6DL_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10,
MX6DL_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11,
MX6DL_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12,
MX6DL_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13,
MX6DL_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14,
MX6DL_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15,
MX6DL_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16,
MX6DL_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17,
MX6DL_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18,
MX6DL_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19,
MX6DL_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20,
MX6DL_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21,
MX6DL_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22,
MX6DL_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23,
......
};

设备初始化

arch/arm/mach-mx6/board-mx6q_sabresd.c

// 与bootargs中"dev=lcd,SEIKO-WVGA" 对应
static struct ipuv3_fb_platform_data sabresd_fb_data[] = {
// Tony 2016-11-22
{
.disp_dev = "lcd",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "SEIKO-WVGA",
.default_bpp = 32,
.int_clk = false,
},
{ /*fb0*/
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "LDB-XGA",
//.default_bpp = 16,
.default_bpp = 24,
.int_clk = false,
.late_init = false,
}, {
.disp_dev = "hdmi",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "1920x1080M@60",
.default_bpp = 32,
.int_clk = false,
.late_init = false,
}, {
}; static struct fsl_mxc_lcd_platform_data lcdif_data = {
.ipu_id = 0, // ipu 0
.disp_id = 0, // 第0个接口
.default_ifmt = IPU_PIX_FMT_RGB24,
}; // lcd初始化
static void __init mx6_sabresd_board_init(void)
{
......
imx6q_add_ipuv3(0, &ipu_data[0]);
if (cpu_is_mx6q()) {
imx6q_add_ipuv3(1, &ipu_data[1]);
for (i = 0; i < 4 && i < ARRAY_SIZE(sabresd_fb_data); i++)
imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]);
} else
for (i = 0; i < 2 && i < ARRAY_SIZE(sabresd_fb_data); i++) //不知道这里为什么要i<2,难道因为imx6的ipu只有2个接口?
imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]); imx6q_add_lcdif(&lcdif_data);
......
}

driver

添加lcd的驱动支持

make menuconfig

选择 SEIKO WVGA Panel

Prompt: SEIKO WVGA Panel
Defined at drivers/video/mxc/Kconfig:55
Depends on: HAS_IOMEM [=y] && ARCH_MXC [=y] && FB_MXC_SYNC_PANEL [=y]
Location:
-> Device Drivers
-> Graphics support
-> MXC Framebuffer support (FB_MXC [=y])
-> Synchronous Panel Framebuffer (FB_MXC_SYNC_PANEL [=y])

更改LCD参数。

drivers/video/mxc/mxc_lcdif.c

static struct fb_videomode lcdif_modedb[] = {
...
{
/* 640x480 @ 60 Hz , pixel clk @ 25MHz */
"SEIKO-WVGA", 60, 640, 480, 40000, 89, 164, 23, 10, 10, 10,
FB_SYNC_CLK_LAT_FALL,
FB_VMODE_NONINTERLACED,
0,},
...
};

Tony Liu

2016-11-28, Shenzhen

imx6 RGB LCD的更多相关文章

  1. I.MX6 Parallel RGB LCD Datasheet描述

    /******************************************************************** * I.MX6 Parallel RGB LCD Datas ...

  2. imx6 uboot lcd

    本文记录imx6 uboot中关于lcd初始化的过程. uboot中相关的文件: cpu/arm_cortexa8/start.S lib_arm/board.c board/freescale/mx ...

  3. LCD接口和RGB介绍【转】

    转自:https://www.cnblogs.com/hzl6255/p/5470583.html 阅读目录 1. 介绍 2. 接口类型 3. RGB 4. YUV 5. FOURCC 回到顶部 1. ...

  4. LCD接口和RGB介绍

    1. 介绍 Video的显示离不开LCD, 所以这里简单介绍一下LCD的接口和RGB LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器LCD目前已经取代CRT, 成为 ...

  5. LCD RGB 控制技术讲解 — 时钟篇(上)

    时序图 下面是LCD RGB 控制的典型时序图  天啊,一下就上这玩意,怎么看??? 其实要解释上面的时序图,我们还需要了解一些LCD的显示过程.所以现在只是有个印象,稍后我们详细讲解. LCD显示流 ...

  6. LCD RGB 控制技术讲解 — 时钟篇(上)【转】

    1. 时序图 下面是LCD RGB 控制的典型时序图 天啊,一下就上这玩意,怎么看??? 其实要解释上面的时序图,我们还需要了解一些LCD的显示过程.所以现在只是有个印象,稍后我们详细讲解. 2. L ...

  7. 【团购活动】接口最全最好用的S5PV210开发板Sate210-F 开发板开始团购活动了,一起学习linux!

    接口最全最好用的S5PV210开发板Sate210-F 开发板开始团购活动了,一起学习linux!http://bbs.eeworld.com.cn/forum.php?mod=viewthread& ...

  8. 【原创】在RT1050 LittleVgl GUI中嵌入中文输入法框架

    时隔一年多终于又冒泡了,哎,随着工作越来越忙,自己踏实坐下来写点东西真是越来越费劲,这篇文章也是准备了好久好久才打算发表出来(不瞒大家,东西做完好久了,文章憋了一年了,当真"高产" ...

  9. LCD LED OLED区别 以及RGB、YUV和HSV颜色空间模型

    led 液晶本身不发光,而是有背光作为灯源,白色是由红绿蓝三色组成,黑色是,液晶挡住了led灯光穿过显示器. lcd比led更薄. oled:显示黑色时,灯是灭的,所以显示黑色更深,效果更好. 这就不 ...

随机推荐

  1. 【BZOJ】1221: [HNOI2001] 软件开发(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1221 先吐槽一下,数组依旧开小了RE:在spfa中用了memset和<queue>的版本 ...

  2. iOS-TextField知多少

    iOS-TextField知多少 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRect ...

  3. CvMat and cv::Mat

    CvMat: typedef struct CvMat { int type; int step; /* for internal use only */ int* refcount; int hdr ...

  4. 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build955 编译日期:2015-12-14 ====================================== 二. ...

  5. svn vs git

    SVN和Git比较,哪个好用,适用? GIT和SVN之间的五个基本区别 话说Git的区别

  6. OpenFlow.p4 源码

    /* Copyright 2013-present Barefoot Networks, Inc. Licensed under the Apache License, Version 2.0 (th ...

  7. redis缓存怎么存储对象

    2.把对象Object存储到redis中,怎么存?memcache存取对象是序列化和反序列化 使用通用的序列化.反序列化(频繁的会很消耗cpu,使用Google Protocol Buffer,将对象 ...

  8. PHP IDE phpstorm 常用快捷键

    PHP IDE phpstorm 常用快捷键 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了PHP IDE phpstorm 常用快捷键,本文分别列出了mac系统和Win ...

  9. reduce()

    Professional.JavaScript.for.Web.Developers.3rd.Edition.Jan.2012 var value = [1,2,3,4,5]; var sum = v ...

  10. CAS实践笔录

    下载CAS 本文下载的是cas-server-4.0.0-release 下载地址: https://www.apereo.org/cas/download 导入Eclipse测试 Import -& ...