为了避免疑问,这是关于编程的问题 - 我正在为将在不同虚拟通道上流出的设备编写设备驱动程序。
到目前为止我认为我的接收器设备应该为 MIPI CSI2 总线的每个虚拟通道都有一个源媒体垫,但例如在 AM625 上有两个驱动程序:
ticsi2rx
csi-bridge
每个都有 4 个源焊盘,没有任何指示它们如何映射到虚拟通道。
在我痛苦地挖掘有关该主题的任何有用信息的过程中,我发现人们尝试将 TP2855 与 i.MX8QM 和 Jetsons 之一一起使用。该设备可以将从模拟源捕获的视频流传输到单独的“虚拟通道”。该芯片的驱动程序代码可在 Rockchip 的 Linux 内核分支上找到:
V4L2_MBUS_CSI2_CHANNEL_0
常量...但进一步搜索显示,这已从 Linux 内核中删除:
https://patchwork.kernel.org/project/linux-media/patch/[电子邮件受保护]/#24738396 这表明 Linux 内核已删除对 CSI2 虚拟通道的支持。
如果是这样,如何将 CSI2 虚拟通道的支持添加到自己的相机驱动程序中以针对更新的内核?
我是否正确地认为,内核代码中不存在对虚拟通道的 i.MX8 芯片支持?
这些 IMX 芯片的驱动程序将 VC 硬编码为 0,即使它们支持 VC 过滤。
https://github.com/torvalds/linux/blob/master/drivers/media/platform/nxp/imx8mq-mipi-csi2.c#L261https://github.com/torvalds/linux/blob/master/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c#L345 杰森一家对 VC 有更好的支持,基本上允许您在单独的视频设备中接收每个 VC 的数据。但 Jetson CSI 并不在主线中。
最近,Linux 内核中添加了对每个 pad 多个流的实验性支持以及 v4l-utils(media-ctl、v4l2-ctl),并支持在 V4L2 子开发内的源和接收器之间路由这些流。
为虚拟频道添加适当的支持,这些部分已经准备就绪。
我已经开始为我的公司提供这些支持。
https://github.com/Demon000/linux/commit/eb72b5b4f28e0020e8eebc8c83791249590c4b12https://github.com/Demon000/v4l-utils/commit/962364c29cd3a3d2eced53a5d4cd408e01436991我还没有向主线发送这些内容的 RFC,但是您可以将它们挑选到您的内核分支中,以便让事情继续进行,直到添加主线支持。