MTK 平台sensor arch 介绍-kernel

AP-kernel

1.文件相关介绍

路径:kernel-4.14/drivers/misc/mediatek/sensor

在这里插入图片描述
这里2.0 对应的也是mtk hal 2.0的通路,目前正在使用,关注2.0即可
在这里插入图片描述

1.进入到(core)

在这里插入图片描述

这个里面就是hal层提及的hfmanager kernel接口,上层通过ioctorl的方式下发cmd 到kernel
hf_manager.c 就是重要处理来自hal的control cmd 以及将子系统上报给AP 侧的data 返回给hal层

2.进入到(mtk_nanohub)

在这里插入图片描述

主要是AP侧与子系统SCP 侧的control flow 和 data flow
mtk_nanohub 的主要功能是:
(1)将Hf_magager 的cmd 发给 scp
(2)将子系统的上报的data,填充按照需求格式发个Hf_mangager
mtk_nanohub_ipi 以及 nanohub 就是 mtk_nanohub在与scp 交互信息时候调用的apisensor_list.c 是sensor 在kernel 用于转换handle 与对应type

3.(lsm6dsm_secondary)是提供给不适用scp 的 AP侧driver democode 可以忽略

在这里插入图片描述
文件调用关系图
------------------------------------------------------------------------------------------
init & control flow
在这里插入图片描述
init_flow 函数调用关系

一、init

(mtk_nanohub_probe)

初始化阶段主要完成如下操作:
1.填充所有sensor 的具体参数,包括type name vendor rate 以及比例系数

在这里插入图片描述

2.初始化 sensor share dram write pointer event queue ,ap 侧的nonahub 与子系统的交互的 ipi机制及时处理一块share dram
3.初始化一些debug 时间戳同步以及一些scp 启动后的flag
4.初始化ipi 的drive 用于传输message 到scp
5.注册用来检测scp 是否上电的call back,并其thread 获取scp的power UP 信息当检测到上电,会调用callback来初始化与hf_manager 关联的部分
6.起一个thread 处理来自scp 的data
当scp power_up: 会做如下事情:
/* firstly we should update dram information */
/* 1. reset wp queue head and tail */
/* 2. init dram information */
/* 3. send dram information to scp */
/* 4. get device info for mag lib and dynamic list */
/* 5. start timesync */
/* 6. we restore sensor calibration data when scp reboot */
/* 7. we enable sensor which sensor is enable by framework */
/* 8. create mamanger last */
最主要的是完成最后一步:
mtk_nanohub_create_manager();

在这里插入图片描述

mtk_nonahub 通过hf_manager_create
创建hf_dev,将与scp 侧处理control flow的function 全部付给hf_dev,这样hf_manager 就获得了control scp 的方法

(hf_manager.c)

hf_manager 的初始化很简单,就是注册name为hf_manager的设备并提供fops 共hal侧调用

在这里插入图片描述
-------------------------------------------------------------------------------------

二、control flow

在这里插入图片描述
control_flow_函数调用流程图

以enable 为例,紧接着上层的code:

在这里插入图片描述

通过写的方式,将cmd.action 为 HF_MANAGER_SENSOR_ENABLE write 到kernel hf_manager节点:

在这里插入图片描述
在这里插入图片描述

到这里就已经调用到有mtk_nonahub 提供的方法:

在这里插入图片描述
在这里插入图片描述

至此就将cmd 为CONFIG_CMD_ENABLE 的message 发从给出去了
将在scp侧根据cmd 来解析对应 的操作,其他的cmd 如下:

在这里插入图片描述

关于通过fuction:nanohub_external_write 调用如何call 到scp侧 hostintf  有兴趣的可以继续追一下

------------------------------------------------------------------------------------------

data flow

在这里插入图片描述
data_flow_函数调用流程图

在mtk_nanohub init 阶段,起了一个name 为 chre_kthread 的thread 用于接收scp 的data

在这里插入图片描述
在这里插入图片描述

通过以上的调用,chre 的data 传到了函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
hf_manager_report_event data buffer hal
--------------------------------Kernel-MTK-------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鑫鑫缺点金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值