LCD驱动是显示子系统DSS的一部分,DSS 是显示子系统display subsystem 的缩写,在kernel中DSS的实现有基于framebuffer或者DRM两种,可以通过不同的配置选择。本篇学习DSS的基本知识,在后面学习LCD的驱动代码,以便做移植。
需要注意的是display系统是独立于GPU的一个模块,我们使用GPU进行绘制(rendering)和合成(composite),通常它针对的是图像缓存;而display主要的是用来显示,虽然它也支持简单的图形变换和合成。TI OMAP平台上有另外的GPU 加速模块进行图像操作。
1. OMAP DSS框架
我们知道驱动的目的是控制和驱动硬件设备,DSS在硬件上分为两部分 :
- DISPC,display controller,主要作用就是overlay,即将多个图形缓存作为输入合成为一个输出。比如不同的两个不同的应用的界面、状态栏界面、鼠标指针等等,都可以作为输入的一个;同时,不同厂家的IC会在该模块增加对图像进行处理比如颜色变换、gama变换、图片旋转等,这取决于它从RAM拿数据,可以对图形缓存做处理比如变形,旋转等;TI的display子系统也差不多,不过不同的版本稍有不同,具体查看参考链接。
- Encoders,将controller的数据转换成输出信号,例如HDMI,MIPI DPI等等;在板级上可以直接连支持相应接口的LCD(或者外接encoder,比如DPI-DVI转换来支持不同的显示设备。