This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:ADV7842 Linux 驱动程序

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/601106/linux-am5728-adv7842-linux-driver

器件型号:AM5728

工具/软件:Linux

您好!

我们将 adv7842连接到了 EVM572x Evaboard 上的 VIP。 通过内核配置、我们包括了内核源代码中包含的 adv7842驱动程序。 ADV 7842作为可加载模块提供。 设备树如下所示:

i2c5{(&I)
状态="正常";
时钟频率=<400000>;

adv7842@20{
兼容="Adi、adv7842";
reg =<0x20>;

端口{
adv7842_1:端点{
远程端点=<&V vin3a>;
HSYNC-ACTIVE =<1>;
vsync-active =<1>;
数据激活=<1>;
pclk-sample =<0>;
总线宽度=<16>;
};
};
};
};

vin3a{(&V)
状态="正常";
端点{
从模式;
远程端点=<&adv7842_1>;
};
};

当我们对 adv7842.ko 文件执行 insmod 操作时、会收到以下错误消息:

root@am57xx-EVM:/lib/modules/4.4.19-gdb0b54cdad/kernel/drivers/media/i2c dmesg
[250.749130] adv7842 4-0020: 无平台数据!

root@am57xx-evm:/lib/modules/4.4.19-gdb0b54cdad/kernel/drivers/media/i2c modinfo adv7842
文件名:/lib/modules/4.4.19-gdb0b54cdad/kernel/drivers/media/i2c/adv7842.ko
许可证:GPL
作者:Martin Bugge
作者:Hans Verkuil
说明:Analog Devices ADV7842视频解码器驱动程序
版本:4F006C2154452E099328C17
别名:I2C:adv7842
取决于:
intree:Y
vermagic:4.4.19-gdb0b54cdd SMP 抢占 mod_unload MODVERSIONS ARMv7 p2v8
parm:调试:调试级别(0-2)(int)

原因可能是什么?

