MIPI显示屏适配指南
0.前言
由于之前我们已经适配过RGB屏,如果我们去适配了4寸MIPI屏,那么RGB屏就不能使用了。对于4寸屏购买链接为:
LCD_调试指南:https://tina.100ask.net/SdkModule/Linux_LCD_DevelopmentGuide-01/
Display_开发指南:https://tina.100ask.net/SdkModule/Linux_Display_DevelopmentGuide-01/
1.添加新驱动
将驱动程序添加到
内核的lcd驱动目录下:
tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd
uboot的lcd驱动目录下:
tina-v853-open/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/
由于uboot和内核中的屏驱动会存在一些差别,下面分别展示出uboot和内核中不同的屏驱动。具体源文件可以在4寸屏适配资源包中查看。
1.1 uboot驱动程序
驱动程序头文件tft08006.h
#ifndef _TFT08006_H
#define _TFT08006_H
#include "panels.h"
extern __lcd_panel_t tft08006_panel;
extern s32 bsp_disp_get_panel_info(u32 screen_id, disp_panel_para *info);
#endif /*End of file*/
驱动程序的C文件tft08006.c
这里只展示与内核不同的部分
__lcd_panel_t tft08006_panel = {
/* panel driver name, must mach the name of
* lcd_drv_name in sys_config.fex
*/
.name = "tft08006",
.func = {
.cfg_panel_info = lcd_cfg_panel_info,
.cfg_open_flow = lcd_open_flow,
.cfg_close_flow = lcd_close_flow,
.lcd_user_defined_func = lcd_user_defined_func,
},
};
1.2 内核驱动程序
驱动程序头文件tft08006.h
#ifndef _TFT08006_H
#define _TFT08006_H
#include "panels.h"
extern struct __lcd_panel tft08006_panel;
extern s32 bsp_disp_get_panel_info(u32 screen_id, struct disp_panel_para *info);
#endif /*End of file*/
驱动程序的C文件"tft08006.c,这里只展示与uboot不同的部分。
struct __lcd_panel tft08006_panel = {
/* panel driver name, must mach the name of
* lcd_drv_name in sys_config.fex
*/
.name = "tft08006",
.func = {
.cfg_panel_info = lcd_cfg_panel_info,
.cfg_open_flow = lcd_open_flow,
.cfg_close_flow = lcd_close_flow,
.lcd_user_defined_func = lcd_user_defined_func,
},
};
2.修改内核中panels.h和panels.c
由于内核中没有对tft08006屏驱动有相关的配置,所以我们还需要在panels全志显示驱动中增加定义。
2.1 修改内核中panels.h
在屏驱动目录下修改panels.h
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.h
在icn6202屏驱动定义的后面增加tft08006屏驱动定义
#ifdef CONFIG_LCD_SUPPORT_ICN6202
extern struct __lcd_panel icn6202_panel;
#endif
#ifdef CONFIG_LCD_SUPPORT_ICN6202
extern struct __lcd_panel icn6202_panel;
#endif
#ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI
extern struct __lcd_panel nt35510_panel;
#endif
按下ESC,输入:wq
,保存刚才的修改并退出
2.2 修改内核中panels.c
在屏驱动目录下修改panels.c
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.c
在icn6202屏驱动定义的后面增加tft08006屏驱动定义
#ifdef CONFIG_LCD_SUPPORT_ICN6202
&icn6202_panel,
#endif
#ifdef CONFIG_LCD_SUPPORT_TFT08006
&tft08006_panel,
#endif
#ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI
&nt35510_panel,
#endif
按下ESC,输入:wq
,保存刚才的修改并退出
3.修改内核中Kconfig和Makefile
3.1 修改内核中的Kconfig
修改屏驱动目录下的Kconfig,使内核配置中增加tft08006屏驱动的,以便后续选择编译该屏驱动
在屏驱动目录下输入vi Kconfig
tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi Kconfig
在icn6202屏驱动配置的后面增加tft08006屏驱动配置
config LCD_SUPPORT_ICN6202
bool "LCD support icn6202 panel"
default n
---help---
If you want to support icn6202 panel for display driver, select it.
config LCD_SUPPORT_TFT08006
bool "LCD support tft08006 panel"
default n
---help---
If you want to support tft08006 panel for display driver, select it.
config LCD_SUPPORT_NT35510_MIPI
bool "LCD support nt35510_mipi panel"
default n
help
If you want to support nt35510_mipi panel for display driver, select it.
按下ESC,输入:wq
,保存刚才的修改并 退出
3.2 修改内核中的Makefile
返回屏驱动的上一级目录,修改Makefile文件
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp$ vi Makefile
在icn6202屏驱动编译规则的后面增加tft08006屏驱动编译规则
disp-$(CONFIG_LCD_SUPPORT_ICN6202) += lcd/icn6202.o
disp-$(CONFIG_LCD_SUPPORT_TFT08006) += lcd/tft08006.o
disp-$(CONFIG_LCD_SUPPORT_NT35510_MIPI) += lcd/nt35510.o
按下ESC,输入:wq
,保存刚才的修改并退出
4.修改内核配置
在Tina的根目录下输入make kernel_menuconfig
,进入内核配置界面。
book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
在选中屏驱动前,要确保DISP Driver Support(sunxi-disp2)
,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Video support for sunxi
目录下输入Y选中sunxi-disp2
打开lcd节点配置。
→ Device Drivers
→ Graphics support
→ Frame buffer Devices
→ Video support for sunxi
<*> DISP Driver Support(sunxi-disp2)
进入屏驱动目录,输入Y选中tft08006
→ Device Drivers
→ Graphics support
→ Frame buffer Devices
→ Video support for sunxi
→ LCD panels select
[*] LCD support tft08006 panel
如下图所示,选中tft08006屏驱动,编译到内核中。
保存并退出内核配置界面。
5.修改uboot配置
进入uboot的根目录下,执行make menuconfig
,打开uboot配置界 面。
book@100ask:~/workspaces/tina-v853-open/brandy/brandy-2.0/u-boot-2018$ make menuconfig
在选中屏驱动前,要确保DISP Driver Support(sunxi-disp2)
,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Graphics support
目录下输入Y选中sunxi-disp2
打开lcd节点配置。
→ Device Drivers
→ Graphics support
[*] DISP Driver Support(sunxi-disp2) --->
进入屏驱动目录下,输入Y选中TFT08006屏驱动。
→ Device Drivers
→ Graphics support
→ LCD panels select
[*] LCD support TFT08006 panel
如下图所示,选中tft08006屏驱动。
保存并退出uboot配置界面
6.修改设备树
设备树位置:tina-v853-open/device/config/chips/v853/configs/100ask/
book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls
BoardConfig.mk board.dts buildroot env.cfg linux-4.9 sys_config.fex uboot-board.dts
其中board.dts为内核设备树,uboot-board.dts为uboot设备树。