我是靠谱客的博主 坚强冬日,最近开发中收集的这篇文章主要介绍MTK 平台sensor arch 介绍-kernelAP-kernel,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MTK 平台sensor arch 介绍-kernel

  • AP-kernel
    • 1.文件相关介绍
      • 1.进入到(core)
      • 2.进入到(mtk_nanohub)
      • 3.(lsm6dsm_secondary)是提供给不适用scp 的 AP侧driver democode 可以忽略
        • 一、init
        • 二、control flow
    • data flow

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-------------------------------------------------

最后

以上就是坚强冬日为你收集整理的MTK 平台sensor arch 介绍-kernelAP-kernel的全部内容,希望文章能够帮你解决MTK 平台sensor arch 介绍-kernelAP-kernel所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部