完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
entity之间什么时候创建连接?怎么连接?
这就要牵扯到subdev注册这部分了 在函数v4l2_async_notifier_try_all_subdevs中,会从subdev_list上找到sd和当前设备notifier->waiting上asd进行匹配 这里分四步分析: 一,rkcif_mipi与mipi csi 我们知道mipi csi dts中remote-endpoint是指向rkciff_mipi的,所以2者是可以匹配到的 v4l2_async_notifier_try_all_subdevs() -> v4l2_async_match_notify() -> v4l2_async_notifier_call_bound() 这里会调用到rkcif_mipi中的notify->bound函数 static const struct v4l2_async_notifier_operations subdev_notifier_ops = { .bound = subdev_notifier_bound, .complete = subdev_notifier_complete, }; static int subdev_notifier_bound(struct v4l2_async_notifier *notifier, struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd) { struct rkcif_device *cif_dev = container_of(notifier, struct rkcif_device, notifier); struct rkcif_async_subdev *s_asd = container_of(asd, struct rkcif_async_subdev, asd); if (cif_dev->num_sensors == ARRAY_SIZE(cif_dev->sensors)) return -EBUSY; cif_dev->sensors[cif_dev->num_sensors].lanes = s_asd->lanes; cif_dev->sensors[cif_dev->num_sensors].mbus = s_asd->mbus; cif_dev->sensors[cif_dev->num_sensors].sd = subdev; ++cif_dev->num_sensors; v4l2_dbg(1, rkcif_debug, subdev, "Async registered subdevn"); return 0; } 对于rkcif_mipi的bound函数来说,好像并没有entity相关的操作,这里只是把mipi csi的subdev放入cif_dev->sensors的数组中存储。 这里是很有用的,后面会分析到。 实际上entity是在complete中操作的,这个是所有notifier中最后***作的,所以我们也最后再分析。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
1642 浏览 0 评论
1743 浏览 1 评论
1425 浏览 1 评论
2762 浏览 1 评论
3867 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-6 05:13 , Processed in 0.556266 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号