i.MX6ULL驱动开发 | 10 - 修改LCD驱动点亮LCD显示小企鹅logo

一、LCD硬件

本文中我使用正点原子7’ RGB屏幕,分辨率1024*600。

原理图如下:

二、修改LCD屏幕节点

  • LCD所使用的引脚配置
  • LCD屏幕节点参数修改
  • LCD背光节点信息修改

1. LCD屏幕引脚配置

arch/arm/boot/dts/imx6ull-atk-emmc.dts 设备树描述文件中。

(1)找到 pinctrl_lcdif_dat 节点,该节点描述了LCD数据引脚使用的引脚复用功能和电气属性:

(2)找到 pinctrl_lcdif_ctrl 节点,该节点描述了LCD控制引脚使用的引脚复用功能和电气属性:

因为正点原子开发板硬件设计的原因,LCD接口用了三个SGM3157模拟开关,为了防止模拟开关影响到网络,这里需要将LCD相关引脚的电气属性都修改为0x49,降低LDC相关IO的驱动能力<.font>。

(3)找到 pinctrl_pwm1 节点,该节点描述了LCD背光控制引脚使用的引脚复用功能和电气属性:

这里使用GPIO1_IO08作为LCD背光控制引脚。

(4)找到 pinctrl_lcdif_reset 节点,该节点描述了LCD复位引脚使用的引脚复用功能和电气属性:

这里使用GPIO5_IO09作为LCD复位引脚。

2. LCD屏幕参数节点信息修改

arch/arm/boot/dts/imx6ull-atk-emmc.dts 设备树描述文件中,找到 lcdif 节点的补充描述,该节点中描述了LCD屏幕的驱动参数。

(1)LCD使用到的IO

本文所使用的LCD没有用到复位引脚,去除对应设置。

(2)LCD屏幕参数

  • bits-per-pixel:色彩深度,16bit,RGB565
  • bus-width:数据总线宽度,24bit

本文使用的屏幕支持RGB888,修改如下:

(3)LED时序参数

  • clock-frequency:LCD像素时钟
  • hactive:水平像素点
  • vactive:垂直像素点
  • hfront-porch:hfp参数
  • hback-porch:hbp参数
  • hsync-len:hspw参数
  • vback-porch:vbp参数
  • vfront-porch:vfp参数
  • vsync-len:vspw参数
  • hsync-active:hsync时钟极性
  • vsync-active:vsync时钟极性
  • de-active:de时钟极性
  • pixelclk-active:像素时钟极性

根据本文使用的LCD的数据手册,参数修改如下:

三、运行测试

重新编译设备树:

make dtbs

用新的设备树运行:

四、小企鹅logo如何配置

默认小企鹅logo显示是开启的,手动开启方法如下。
进入内核menuconfig:

-> Device Drivers
	-> Graphics support
		-> Bootup logo (LOGO [=y])
			-> Standard black and white Linux logo
			-> Standard 16-color Linux logo
			-> Standard 224-color Linux logo

五、屏幕亮度调节

1. 设备树描述节点

arch/arm/boot/dts/imx6ull-atk-emmc.dts 设备树描述文件中,找到backlight节点,该节点描述了背光信息。

  • pwm属性:描述使用哪个pwm和pwm频率,使用pwm1,频率5KHz;
  • brightness-levels:背光等级,有8级亮度,对应8种占空比,也可以自行添加其它占空比等级;
  • default-brightness-level:默认背光等级为6,这里修改为7。

2. 测试运行

重新编译设备树,运行测试。

make dtbs

3. 手动设置亮度

/sys/devices/platform/backlight/backlight/backlight 目录中,文件如下:

其中brightness文件内容表示当前亮度等级,max_brightness文件内容表示最大亮度等级。

修改 brightness 文件:

echo 2 > brightness

可以看到屏幕亮度瞬间变暗,注意,这里只是修改当前值,重启后,亮度依然为设备中设置的默认亮度等级。

六、关闭LCD自动熄屏功能

Linux内核中,LCD默认10min后熄屏,此时可以外接USB键盘来通过回车键唤醒

在开发期间,可以不在意功耗,通过修改代码来关闭此功能。

在Linux内核源码中的drivers/tty/vt/vt.c文件中修改(好家伙,这个文件是Linus写的)。

找到 blankinterval 变量,该变量控制LCD关闭时间,单位是s,改为0即可关闭此功能。

// modify by mculover666, disable lcd auto close.
static int blankinterval = 0;

重新编译内核:

make -j16

七、LCD驱动框架浅析

1. 找到LCD对应的驱动

arch/arm/boot/dts/imx6ull.dtsi设备树描述文件中,找到lcdif节点的兼容性:

在linux内核源码中搜索兼容性"fsl,imx6ul-lcdif",找不到,搜索另一个兼容性:“fsl,imx28-lcdif”。

grep -nR "fsl,imx28-lcdif" *

找到驱动文件:drivers/video/fbdev/mxsfb.c。

2. platform驱动模块注册


这里再往下看就是Linux的Framebuffer驱动,需要另起一篇来详细的写写。

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/124017736