Android的LCM知识点(4)

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"这个设备树给读进去了,然后怎么操作且听下回分解。

你可能感兴趣的:(Android的LCM知识点(4))