查看“MIPI-DSI液晶适配”的源代码
←
MIPI-DSI液晶适配
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=原理= MIPI液晶屏首先需要对屏驱动IC进行初始化,写入相关指令数据,然后CPU的液晶控制器按照设定的图像时序参数向驱动IC输出图像数据。所以移植需要屏参(时序参数HBP、VBP一类的)和初始化代码两部分。 =屏参修改= 对于A33/A64/A40i需要找到FEX文件中找到lcd0参数块;对于A133需要在DTS里找到lcd0节点;以FEX文件为例: [lcd0] lcd_used = 1 lcd_driver_name = "AML080WQ05" lcd_backlight = 100 lcd_if = 4 lcd_x = 800 lcd_y = 1280 lcd_width = 223 lcd_height = 125 lcd_dclk_freq = 70 lcd_pwm_used = 1 lcd_pwm_ch = 0 lcd_pwm_freq = 200 lcd_pwm_pol = 0 lcd_pwm_max_limit = 255 lcd_hbp = 40 lcd_ht = 888 lcd_hspw = 12 lcd_vbp = 20 lcd_vt = 1320 lcd_vspw = 4 lcd_lvds_if = 0 lcd_lvds_colordepth = 0 lcd_lvds_mode = 0 lcd_frm = 1 lcd_hv_clk_phase = 0 lcd_hv_sync_polarity = 0 lcd_dsi_if = 0 lcd_dsi_lane = 4 lcd_dsi_format = 0 lcd_dsi_te = 0 lcd_gamma_en = 0 lcd_bright_curve_en = 0 lcd_cmap_en = 0 lcd_driver_name为初始化代码的名字,后面会提到;lcd_if=4表示使用DSI显示接口;lcd_x/lcd_y/lcd_dclk_freq/lcd_hbp/lcd_ht/lcd_hspw/lcd_vbp/lcd_vt/lcd_vspw这9个参数需要对照液晶面板Datasheet上标注的参数对应填好;lcd_dsi_if/lcd_dsi_lane/lcd_dsi_format/lcd_dsi_te这4个参数对照上文填好即可,无需变动; 对于电源/引脚配置: A33:确保有lcd_power = "axp22_dc1sw"这项即可;lcdd0~23/lcdclk/lcdde/lcdhsync/lcdvsync/[lcd0_suspend]块无用都可以删去; A64/A40i:确保有lcd_power = "vcc-mipi"和lcd_fix_power = "vcc-dsi-33",lcd_power为核心板VCC-MIPI输出(默认3V3),lcd_fix_power为CPU的DSI-Bank供电;lcdd0~23/lcdclk/lcdde/lcdhsync/lcdvsync/[lcd0_suspend]块无用都可以删去; A133:确保有lcd_pin_power = "dcdc1"和lcd_power = "dc1sw"即可;确保引脚配置为pinctrl-0 = <&dsi4lane_pins_a>和pinctrl-1 = <&dsi4lane_pins_b>即可。 =U-Boot部分修改= 代码位置: A33:lichee/brandy/u-boot-2011.09/drivers/video_sunxi/sunxi_v2/de_bsp/lcd/panels A64/A40i:lichee/brandy/u-boot-2014.07/drivers/video/sunxi/disp2/disp/lcd A133:longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd 在这里添加panel初始化代码,可以先复制该目录下别的屏的.h和.c然后在此基础上修改,例如复制inet_dsi_panel.h和inet_dsi_panel.c,改名为AML080WQ05.h和AML080WQ05.c(文件名可以自己定义,尽量以屏型号命名): 1) 将AML080WQ05.h中__INET_DIS_PANEL_H__替换为__AML080WQ05_H__; 2) AML080WQ05.c中#include "inet_dsi_panel.h"改为#include "AML080WQ05.h"; 3) AML080WQ05.c中__lcd_panel_t inet_dsi_panel = {改为__lcd_panel_t AML080WQ05_panel = {; 4) AML080WQ05.c中.name = "inet_dsi_panel"改为.name = "AML080WQ05"; 5) AML080WQ05.c中找到static struct LCM_setting_table LCM_LT080B21BA94_setting[] = {该行,在这里把屏厂提供的初始化代码贴过来,注意格式:{指令,参数长度,{参数1,参数2,...}},提供的初始化代码若不是这种格式的需客户自己手工转换下! 6) 在panels.c中添加#include "AML080WQ05.h"; 7) 在panels.c中__lcd_panel_t* panel_array[] = {这个数组里添加&AML080WQ05_panel这项; 8) 在上层目录的Makefile里添加lcd/AML080WQ05.o以便将新增的.c编译进去; 9) 重新编译u-boot然后打包固件烧录验证; =Kernel部分修改= 代码位置: A33:lichee/linux-3.4/drivers/video/sunxi/lcd/panels A64/A40i:lichee/linux-3.10/drivers/video/sunxi/disp2/disp/lcd A133:longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd 由于u-boot的驱动架构和kernel的几乎一致,所以该部分修改可以参照u-boot的移植方法。 =常见问题= A: 为何不显示启动LOGO? Q: 启动LOGO在u-boot阶段刷新,请确保u-boot的初始化代码移植正确! A:能否只移植u-boot的初始化代码?不移植kernel的也能正常显示呢? Q:kernel阶段的初始化代码在系统启动时确实不会再次执行,因为u-boot阶段已经执行过一次了。但若需要系统休眠/唤醒功能时必须移植!因为系统休眠后LCD会被断电,此时唤醒后需要再次初始化panel! A:为何移植后屏幕无任何显示? Q: MIPI屏需要屏参和初始化代码必须全部正确才能正常显示!请仔细排查各部分的代码和配置。 需注意的是:初始化代码中的宏定义#define REGFLAG_DELAY 0xFE和#define REGFLAG_END_OF_TABLE 0xFF用于标识初始化延时和初始化结束,请确保初始化代码中的所有指令不与这两个标识冲突,若有重复的则可以把这两个宏定义改为其他值! A:添加新panel后系统不启动,卡死在u-boot阶段! Q:这种情况一般是屏参(HBP/VBP一类)设置不正确导致TCON初始化失败引起的,请检查屏参时序配置是否正确。另有时屏厂提供的参数并不一定适用于所有平台,客户需根据具体情况适当微调下!
返回至
MIPI-DSI液晶适配
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
工具
链入页面
相关更改
特殊页面
页面信息