xilinx-vipp驱动分析

本文分析了Xilinx-VIPP驱动,指出xvipp是一个v4l2设备,并且在media框架中注册。探讨了probe函数,包括xvip_composite_v4l2_init和xvip_graph_init的作用,涉及DMA通道初始化、子设备注册以及通知器机制。子设备如python1300_core和rxif通过v4l2_async_register_subdev注册,与xvip_composite_device形成统一管理。在应用层,关注的重点是xilinx-dma.c中的DMA通道设备,因为它作为video_device进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看设备结构体:

struct xvip_composite_device {
	struct v4l2_device v4l2_dev;
	struct media_device media_dev;
	struct device *dev;

	struct v4l2_async_notifier notifier;
	struct list_head entities;
	unsigned int num_subdevs;

	struct list_head dmas;
	u32 v4l2_caps;
};

由上面可知xvipp为一个v4l2设备,同时将其加入media框架中,notifier为v4l2同步子设备的通知器,即子设备被注册后,通知消息将会添加到该结构体中。同时定一个entites链表,用来保存整个pipeline通路上的实体。同时定义一个DMA通道的链表。

下面看一下probe函数:

static int xvip_composite_probe(struct platform_device *pdev)
{
	struct xvip_composite_device *xdev;
	int ret;

	xdev = devm_kzalloc(&pdev->dev, sizeof(*xdev), GFP_KERNEL);
	if (!xdev)
		return -ENOMEM;

	xdev->dev = &pdev->dev;
	INIT_LIST_HEAD(&xdev->entities);
	INIT_LIST_HEAD(&xdev->dmas);

	ret = xvip_composite_v4l2_init(xdev);
	if (ret < 0)
		return ret;

	ret = xvip_graph_init(xdev);
	if (ret < 0)
		goto error;

	platfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值