LCM知识点(4)
在kernel-3.18\drivers\misc\mediatek\video\mt6755\disp_dts_gpio.c
路径下面,我们能看到DTS(设备树)里面定义的所有GPIO对应名称,
/* DTS state mapping name */
static const char *this_state_name[DTS_GPIO_STATE_MAX] = {
"mode_te_gpio",
"mode_te_te",
"lcm_rst_out0_gpio",
"lcm_rst_out1_gpio",
"lcd_bias_enp0_gpio",
"lcd_bias_enp1_gpio"
};
然后找到了long disp_dts_gpio_select_state(DTS_GPIO_STATE s)
函数,这个函数前面分析流程的时候有看到过,这个函数的确是操作GPIO
的,但是我们也可以很清楚的发现,上述的DTS mapping中lcd_bias只操作了两个口,但是硬件原理图上有很多接口,TDN1~3等。而对比硬件原理图,发"lcd_bias_enp0_gpio", "lcd_bias_enp1_gpio"
这两个接口应该是操作GPIO_LCM_BIAS_EP和GPIO_LCM_BIAS_EN的。
后查看硬件原理图和Datesheet,
在LCD的硬件原理图上搜索TDP3,TDN2等关键子,发现的是其他平台的文件用到了这样的关键字,所以没有意义。
在LCD的Datasheet中发现DSWAP是传输DSI数据的,对应的Interface是DSWAP,用codesearch搜索出来的内容和video没有任何关系。
后面直接搜索DIS这样的关键字,倒是有所发现,找到了MTK_MIPI_TX_BASE
这样的地址定义,所以可以按照这个线索追溯一下。
我们能够看到在hardware/qcom/的子目录下有很多的MTK_MIPI_TX_BASE
关键字,但是1不能确定这一层是干嘛的,2是不知道到底有没有用。
在相同查看到MTK_MIPI_TX_BASE
关键字的时候,还看到了#define MTK_DSI_BASE 0x1400c000
这样的定义;所以顺手就查了一下,发现在mt6755.dtsi文件中有出现
dispsys@14008000 {
1625 compatible = "mediatek,dispsys";
1626 reg = <0x14000000 0x1000>, /*DISP_SYS */
1627 <0x14008000 0x1000>, /*DISP_OVL0 */
1628 <0x14009000 0x1000>, /*DISP_OVL1 */
1629 <0x1400A000 0x1000>, /*DISP_RDMA0 */
1630 <0x1400B000 0x1000>, /*DISP_RDMA1 */
1631 <0x1400C000 0x1000>, /*DISP_WDMA0 */
1632 <0x1400D000 0x1000>, /*DISP_COLOR */
1633 <0x1400E000 0x1000>, /*DISP_CCORR */
1634 <0x1400F000 0x1000>, /*DISP_AAL */
1635 <0x14010000 0x1000>, /*DISP_GAMMA */
1636 <0x14011000 0x1000>, /*DISP_DITHER */
1637 <0x14012000 0x1000>, /*DISP_DSI0 */
1638 <0x14013000 0x1000>, /*DISP_DPI0 */
1639 <0x1100E000 0x1000>, /*DISP_PWM */
1640 <0x14014000 0x1000>, /*DISP_MUTEX */
1641 <0x14015000 0x1000>, /*DISP_SMI_LARB0 */
1642 <0x14016000 0x1000>, /*DISP_SMI_COMMOM*/
1643 <0x14017000 0x1000>, /*DISP_WDMA1*/
1644 <0x14018000 0x1000>, /*DISP_OVL0_2L*/
1645 <0x14019000 0x1000>, /*DISP_OVL1_2L*/
1646 <0x10215000 0x1000>; /*MIPITX0,real chip would use this:<0x14018000 0x1000>;*/
这个时候基本可以猜测到DSI的数据接口是通过固定的地址操作的,剩下的就是如何操作的问题了。
我们后面发现/kernel-3.18/drivers/misc/mediatek/cmdq/v2/cmdq_virtual.c
文件中有
/* Get DISP module registers range */
1154 for (i = CMDQ_MODULE_STAT_DISP_OVL0; i <= CMDQ_MODULE_STAT_DISP_DPI0; i++) {
1155 cmdq_dev_get_module_PA("mediatek,DISPSYS",
1156 (i - CMDQ_MODULE_STAT_DISP_OVL0),
1157 &modulePAStat->start[i], &modulePAStat->end[i]);
1158 }
这样的函数,这个函数首先是将 "mediatek,dispsys"这个设备树给读进去了,然后怎么操作且听下回分解。