更多相关文章:
更多相关文章:
《高通Qualcomm平台lk(light kernel)启动流程1——aboot_init()之前》:
http://blog.csdn.net/u014134180/article/details/78133916
《高通Qualcomm平台lk(light kernel)启动流程2——aboot_init()》:
http://blog.csdn.net/u014134180/article/details/78132580
《高通Qualcomm平台lk(light kernel)启动流程3——到高通lcm屏点亮》:
http://blog.csdn.net/u014134180/article/details/78177040
《[lcm] Qualcomm Android Display Subsystem 架构》
http://blog.csdn.net/u014134180/article/details/78129502
《[lcm] Qualcomm平台的显示屏lcd驱动移植步骤》:
http://blog.csdn.net/u014134180/article/details/78129499
《[lcm] Qualcomm平台兼容多显示屏lcd的方法&并从lk传输到kernel过程》:
http://blog.csdn.net/u014134180/article/details/78166978
《[lcm] Qualcomm平台显示屏lcd添加I2C读取功能》:
http://blog.csdn.net/u014134180/article/details/78176160
1、硬件设计分析——采用IC 的I2C 功能读取ID 寄存器
这颗IC 支持MIPI 和I2C,根据IC 厂FAE 给的datasheet,ID 寄存器只支持I2C 读取,MIPI 不可以读取该寄存器。此颗IC 的I2C 功能使用有如下几点:
- LK 阶段可以通过读取寄存器ID,判断IC 是否正常起来;结合ID 脚,区分一供和二供。
- LK 阶段可以通过读取寄存器ID,判断是否有屏连接,控制无屏情况下,不亮背光。
- Kernel 阶段实现ESD 功能,以及不接屏不亮背光。
- 效果调试,通过I2C 写寄存器。
- 设计弊端:据和IC 厂FAE 沟通,ID 寄存器是区分IC 型号;模组厂并没有和IC 厂沟通,烧写特定寄存器不同的值用区分哪家模组厂,IC 支持,如果这样,硬件设计就可以不需要LCD_ID0 这个pin 脚,还能节省一些功耗。
2、ARM9 更改GPIO 配置
Arm9 默认BLSP 配置是SPI,需要更改为I2C 模式,修改如下。
3、LK 添加代码
1、分析硬件原理图LCD 的I2C 连接在BLSP7.
2、BLSP7 对应的是BLSP2 QUP3,物理地址0x7AF7000,IRQ 是333.参考文档SP80-P3255-6B
。如下图:
3、在bootable/bootloader/lk/target/msm8953/oem_panel.c
文件
i2c 的地址和寄存器ID
qup_blsp_i2c_init
是i2c 初始化函数,lcd_i2c_read_id
函数是读取ID 寄存器的值存储在val,根据val 的值是否是0x21
,判断是否有屏连接,再根据status_id0 判断是一供还是二供。下图是
lcd_i2c_read_id
函数,struct i2c_msg
存储两组数据,第一组是写ID 寄存器地址,第二组是读取的值。
4、qup_blsp_i2c_init 函数在/bootable/bootloader/lk/platform/msm_shared/i2c_qup.c
init 函数主要修改gpio_config_blsp_i2c 和clock_config_blsp_i2c。
gpio_config_blsp_i2c
函数修改对应I2C 的gpio。clock_config_blsp_i2c
函数需要配置几个clock
5、文件路径/bootable/bootloader/lk/msm8953/msm8953-clock.c
- 时序添加时参考本文档中的结构体
4、LK 阶段不接屏不亮背光
在oem_panel.c
文件定义全局变量lcm_exist
,根据i2c 读ID 寄存器的值是否为0x21
判断是
否有连接屏幕,在/platform/msm_shared/display.c
文件中是否要打开背光。
5、kernel 阶段不接屏不亮背光
在kernel/drivers/video/msm/mdss/mdss_dsi_panel.c
文件,函数mdss_dsi_panel_bl_ctrl
中去调用nt1021_read_registers
函数,根据返回值判断是否有连接屏幕,如果没有,就不level值设置为0 , 不输出pwm 。nt1021_read_registers
函数在/kernel/drivers/video/msm/msm_dba/nt51021.c
文件,是kernel 阶段i2c 驱动代码。
6、kernel 阶段I2C 配置
1、在msm8953.dtsi
添加i2c_7
,对比i2c_1
,修改i2c_7
的寄存器。
2、在msm8953-mtp.dts 中添加&i2c_7 结构,添加使能gpio 和pinctrl。硬件设计,gpio63 控制I2C 上拉开关。
3、在msm8953-pinctrl.dtsi
中针对具体的pinctrl-0,pinctrl-1 配置,参考其他gpio 配置。
4、i2c_7 的解析都在/kernel/drivers/video/msm/msm_dba/nt51021.c
文件,被外部调用的函数接口有3 个,如下:
这个函数是被用来做kernel 阶段判断是否有屏连接,是否需要点亮背光。
这个函数是用来优化背光在低亮度抖动,被
mdss_dsi_panel_bklt_dcs
函数调用,文件位
置/kernel/drivers/video/msm/mdss/mdss_dsi_panel.c
,mdss_dsi_panel_bklt_dcs
函数是写主屏IC 产生PWM 寄存器,产生不同的pwm 控制背光亮度变化。这个函数是用来做屏幕ESD,由于主屏ESD 还没有达到要求,软件暂未调试添加。
Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《[lcm] Qualcomm平台显示屏lcd添加I2C读取功能》:
http://blog.csdn.net/u014134180/article/details/78176160
如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。