“MIPI-DSI液晶适配”的版本间的差异
(→U-Boot部分修改) |
(→U-Boot部分修改) |
||
第111行: | 第111行: | ||
7) 在panels.c中__lcd_panel_t* panel_array[] = {这个数组里添加&AML080WQ05_panel这项; | 7) 在panels.c中__lcd_panel_t* panel_array[] = {这个数组里添加&AML080WQ05_panel这项; | ||
− | 8) 重新编译u-boot然后打包固件烧录验证; | + | 8) 在上层目录的Makefile里添加lcd/AML080WQ05.o以便将新增的.c编译进去; |
+ | |||
+ | 9) 重新编译u-boot然后打包固件烧录验证; | ||
=Kernel部分修改= | =Kernel部分修改= | ||
=常见问题= | =常见问题= |
2022年7月5日 (二) 10:36的版本
原理
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然后打包固件烧录验证;