[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

更多相关文章:

更多相关文章:

《高通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 功能使用有如下几点:

  1. LK 阶段可以通过读取寄存器ID,判断IC 是否正常起来;结合ID 脚,区分一供和二供。
  2. LK 阶段可以通过读取寄存器ID,判断是否有屏连接,控制无屏情况下,不亮背光。
  3. Kernel 阶段实现ESD 功能,以及不接屏不亮背光。
  4. 效果调试,通过I2C 写寄存器。
  5. 设计弊端:据和IC 厂FAE 沟通,ID 寄存器是区分IC 型号;模组厂并没有和IC 厂沟通,烧写特定寄存器不同的值用区分哪家模组厂,IC 支持,如果这样,硬件设计就可以不需要LCD_ID0 这个pin 脚,还能节省一些功耗。

2、ARM9 更改GPIO 配置

Arm9 默认BLSP 配置是SPI,需要更改为I2C 模式,修改如下。

[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

3、LK 添加代码

1、分析硬件原理图LCD 的I2C 连接在BLSP7.
2、BLSP7 对应的是BLSP2 QUP3,物理地址0x7AF7000,IRQ 是333.参考文档SP80-P3255-6B。如下图:

[lcm] Qualcomm平台显示屏lcd添加I2C读取功能
[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

3、在bootable/bootloader/lk/target/msm8953/oem_panel.c 文件

  1. i2c 的地址和寄存器ID
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  2. qup_blsp_i2c_init是i2c 初始化函数,lcd_i2c_read_id 函数是读取ID 寄存器的值存储在val,根据val 的值是否是0x21,判断是否有屏连接,再根据status_id0 判断是一供还是二供。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  3. 下图是lcd_i2c_read_id函数,struct i2c_msg 存储两组数据,第一组是写ID 寄存器地址,第二组是读取的值。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

4、qup_blsp_i2c_init 函数在/bootable/bootloader/lk/platform/msm_shared/i2c_qup.c

  1. init 函数主要修改gpio_config_blsp_i2cclock_config_blsp_i2c
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  2. gpio_config_blsp_i2c 函数修改对应I2C 的gpio。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  3. clock_config_blsp_i2c 函数需要配置几个clock
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

5、文件路径/bootable/bootloader/lk/msm8953/msm8953-clock.c

  1. 时序添加时参考本文档中的结构体
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

4、LK 阶段不接屏不亮背光

oem_panel.c 文件定义全局变量lcm_exist,根据i2c 读ID 寄存器的值是否为0x21 判断是
否有连接屏幕,在/platform/msm_shared/display.c 文件中是否要打开背光。

[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

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 驱动代码。

[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

6、kernel 阶段I2C 配置

[lcm] Qualcomm平台显示屏lcd添加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 个,如下:

  1. 这个函数是被用来做kernel 阶段判断是否有屏连接,是否需要点亮背光。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  2. 这个函数是用来优化背光在低亮度抖动,被mdss_dsi_panel_bklt_dcs 函数调用,文件位
    /kernel/drivers/video/msm/mdss/mdss_dsi_panel.cmdss_dsi_panel_bklt_dcs 函数是写主屏IC 产生PWM 寄存器,产生不同的pwm 控制背光亮度变化。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

  3. 这个函数是用来做屏幕ESD,由于主屏ESD 还没有达到要求,软件暂未调试添加。
    [lcm] Qualcomm平台显示屏lcd添加I2C读取功能

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!

《[lcm] Qualcomm平台显示屏lcd添加I2C读取功能》:
http://blog.csdn.net/u014134180/article/details/78176160

[lcm] Qualcomm平台显示屏lcd添加I2C读取功能

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

上一篇:黑马程序员:Java基础总结----反射


下一篇:《构建高可用VMware vSphere 5.X虚拟化架构》——2.5 使用Oracle作为VMware vCenter Server Appliance数据库