浅谈RK平台vicap的复位机制

         当前vicap驱动存在复位机制,该机制用于当vicap 出现异常情况时,对 vicap 进行 cru 复位操作。复位机制的4种模式,0,1,2,3在RK驱动文档里有详细介绍;
浅谈RK平台vicap的复位机制_第1张图片

         当进行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%排查硬件!

你可能感兴趣的:(camera,开发语言,嵌入式硬件,c语言,物联网)