概述
针对MTK平台,抽象出一层hwmsensor,来管理所有的模块,为上层提供统一的接口,屏蔽下层硬件不同而导致的差异性。
MTK代码里使用了一个hwmsensor模块控制所有的sensor。
代码路径:mediatek/kernel/drivers/hwmon/hwmsen/hwmsen_dev.c,编译成hwmsen_dev.o,系统起来后会生成/dev/hwmsensor设备。
使用sensor_operate接口管理所有sensor驱动,向上提供hwmsen_unlocked_ioctl接口
再往下就是具体的sensor驱动代码了,根据MTK的驱动结构完成sensor_operate接口,并调用hwmsen_dev.c里的hwmsen_attach函数,把sensor_operate接口加到hwmsen_dev的列表里,这样hwmsen_dev里就能调用所有sensor的sensor_operate函数。
以tmd2772为例:
hwmsensor模块中还提供一种中断方法,poll轮询方法,通过input子系统实现数据交互
在hwmsen_poll函数中,调度sensor工作队列,读取sensor驱动层数据
static void hwmsen_poll(unsigned long data)
{
struct hwmdev_object *obj = (struct hwmdev_object *)data;
if(obj != NULL)
{
queue_work(sensor_workqueue, &obj->report);
}
}
在static void hwmsen_work_func(struct work_struct *work)函数中,遍历hwmsen_dev列表,读取每一个sensor列表中的数据。
input_report_rel(obj->idev, EVENT_TYPE_SENSOR, event_type);
input_sync(obj->idev);//modified
将数据上报的应用层
最后
以上就是呆萌路灯为你收集整理的MTK平台下的sensor操作的全部内容,希望文章能够帮你解决MTK平台下的sensor操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复