对MTK安卓平台LCM驱动的理解

一个项目兼容两块LCM或者更多,在工作中很常见,但是最近碰到个麻烦的事情,两块屏读出的ID总是相同的,搞了很久最后只能通过ADC的方法读LCM的一个分压电阻的电压来区分,具体做法是:
使用封装好了的ADC函数
extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int* rawdata);

该函数第一个参数是ADC通道选择,查看硬件原理图就知道;第二个参数是一个数组指针,用来存放ADC采样得到的原始数据;最后一个参数貌似是采样频率,设置成NULL即可;如此得到ADC的原始采样数据后通过下面计算公司就可以得到电压值:
adcVol=data[0]*1000+data[1]*10; //单位:mV

例如我的代码段是:

extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int* rawdata);
static unsigned int lcm_compare_id(void)
{
    int data[4];
    int adcVol=0;

    int res=IMM_GetOneChannelValue(0,data,0);
    adcVol=data[0]*1000+data[1]*10;

    #ifdef BUILD_LK
        printf("[zlg0374@163.com]adcVol= %d mV \n", adcVol);
    #endif  

    return (adcVol>800)?0:1;
}

在解决LCM的兼容问题过程中对MTK安卓平台的LCM驱动有了一点新理解:
1、LCM驱动的架构
A、LCM驱动源码
…\mediatek\custom\common\kernel\lcm…
B、LCM配置
…\mediatek\config\project\ProjectConfig.mk
源码目录中有一个文件是mt65xx_lcm_list.c,所有的lcm会在这个文件中声明一下自己的驱动,如果config文件中配置了某个lcm,那么这个lcm就会被放到一个列表中,如果兼容多个lcm,那么在config文件中配置了几个lcm,列表中就有几个lcm驱动。
2、如果只有一个lcm,那么系统不做区分,只要上电直接加载这个驱动;但是如果兼容好几块lcm,那么系统上电后就会按照列表中的顺序依次调用驱动中的读ID函数,如果发现ID匹配,那么就加载这个驱动,如果列表从头至尾ID都不匹配,最后加载列表最末端的那个驱动。
3、驱动在列表中的排列顺序不受config文件中配置lcm的先后顺序影响,而是根据mt65xx_lcm_list.c中的顺序排列。

具体这些分析可以参考…\mediatek\platform\mt6572\lk\disp_drv.c文件进一步理解。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值