基于RV1126平台imx291分析 --- media部件连接 一

Linux v4l2架构学习总链接

entity之间什么时候创建连接?怎么连接?

这就要牵扯到subdev注册这部分了

看下面2篇文章

基于RV1126平台imx291分析 --- rkcif_mipi注册

v4l2_async_subdev_notifier_register 分析

在函数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 subdev\n");

	return 0;
}

   对于rkcif_mipi的bound函数来说,好像并没有entity相关的操作,这里只是把mipi csi的subdev放入cif_dev->sensors的数组中存储。

  这里是很有用的,后面会分析到。

  实际上entity是在complete中操作的,这个是所有notifier中最后被操作的,所以我们也最后再分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dianlong_lee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值