lcdc新屏幕的参数配置
程序员文章站
2022-05-29 09:11:32
...
1.1添加新的参数文件
在 InfoTM Android 4.4 的 SDK 中, LCD的参数文件被放在以下路径:
drivers/infotm/common/display/implementation/module/terminal/lcd_panel/lcd_panel_params
按照约定的风格,用 LCD 屏的名字加上分辨率的信息来命名文件名。像下面这样:
KR070LB0S_1024_600.c
这个文件中有两个结构体,分别是 lcd_power_sequence ,以及lcd_panel_param 。其中lcd_power_sequence
是个 static 结构体,描述的是该屏的上电顺序,挂在 lcd_panel_param中。 lcd_panel_param是一个全局结构
体,这个结构体也是以屏的名字命名的。如下:
struct lcd_panel_param panel_KR070LB0S_1024_600 = {
.name = "KR070LB0S_1024_600",
.dtd = {
.mCode = LCD_VIC,
.mHImageSize = 154, // mm. Different usewith HDMI
.mVImageSize = 90,
.mHActive = 1024,
.mVActive = 600,
.mHBlanking = 320,
.mVBlanking = 35,
.mHSyncOffset = 80,
.mVSyncOffset = 6,
.mHSyncPulseWidth = 80,
.mVSyncPulseWidth = 6,
.mHSyncPolarity = 0,
.mVSyncPolarity = 0,
.mPixelClock = 5120, // 60 fps
},
.rgb_seq= SEQ_RGB,
.rgb_bpp = RGB888,
.power_seq= pwr_seq,
.power_seq_num = sizeof(pwr_seq)/sizeof(struct lcd_power_sequence),
};
1.2添加结构体的声明
为了让刚刚添加的屏的参数能让驱动的其他部分正常识别,还必须添加以下 3 个地方的声明:
drivers/infotm/common/display/implementation/module/terminal/lcd_panel/lcd_panel.c
drivers/infotm/common/display/implementation/module/terminal/lcd_panel/lcd_panel_params/Makefile
drivers/infotm/common/display/implementation/module/terminal/lcd_panel/lcd_panel_params/lcd_panel_params.h
2 确定新屏幕的参数
2.1 确定时序参数
如 1.1 中的结构体,屏幕的描述涉及到几个必要参数,下表中列出了它们的含义:
mCode 这是 LCD 兼用 HDMI 结构体的设计,只需书写 LCD_VIC
mHActive Horizontal Resolution
mVActive Vertical Resolution
mHBlanking Horizontal Blank Time
mVBlanking Vertical Blank Time
mHSyncOffset Horizontal Front Porch(HFP)
mVSyncOffset Vertical Front Porch (VFP)
mHSyncPulseWidth Horizontal SyncPulse Width (HSPW)
mVSyncPulseWidth Vertical SyncPulse Width (VSPW)
mHSyncPolarity Horizontal SyncPolarity
mVSyncPolarity Vertical SyncPolarity
mPixelClock Pixel Clock
注 1:
有些屏的 Spec可能没有给 HBlank time 和 VBlank time ,而是给出了 Horizontal Back Porch (HBP) 和Vertical
Back Porch (VBP) ,那么 HBlank 和 VBlank 可以有如下公式得到:
mHBlanking = HBP + HSPW + HFP;
mVBlanking = VBP + VSPW + VFP;
注 2:
有些屏可能只给出了 HBlank 和 VBlank ,而没有其他任何信息,这样,我们就需要根据经验去猜测 HFP,
HSPW, VFP, VSPW 这些值了。
对于表中没有列出来的参数,一般是不需要修改的。
2.2设置屏的时钟
2.1 中涉及到了一个参数 mPixelClock 这个参数是 , LCD 刷新像素频率,它的倒数就是刷新一个像素点需要
的时间。这个参数的单位是 10K, 1.2 中的 mPixelClock = 5120,即 5120 * 10K = 51.2 MHz
如果屏的 Spec没有给出 PixelClock ,而是只给出了屏的帧率 F,那么 PixelClock 可以通过如下公式算出:
mPixelClock= F * (mHActive + mHBlank)* (mVActive+ mVBlan)
mPixelClock 配置好之后,在驱动加载时, lcdc的初始化流程会自动根据 mPixelClock 把时钟配成合适的频
率。
2.3配置 item 参数
最后,为了让屏幕被正常识别,还必须配置相关的 item , item也被定义成可以修改其他一些现现实系统相
关的选项:
示例:
dss.implementation.product.type mid
dss.implementation.board.type lcd1
dss.implementation.framebuffer.vic 2000
dss.implementation.lcdpanel.name KR070LB0S_1024_600
dss.implementation.lcdpanel.rgbseq 0
dss.implementation.lcdpanel.rgbbpp 1
dss.implementation.lcdpanel.master.gpio 28
dss.implementation.lcdpanel.master.polarity 1
dss.implementation.lcdpanel.bl.gpio 27
说明:
Key Value Pattern Description
dss.implementation.product.type STR 对于产品类型的描述
dss.implementation.board.type STR 设备接口类型
dss.implementation.framebuffer.vic NUM framebuffer 的主 vic 号,默认 2000
dss.implementation.lcdpanel.name STR
LCD 型号 ( 本例:KR070LB0S_1024_600 )
dss.implementation.lcdpanel.rgbseq NUM 输出端口 rgb的顺序, 跟据屏线的不同调整顔色顺序:
0: RGB, 1: RBG, 2: GRB, 3: GBR, 4: BRG, 5: BGR
dss.implementation.lcdpanel.rgbbp
p
NUM
rgbbbpp 是显示系统采用的 PIXFORMAT: 0:
ARGB0888, 1: RGB888, 2: RGB565, 3: RGB666,我
们目前用的都是 888, 不推荐用户更改.
dss.implementation.lcdpanel.master
.gpio
NUM LCD 供电管脚
dss.implementation.lcdpanel.master
.polarity
NUM LCD 供电管脚默认极性
dss.implementation.lcdpanel.bl.gpio NUM 背光上电管脚
ss.implementation.lcdpanel.bl.polar
ity
NUM 背光上电管脚默认极性
上一篇: Linux内核模块编程指南(三)
下一篇: npm -S -D -g i 有什么区别