uboot屏幕适配源码解析

作者: robe.zhang
上传时间为: 2018-08-09 01:44 PM
2018-08-09
阅读:

uboot屏幕适配源码解析,从源头开始追踪,一直到追踪完为止,本篇有点长,连贯一气呵成也还不错。

uboot屏幕适配的源码源头从这个函数开始 stdio_add_devices追踪,稍后写一篇 uboot 源码完全追踪,会有 uboot 整个完整代码追踪注释,从执行的第1条指令到最后一条指令,能看到这个函数的。这里看到的严格来说是函数指针数组的 stdio_add_devices 项,他是个函数指针,函数入口,执行他就是执行 stdio_add_devices(void) 函数:

打开这个函数,前面的代码和lcd屏幕没啥关系看一眼掠过:

上面这个 drv_video_init() 才开始和 lcd 屏幕有关,打开它看看:

打开这个board_video_skip() 函数,暂时先看这个函数,先看第一部分:

首先获取环境变量 panel,有的话直接把这个名字提取出来,没有的话,逐个检测 displays,检测到了把名字提取出来,同时把索引保存到 i 变量中, i 在整个函数内有效,检测不到,i=0,意思就是第一个 displays 实例作为默认屏幕。displays 就是上一篇添加的屏幕实例。

(上一篇文章中,可以把自己的displays实例放在第一的位置,panel 环境变量直接去掉不要,也行。)

display_count 是 displays 实例的个数,就是你有几个屏幕实例,他给你遍历

再看那个函数第二部分:

打开这个函数mxs_lcd_panel_setup() :

上一篇文章中的添加的displays实例中的 .bus / .pixfmt / .mode 三个成员变量全部提取走了,保存到 fbmode,depth,panel 中,记住这三个变量,稍后分析。还剩一个.enable 变量,这个后面也会用到。

这个panel 变量,看看是个啥:

Panel 变量:

Panel结构体:第一个成员变量 isaBase 是 lcdc 基地址

继续看那个函数的第三部分,enable 用上了,检查一下enable存在的话,就执行 enable 这个函数,displays+i 就是刚才找到的displays 实例,存在 i 变量中,现在使用这个 i

看这个enable 函数具体干了哪些事情:

  • 1,使用 .bus 成员变量,开启总线时钟
  • 2,设置pads,就是配置soc 的管脚
  • 3,(看注释) 复位 LCD,打开背光

看一下 5.9 / 1.8 这两个pads,看原理图:

1.8 是这个 pads,LCD_PWM,调亮度背光的,和上面注释一样

5.9  没找到,1(A),2(B),3(C),4(D),5(E),59=E9,应该是这个:LCD_RESET

这两个pads直接引出到 LCD 接口:


文章分页: 1 2 3 > 

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示