1. 硬件相关的操作
LCD驱动程序的核心就是:
-
分配fb_info
-
设置fb_info
-
注册fb_info
-
硬件相关的设置
硬件相关的设置又可以分为3部分:
-
引脚设置
-
时钟设置
-
LCD控制器设置
本节我们使用时钟子系统再设备树中配置好时钟
2. 分析内核自带的驱动程序
2.1 芯片手册
2.2 设备树
我们再设备树中添加这些代码
lcdif: lcdif@021c8000 {
compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
reg = <0x021c8000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
<&clks IMX6UL_CLK_LCDIF_APB>,
<&clks IMX6UL_CLK_DUMMY>; //这个只是为了兼容性
clock-names = "pix", "axi", "disp_axi";
status = "disabled";
};
定义了3个时钟:
-
pix:Pixel clock,用于LCD接口,设置为LCD手册上的参数
-
axi:AXI clock,用于传输数据、读写寄存器,使能即可
-
disp_axi:一个虚拟的时钟,可以不用设置
2.3 代码(内核自带的LCD驱动)
-
获得时钟
host->clk_pix = devm_cl