概述
初始化从adsp_proc/Sensors/dsps/src/common/sns_pd.c的main函数开始
0. main()
1. coremain_main()//看不到函数原型
1. sns_init() //主线
2. sns_profiling_init() //电源初始化
2. sns_init_once()//主线
3. 用for循环依次执行宏SNS_INIT_FUNCTIONS定义的函数:
sns_init_dsps, // 初始化DSPS services
sns_em_init, //初始化Event Manager
sns_smgr_init, //主线,starts smgr task
sns_sam_init, //Creates the SAM task and internal databases.
sns_scm_init, //Creates the SCM task and internal databases.
sns_debug_init, //Creates the debug task
smgr_qmi_ping_client_start//?貌似是创建与主芯片通信线程
1. sns_smgr_task()//sns_smgr_init创建此task
2.跳过各种初始化,直接进入main loop的while(1)循环中:
sns_smgr_process_msg()按顺序smgr_ssi_devinfo[],先处理注册表数据的devinfo,把设备和驱动对应起来,存储到smgr_sensor_cfg中,按顺序smgr_ssi_devinfo[]
3. sns_smgr_process_reg_data()
4. sns_smgr_process_reg_devinfo()
5. sns_smgr_parse_reg_devinfo_resp()//只处理一类sensor
6. 一类sensor最多可兼容6种芯片,循环6次:
如果支持probe,就使用probe函数检测,如果检测到设备就调用:
7. sns_smgr_populate_cfg_from_devinfo(),退出循环,返回。
如果不支持probe,就假设已经连接,直接调用:
7. sns_smgr_populate_cfg_from_devinfo(),退出循环,返回。//??不理解,这样只会填充第一个此类型的sensor的配置,又不知道对不对。
5. 处理完smgr_ssi_devinfo[]中最后一个设备后调用:
for(3){
5. sns_smgr_populate_ssi_cfg_from_smgr_cfg()//将全局结构smgr_sensor_cfg拷贝到一个临时变量中
5. sns_smgr_update_reg_data()
6. sns_smgr_send_req(smgr_reg_cl_user_handle)
5. sns_hw_update_ssi_reg_items()//初始化GPIO,I2C
如果是SSI:初始化sns_smgr_hw_gpio_cfg和sns_smgr_hw
6.最后一个smgr_ssi_cfg初始化后:
sns_hw_init_i2c_bus_config()
SMGR_BIT_SET(sns_smgr.flags, SMGR_FLAGS_HW_INIT_B);
如果是SNS_REG_GROUP_SSI_GPIO_CFG_V02:初始化sns_smgr_hw_gpio_cfg
6. sns_smgr_req_reg_data(SNS_SMGR_REG_ITEM_TYPE_GROUP)
}
5. sns_smgr_req_reg_data
前面已将SMGR_FLAGS_HW_INIT_B置true,回到sns_smgr_task()的while(1)执行:
1. sns_smgr_dd_init()//初始化所有sensor
最后
以上就是着急硬币为你收集整理的高通 8x26 android sensor 初始化的全部内容,希望文章能够帮你解决高通 8x26 android sensor 初始化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复