1、HenryDebug::get spi master succeessfully---------> 和 HenryDebug::iss_register_subdev_group done--------->之间 增加了cmv4000的内容,是如何调用到cmv4000的?是这个函数v4l2_spi_new_subdev中有什么机制调用了device。还是仅仅是并行的执行了cmv4000?
2、cmv4000的probe函数执行到cmv4000_frame_req函数后,如何 切换到v4l2_ctrl_add_handler函数,是通过设置寄存器的吗?
iss.c中的iss_register_subdev_group调用了v4l2_spi_new_subdev函数->v4l2_device_register_subdev->v4l2_ctrl_add_handler
v4l2_ctrl_add_handler被调用了两次的原因是在iss.c中iss_register_entities函数和iss_register_subdev_group函数都调用了相应的v4l2_spi_new_subdev函数和omap4iss_csi2_register_entities函数。
3. Why do the touch screen need to use the I2C bus form
4.
[ 13.011810] HenryDebug::ov5640_mod_init--------------->
[ 13.017639] HenryDebug::cmv4000_mod_init------------->
[ 13.023376] HenryDebug::iss_init-------------->
加载这些驱动的顺序是什么?为什么在cmv4000_mod_init之后并未执行下去,而是执行了iss_init?
5、是谁调用了
HenryDebug::ft5x0x_openEnter---------------------->
6、从yavta.c中的调用如何调用到v4l2_ioctl.c中的函数。接口是以什么样的形式。
是通过filep调用得到的。
7、从v4l2_ioctl.c到cmv4000.c中的调用到相关的ioctl函数是怎么调用到的?
8、为什么要进行这样的转换?iss_video_mbus_to_pix
9、是怎么跳转到iss_csi2.c函数中的?
之前有iss_csi2.c的初始化,为什么初始化和iss_initialize_modules函数是分开的?
难道是双核,多线程的原因?
iss_csi2.c中的v4l2_subdev_init(sd, &csi2_ops);----->
static const struct v4l2_subdev_ops csi2_ops = {
.video = &csi2_video_ops,
.pad = &csi2_pad_ops,
};
---->
static const struct v4l2_subdev_video_ops csi2_video_ops = {
.s_stream = csi2_set_stream,
};
在csi2_set_stream函数中有csi2_print_status(csi2);即打印出了这些状态。
v4l2_subdev_init(sd, &csi2_ops);----->因此我们想该ops是在subdev中的调用生成的。因此应当是抓图时候触发了subdev的生成,所以调用了这个ops。
这些是条件触发而不是顺序触发。
HenryDebug::start to get stream----->中是在cmv4000.c中 v4l2_spi_subdev_init(&cmv4000->subdev, spi, &cmv4000_subdev_ops);
进行初始化的。是同样的道理。
10、在
[ 44.607452] vb2: Will sleep waiting for buffers
[ 44.806030] MeterDebug omap4iss_csi2_isr------->
两者之中同样是有一个条件语句。
omap4iss_csi2_isr - CSI2 interrupt handling.
处理中断,等待buffer,因此亦为条件语句。
我们可以在iss.c中的iss_probe函数中看到了注册如下中断:
if (request_irq(iss->irq_num, iss_isr, IRQF_SHARED, "OMAP4 ISS", iss)) {
dev_err(iss->dev, "Unable to request IRQ\n");
ret = -EINVAL;
goto error_iss;
}
而中断处理函数iss_isr中调用了函数iss_isr---->
if (irqstatus & ISS_HL_IRQ_CSIA)
omap4iss_csi2_isr(&iss->csi2a);
omap4iss_csi2_isr - CSI2 interrupt handling.
中断是反常规的,不需要按顺序执行,即只要之前初始化完毕即可。
11、为什么在irqstatus = readl(iss->regs[OMAP4_ISS_MEM_TOP] + ISS_HL_IRQSTATUS_5);
writel(irqstatus, iss->regs[OMAP4_ISS_MEM_TOP] + ISS_HL_IRQSTATUS_5);
从寄存器中读取数据之后还要往该寄存器中写入?难道读取会消去寄存器中的值。
12、中断CSIA_IRQ发生在iss.c中的probe函数注册中断时的中断函数中iss_isr,其中有发生中断时的调用iss_isr_dbg。
13、为什么要先使用640*480成功之后再使用2048*2048的格式。
为什么要先使用OV5640测试成功之后再测试cmv4000。
14、这个主板的名字叫什么?OMAP4460
15、对于FPGA和TC358746的控制和配合是通过什么形式的?