感谢你的帮助

Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我意识到包含的 adv7842驱动程序版本不支持器件树绑定。 您是否有支持设备树的更新版本?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marc:

    您可以在最新的 PSDK 3.03 (内核4.4.4.1)中检查 ADV7842 Linux 驱动程序。

    您还可以在主线 Linux (4.11)中检查最新的驱动程序:
    elixir.free-electrons.com/.../adv7842.c

    另请参阅以下 wiki 页面是否位于帮助中:

    processors.wiki.ti.com/.../Linux_Core_VIP_User's_Guide
    processors.wiki.ti.com/.../Processor_SDK_VIP_Driver

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我修改了 adv7842驱动程序、以便提供最低的器件树支持并实现 VIP 所需的所有接口。 VIP 和 adv7842驱动程序已绑定,并创建了/dev/video1设备。 HSYNC、VSYNC 和像素时钟均为输出。


    当我运行 dmabuftest 时、将生成以下输出。


    root@am57xx-EVM:~# dmabuftest -s 32:640x480 -c 1280x800@YUYV -d /dev/video1
    正在打开显示屏...
    使用1个连接器、640x480显示屏、多平面:1.
    正在打开 V4L2..
    导出的缓冲区 FD = 6

    导出的缓冲区 FD = 8

    导出的缓冲区 FD = 10

    导出的缓冲区 FD = 12

    导出的缓冲区 FD = 14

    导出的缓冲区 FD = 16

    ^C
    root@am57xx-EVM:~# dmesg
    [2705.123032] vip2-s0:vIP_open
    [2705.123053] adv7842 4-0020:adv7842_get_format 启动
    [2705.128042] adv7842 4-0020:adv7842_get_format 结束
    [2705.133542] vip2-s0:vip_init_port:g_MBUS_fmt subdev MBUS_code:100A fourcc:RGB3大小:640x480
    [2705.133559] vip2-s0:Calc_format_size:FourCC:RGB3 size:640x480 BPL:1920 img_size:921600
    [2705.133570] vip2-s0:init_stream fourcc:RGB3大小:640x480 BPL:1920 img_size:921600
    [2705.133579] vip2-s0:init_stream vpdma 数据类型:0x16
    [2705.133590] vip2-s0:vIP_init_stream:流实例0x00000001ed442800
    [2705.133623] vip2-s0:g_fmt fourcc:RGB3代码:100A 大小:640x480 BPL:1920 img_size:921600
    [2705.133631] vip2-s0:g_fmt vpdma 数据类型:0x16
    [2705.133637] video1:VIDIOC_G_FMT:type=vid-cap、width=640、height=480、Pixelformat=RGB3、field=none、 字节线=1920、sizeimage=921600、colorspace=8、flags=0x0、YCbCr_enc=0、 量化=0、xfer_func=0
    [2705.133672] vip2-s0:s_fmt 输入 fourcc:YUV 大小:1280x800
    [2705.133681] vip2-s0:try _fmt fourcc:YUV 大小:1280x800
    [2705.133688] vip2-s0:未找到 FourCC 格式(0x56595559)。
    [2705.133697] adv7842 4-0020:adv7842_enum_frame_sizes:
    [2705.133705] adv7842 4-0020:FSE->索引= 0
    [2705.137875] adv7842 4-0020:FSE->code = 4106
    [2705.142285] vip2-s0:try_fmt loop:0 fourcc:RGB3大小:640x480
    [2705.142295] vip2-s0:try_fmt loop:0发现新的更大:640x480
    [2705.143301] adv7842 4-0020:adv7842_enum_frame_sizes:
    [2705.142307] adv7842 4-0020:FSE->索引= 1.
    [2705.146525] adv7842 4-0020:FSE->code = 4106
    [2705.150935] vip2-s0:try fmt 最佳子开发大小:640x480
    [2705.150946] vip2-s0:Calc_format_size:FourCC:RGB3 size:640x480 BPL:1920 img_size:921600
    [2705.150953] vip2-s0:s_fmt try_fmt fccc:RGB3大小:640x480
    [2705.150961] vip2-s0:s_fmt fourcc:RGB3大小:640x480 BPL:1920 img_size:921600
    [2705.150978] vip2-s0:s_fmt pix_TO_MBUS MBUS_code:100A 大小:640x480
    [2705.150985] adv7842 4-0020:adv7842_set_format 开始
    [2705.156074] adv7842 4-0020:format.code = 4106
    [2705.175704] adv7842 4-0020:adv7842_set_format 结束
    [2705.180540] vip2-s0:s_fmt subdev fmt MBUS_code:100A 大小:640x480
    [2705.180547] vip2-s0:s_fmt vpdma 数据类型:0x16
    [2705.180553]视频1:VIDIOC_S_FMT:type=vid-cap、width=640、height=480、Pixelformat=RGB3、field=none、 字节线=1920、sizeimage=921600、colorspace=8、flags=0x0、YCbCr_enc=0、 量化=0、xfer_func=0
    [2705.180933] vip2-s0:获取6个大小均为921600的缓冲器。
    [2705.180948] VB2:__Vb2_queue_alloc:分配了6个缓冲区,每个缓冲区1个平面
    [2705.187677]视频1:VIDIOC_REQBUFS:计数= 6、类型= vid-cap、存储器= dmabuf
    [2705.187764] video1:VIDIOC_QUERYBUF:00:00:00.00000000 index=0、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.187796]时间编码= 00:00:00类型= 0、标志= 0x00000000、帧= 0、用户位= 0x00000000
    [2705.187839] video1:VIDIOC_QUERYBUF:00:00:00.00000000 index=1、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.187872]时间编码=00:00:00类型=0、标志=0x00000000、帧=0、用户位=0x00000000
    [2705.187914] video1:VIDIOC_QUERYBUF:00:00:00.00000000 index=2、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.187939] timecode=00:00:00 type=0、flags=0x00000000、帧=0、userbits=0x00000000
    [2705.187976] video1:VIDIOC_QUERYBUF:00:00.00000000 index=3、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.188001]时间编码=00:00:00类型=0、标志=0x00000000、帧=0、用户位=0x00000000
    [2705.188037] video1:VIDIOC_QUERYBUF:00:00:00.00000000 index=4、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.188063]时间编码=00:00:00类型=0、标志=0x00000000、帧=0、用户位=0x00000000
    [2705.188098] video1:VIDIOC_QUERYBUF:00:00.00000000 index=5、type=vid-cap、flags=0x00002000、field=any、sequence=0、 memory=dmabuf、字节 used=0、offset/userptr=0x0、length=921600
    [2705.188123] timecode=00:00:00 type=0、flags=0x00000000、帧=0、userbits=0x00000000
    [2705.188184] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.198651] VB2:Vb2_core_qbuf:缓冲器0的 qbuf 成功
    [2705.204310] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.212445] VB2:VB2_CORE_qbuf:缓冲器1的 qbuf 成功
    [2705.217973] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.226008] VB2:Vb2_core_qbuf:缓冲器2的 qbuf 成功
    [2705.231565] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.239508] VB2:Vb2_core_qbuf:缓冲器3的 qbuf 已成功
    [2705.245030] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.253054] VB2:Vb2_core_qbuf:缓冲器4的 qbuf 成功
    [2705.258606] VB2:__qbuf_dmabuf:平面0的缓冲区已更改
    [2705.266516] VB2:Vb2_core_qbuf:缓冲器5的 qbuf 已成功
    [2705.272076] vip2-s0:vIP_set_slice_path:
    [2705.272088] vip2-s0:vip_set_slice_path:data_path_select (0000010C):40008080
    [2705.272099] vip2-s0:vIP_set_slice_path:
    [2705.272112] vip2-s0:vIP_set_slice_path:data_path_select (0000010C):00008000
    [2705.272397] vip2-s0:start_streaming: buf 0xed6ba000 6.
    [2705.272406] adv7842 4-0020:adv7842_s_stream:
    [2705.272419] vip2-s0:start_streaming: start_dma buf 0xed6ba000
    [2705.272428] vip2-s0:start_dma:buf:0xed6ba000、VB:0xed6ba000、dma_addr:0x7f59c000
    [2705.272439] VB2:Vb2_core_streamon:成功
    [2705.272445] vip2-s0:IRQ 366 VIP_INT0_STATUS0 0x1
    [2705.276909] vip2-s0:IRQ 0:处理 LIST0_COMPLETE
    [2705.276916] vip2-s0:添加了下一个缓冲器
    [2705.276923] vip2-s0:start_dma:buf:0xed6baa00、VB:0xed6baa00、dma_addr:0x7f3a8000
    [2705.276942] vip2-s0:IRQ 366 VIP_INT0_STATUS0 0x1
    [2705.276950] vip2-s0:IRQ 0:处理 LIST0_COMPLETE
    [2705.276956] vip2-s0:添加了下一个缓冲器
    [2705.276964] vip2-s0:start_dma:buf:0xed6ba600、VB:0xed6ba600、dma_addr:0x7f1b4000
    [2705.277063]视频1:VIDIOC_STREAMON:type=vid-cap
    [2705.277086] VB2:__Vb2_WAIT_TO_DONE_VB:将睡眠等待缓冲区
    [2706.768830] VB2:__Vb2_WAIT_TO_DONE_VB:睡眠中断
    [2706.775679] vip2-s0:vIP_release
    [2706.775691] vip2-s0:vip_stop_streaming:
    [2706.775697] vip2-s0:vIP_DISABLE_SC_PATH:
    [2706.775705] adv7842 4-0020:adv7842_s_stream:
    [2706.775714] vip2-s0:清除通道编号:38
    [2706.775931] vip2-s0:vIP_release_stream:流实例0x00026698ed442800
    [2706.775941] vip2-s0:vIP_release_port:端口实例0xed4f20c0ed64d010

    检查中断:


    root@am57xx-EVM:~# cat /proc/interrupts | grep vip
    366:2 0 CBAR 352电平 vip2-s0
    367:0 CBAR 393电平 vip2-s1
    root@am57xx-EVM:~#
    root@am57xx-EVM:~#
    root@am57xx-EVM:~#

    读取解析器大小寄存器:

    root@am57xx-EVM:~# devmem2 0x48995530
    /dev/mem 已打开。
    映射到地址 bb6f5a000的内存。
    在地址0x48995530 (bb6f5a530)处读取:0x00000000
    root@am57xx-EVM:~#


    VIP 不检测同步和时钟信号。 如何告知 VIP 驱动程序同步和时钟具有哪个极性? 默认情况下,tzhe VIP 使用什么极性?

    谢谢

    Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    对此进行了任何更新? VIP 仅生成前两个中断,然后在运行 yavta dmabuftest 时一直等待。 HSYNC、VSYNC 和 Pclk 正在运行。 是否有任何必须启用的 VIP 才能启动? 可提供子设备驱动程序和/dev/video1设备。

    谢谢

    Marc
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Marc48067"]VIP 未检测到同步和时钟信号。 如何告知 VIP 驱动程序同步和时钟具有哪个极性? 默认情况下,tzhe VIP 使用哪种极性?

    马克

    要定义视频接口、有一些预定义的绑定、例如 HSYNC/vSYNC/pclk 极性、总线宽度等 有关端点绑定 lxr.free-electrons.com/.../video-interfaces.txt 的更多信息、请参阅 Linux 文档

    与 VIP 视频端口连接时,不同的摄像机/视频源具有不同的配置参数。 Hsync、Vsync、Pclk 极性等常见接口属性在不同器件之间可能不同。 V4L2端点允许将这些描述为器件树定义的一部分。 这使得 VIP 驱动程序足够通用、不依赖于摄像机设备。 它还通过简单的设备树修改、为新摄像头的工作提供了灵活性。