当前vicap驱动存在复位机制,该机制用于当vicap

出现异常情况时,对

vicap

进行

cru

复位操作。复位机制的4种模式,0,1,2,3在RK驱动文档里有详细介绍;

         当进行rkcif_do_reset_work时,就会调用case RKMODULE_SET_QUICK_STREAM,可以在驱动中加下log打印,看reset success时,是否进入该case;

在cif/capture.c

ret = v4l2_subdev_call(p->subdevs[i], core, ioctl,RKMODULE_SET_QUICK_STREAM, &on);

if (ret)

v4l2_err(&cif_dev->v4l2_dev, "quick stream off subdev:%s failed\n", p->subdevs[i]->name);

***************************************************

而 RKMODULE_SET_QUICK_STREAM 主要是操作stream on和stream off寄存器

int XXXX_set_quick_stream(struct i2c_client *client, u32 stream)

{

if (stream) {

techpoint_write_reg(client, 0x40, 0x8);

techpoint_write_reg(client, 0x23, 0x0);

} else {

techpoint_write_reg(client, 0x40, 0x8);

techpoint_write_reg(client, 0x23, 0x2);

}

return 0;

}

        之前调试遇到客户,在PC端使用会议软件通话时概率性出现csi fifo overflow的问题,画面死机,uvc应用挂了,uac应用还在;也就是预览画面是正常的,只是启动uac时,会出现分屏的现象;

        最后加入复位机制:rockchip, cif-monitor = < 3 2 10 1000 5>;之前模式0,1,2都试过了,log中有看到reset success,但是sensor驱动中没有进入case RKMODULE_SET_QUICK_STREAM;后面将模式修改为3,即热插拔模式(可能兼容了前面的一些模式),进行复位时就会进入RKMODULE_SET_QUICK_STREAM;此时不会出现分屏了。

        需要注意一点的是当vicap出现异常报错时,90%以上都能通过复位机制解决,剩下10%排查硬件!

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。