LCM知识点(5)
上篇分析到mediatek,dispsys
这里,这个设备树节点里面包含了很多关于disp的寄存器,我们重点寻找替代TDP0,TDN0等引脚功能的寄存器。
我从各种各样的代码中发现了一些蛛丝马迹,比如在kernel-3.18\drivers\misc\mediatek\video\mt6755\ddp_dsi.c
里面就有一个int ddp_dsi_init(DISP_MODULE_ENUM module, void *cmdq)
函数,此函数中有一段
clock_lane = (INREG32(MIPI_TX_REG_BASE + 0x4));/*MIPITX_DSI_CLOCK_LANE*/
data_lane3 = (INREG32(MIPI_TX_REG_BASE + 0x14));/*MIPITX_DSI_DATA_LANE3*/
data_lane2 = (INREG32(MIPI_TX_REG_BASE + 0x10));/*MIPITX_DSI_DATA_LANE2*/
data_lane1 = (INREG32(MIPI_TX_REG_BASE + 0xc));/*MIPITX_DSI_DATA_LANE1*/
data_lane0 = (INREG32(MIPI_TX_REG_BASE + 0x8));/*MIPITX_DSI_DATA_LANE0*/
这应该是寄存器地址,而且正是数据传输寄存器的地址;
而后继续追溯,可以看到在kernel-3.18/drivers/misc/mediatek/video/mt6755/ddp_reg.h
有定义#define MIPI_TX_REG_BASE (mipi_tx_reg)
而后mipi_tx_reg = dispsys_reg[DISP_REG_MIPI];
则出现在kernel-3.18/drivers/misc/mediatek/video/mt6755/ddp_drv.c
当中。继续追溯则可以发现kernel-3.18/drivers/misc/mediatek/video/mt6755/ddp_drv.c
中出现了volatile unsigned long dispsys_reg[DISP_REG_NUM] = { 0 };
这样的代码,继续->kernel-3.18/drivers/misc/mediatek/video/mt6755/ddp_drv.c
中可以看到dispsys_reg[i] = (unsigned long)dispsys_dev->regs[i];
读取了寄存器的代码。
所以这到底读取的寄存器基地址是多少还需要深究。
另外发现这样看代码的方式有点蜻蜓点水,没有架构;所以决定将这几个目录都列出来再看。video,ddp什么的
从vido的目录上看有四个
common
include
mt6755
mtdummy
我首先发现mt6755比较重要,里面的文件开头有比较多的ddp开头的,也有比较多的mtk开头的。所以驱动层主要函数应该在这里才对。
能够确定的是lcm驱动里面是没有读取过dsi显示数据的。像素等东西的。
这里写一个与主题无关的mark,在编译userdebug的时候出现了tp无法被加载,但是我在mtk_tpd的tpd_probe加载函数的位置加了200ms延迟,就能找到了;eng和user版本都没有这个问题。所以这可能和mtk的进程调度有关系,加载是按照死顺序进行的呢还是怎样?当然,我也在driver里面加了锁试过,没有效果,所以后面继续。
这次更新先到此,其他事情的确太多了,而且项目上也不让我做LCM,所以写这些都很吃力的。
(最近个人任务太多,有其他事必须all in,所以lcm这块停更。希望事情能成,祝武运昌隆)
网友评论