int atomisp_subdev_register_entities(struct atomisp_sub_device *isp_subdev, struct v4l2_device *vdev) { int ret; /* Register the subdev and video node. */ ret = v4l2_device_register_subdev(vdev, &isp_subdev->subdev); if (ret < 0) goto error; ret = atomisp_video_register(&isp_subdev->video_out_mo, vdev); if (ret < 0) goto error; ret = atomisp_video_register(&isp_subdev->video_out_vf, vdev); if (ret < 0) goto error; ret = atomisp_video_register(&isp_subdev->video_in, vdev); if (ret < 0) goto error; return 0; error: atomisp_subdev_unregister_entities(isp_subdev); return ret; }
int atomisp_subdev_register_entities(struct atomisp_sub_device *asd, struct v4l2_device *vdev) { int ret; /* Register the subdev and video node. */ ret = v4l2_device_register_subdev(vdev, &asd->subdev); if (ret < 0) goto error; ret = atomisp_video_register(&asd->video_out_capture, vdev); if (ret < 0) goto error; ret = atomisp_video_register(&asd->video_out_vf, vdev); if (ret < 0) goto error; ret = atomisp_video_register(&asd->video_out_preview, vdev); if (ret < 0) goto error; /* * file input only supported on subdev0 * so do not create video node for subdevs other then subdev0 */ if (asd->index) return 0; ret = atomisp_video_register(&asd->video_in, vdev); if (ret < 0) goto error; return 0; error: atomisp_subdev_unregister_entities(asd); return ret; }