ST MP157 设备树及驱动开发-LCD驱动

622 阅读2分钟

1 LCD硬件电路

  • 在 Linux 系统中,主流的显示框架有两种:DRM(Direct Rendering Module)框架和FB(FrameBuffer)框架。FB 框架不能处理基于 3D 加速 GPU 显卡,DRM 是可以统一管理 GPU显示,所以 DRM 相对于 FB 更能适应新的显示硬件。比如 DRM 支持多层合成、支持 VSYNC、支持 DMA-BUF、支持 fence 机制等等。 image.png
  • 图形执行管理器(GEM):全称 Graphics Execution Manager,这是一个内存管理器,主要负责内存的分配和释放,可以调用 GPU。
  • DUMB:这是一个 dumb 缓冲区,主要负责一些简单的 buffer 显示,可以通过 CPU 直接渲染 dumb,GPU 不会使用dumb。
  • 内核显示模式设置(KMS):全称 Kernel Mode Setting,主要负责显示的控制,包括屏幕分辨率、屏幕刷新率和颜色深度等等。
  • CRTC:就是指显示控制器,在 DRM 里有多个显存,就可以通过操作 CRTC 来控制要显示那个显存。
  • Encoder:负责从 CRTC 里输出的 timing 时序转换成外部设备所需要的信号的模块,同时也负责控制 LCD 的显示。
  • Connector:连接物理显示设备的连接器,比如 DSI、HDMI 等等。
  • Plane:负责获取显存,在输出到 CRTC 里,说明 CRTC 必须要有一个 Plane。
  • 帧缓冲(FB):能够显示图层的 buffer image.png

2 DRM驱动框架设备树

2.1 LCD屏幕使用的IO配置

  • 打开 arch/arm/boot/dts/stm32mp15-pinctrl.dtsi 文件,在pinctrl节点中找到如下内容: image.png

2.2 LDTC接口节点修改

  • LTDC 节点在 stm32mp151.dtsi 里已经写好一部分了,我们只需要告诉 LTDC 节点输出到RGB LCD 屏里就行。 image.png image.png image.png image.png

2.3 panel-simple.c 文件里面添加屏幕参数(linux-5.4.31-ged58c42cd-v1.4\drivers\gpu\drm\panel)

image.png image.png

3 LCD屏幕背光节点信息

image.png

  • 比如:#pwm-cells =<2>,表示 pwms 属性有 2 个参数,如下所示:pwms= <&pwm4 1 5000000>, pwm4 表示使用 PWM4,后面两个是参数,其中 1 表示使用 PWM4 的通道 2(通道从 1开始);5000000 表示为 200Hz。 image.png image.png image.png

4 DRM运行测试

image.png image.png image.png image.png image.png image.png

5 FB基本测试

image.png image.png image.png image.png