static int fimc_is_scc_video_open(struct file *file) { int ret = 0; struct fimc_is_core *core = video_drvdata(file); struct fimc_is_device_ischain *ischain = core->ischain[core->ischain_index]; struct fimc_is_group *group = &ischain->group_isp; struct fimc_is_subdev *scc = &ischain->scc; struct fimc_is_video_ctx *video_ctx = NULL; dbg_scc("%s\n", __func__); video_ctx = kzalloc(sizeof *video_ctx, GFP_KERNEL); if (video_ctx == NULL) { dev_err(&(core->pdev->dev), "%s:: Failed to kzalloc\n", __func__); ret = -ENOMEM; goto exit; } file->private_data = video_ctx; fimc_is_video_open(video_ctx, ischain, VIDEO_SCC_READY_BUFFERS, &(core->video_scc.common), V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, &fimc_is_scc_qops, core->mem.vb2->ops); fimc_is_subdev_open(scc, group, ENTRY_SCALERC, video_ctx, NULL); exit: return ret; }
static int fimc_is_scp_video_open(struct file *file) { int ret = 0; u32 refcount; struct fimc_is_core *core; struct fimc_is_video *video; struct fimc_is_video_ctx *vctx; struct fimc_is_device_ischain *device; vctx = NULL; video = video_drvdata(file); core = container_of(video, struct fimc_is_core, video_scp); ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_SCP); if (ret) { err("open_vctx is fail(%d)", ret); goto p_err; } info("[SCP:V:%d] %s\n", vctx->instance, __func__); refcount = atomic_read(&core->video_isp.refcount); if (refcount > FIMC_IS_MAX_NODES) { err("invalid ischain refcount(%d)", refcount); close_vctx(file, video, vctx); ret = -EINVAL; goto p_err; } device = &core->ischain[refcount - 1]; ret = fimc_is_video_open(vctx, device, VIDEO_SCP_READY_BUFFERS, video, FIMC_IS_VIDEO_TYPE_CAPTURE, &fimc_is_scp_qops, NULL, &fimc_is_ischain_sub_ops); if (ret) { err("fimc_is_video_open is fail"); close_vctx(file, video, vctx); goto p_err; } ret = fimc_is_subdev_open(&device->scp, vctx, NULL); if (ret) { err("fimc_is_subdev_open is fail"); close_vctx(file, video, vctx); goto p_err; } p_err: return ret; }