static int fimc_is_sen_video_s_input(struct file *file, void *priv, unsigned int input) { int ret = 0; u32 scenario; struct fimc_is_video_ctx *vctx = file->private_data; struct fimc_is_device_sensor *device; struct fimc_is_framemgr *framemgr; BUG_ON(!vctx); mdbgv_sensor("%s(input : %08X)\n", vctx, __func__, input); device = vctx->device; framemgr = GET_DST_FRAMEMGR(vctx); scenario = (input & SENSOR_SCENARIO_MASK) >> SENSOR_SCENARIO_SHIFT; input = (input & SENSOR_MODULE_MASK) >> SENSOR_MODULE_SHIFT; ret = fimc_is_sensor_s_input(device, input, scenario); if (ret) { merr("fimc_is_sensor_s_input is fail(%d)", device, ret); goto p_err; } p_err: return ret; }
static int fimc_is_scp_video_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl) { int ret = 0; struct fimc_is_video_ctx *vctx = file->private_data; struct fimc_is_framemgr *framemgr; BUG_ON(!vctx); BUG_ON(!ctrl); mdbgv_scp("%s\n", vctx, __func__); framemgr = GET_DST_FRAMEMGR(vctx); switch (ctrl->id) { case V4L2_CID_IS_G_COMPLETES: ctrl->value = framemgr->frame_com_cnt; break; default: err("unsupported ioctl(%d)\n", ctrl->id); ret = -EINVAL; break; } return ret; }
static int fimc_is_scp_video_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl) { int ret = 0; unsigned long flags; struct fimc_is_video_ctx *vctx = file->private_data; struct fimc_is_framemgr *framemgr; struct fimc_is_frame *frame; BUG_ON(!vctx); BUG_ON(!ctrl); mdbgv_scp("%s\n", vctx, __func__); framemgr = GET_DST_FRAMEMGR(vctx); frame = NULL; switch (ctrl->id) { case V4L2_CID_IS_FORCE_DONE: if (framemgr->frame_pro_cnt) { err("force done can be performed(process count %d)", framemgr->frame_pro_cnt); ret = -EINVAL; } else if (!framemgr->frame_req_cnt) { err("force done can be performed(request count %d)", framemgr->frame_req_cnt); ret = -EINVAL; } else { framemgr_e_barrier_irqs(framemgr, 0, flags); fimc_is_frame_request_head(framemgr, &frame); if (frame) { fimc_is_frame_trans_req_to_com(framemgr, frame); buffer_done(vctx, frame->index); } else { err("frame is NULL"); ret = -EINVAL; } framemgr_x_barrier_irqr(framemgr, 0, flags); } break; default: err("unsupported ioctl(%d)\n", ctrl->id); ret = -EINVAL; break; } return ret; }
static int fimc_is_ss1_video_s_input(struct file *file, void *priv, unsigned int input) { int ret = 0; struct fimc_is_video_ctx *vctx = file->private_data; struct fimc_is_device_sensor *device; struct fimc_is_framemgr *framemgr; BUG_ON(!vctx); mdbgv_ss1("%s(input : %d)\n", vctx, __func__, input); device = vctx->device; framemgr = GET_DST_FRAMEMGR(vctx); fimc_is_sensor_s_active_sensor(device, vctx, framemgr, input); return ret; }
static int fimc_is_scp_video_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl) { int ret = 0; unsigned long flags; struct fimc_is_video_ctx *vctx = file->private_data; struct fimc_is_device_ischain *device; struct fimc_is_framemgr *framemgr; struct fimc_is_frame *frame; BUG_ON(!vctx); BUG_ON(!ctrl); mdbgv_scp("%s\n", vctx, __func__); device = vctx->device; if (!device) { merr("device is NULL", vctx); ret = -EINVAL; goto p_err; } framemgr = GET_DST_FRAMEMGR(vctx); frame = NULL; switch (ctrl->id) { case V4L2_CID_IS_FORCE_DONE: if (framemgr->frame_pro_cnt) { err("force done can be performed(process count %d)", framemgr->frame_pro_cnt); ret = -EINVAL; } else if (!framemgr->frame_req_cnt) { err("force done can be performed(request count %d)", framemgr->frame_req_cnt); ret = -EINVAL; } else { framemgr_e_barrier_irqs(framemgr, 0, flags); fimc_is_frame_request_head(framemgr, &frame); if (frame) { fimc_is_frame_trans_req_to_com(framemgr, frame); buffer_done(vctx, frame->index); } else { err("frame is NULL"); ret = -EINVAL; } framemgr_x_barrier_irqr(framemgr, 0, flags); } break; case V4L2_CID_IS_COLOR_RANGE: if (test_bit(FIMC_IS_SUBDEV_START, &device->group_isp.leader.state)) { err("failed to change color range: device started already (0x%08x)", ctrl->value); ret = -EINVAL; } else { device->setfile &= ~FIMC_IS_SCP_CRANGE_MASK; if (ctrl->value) device->setfile |= (FIMC_IS_CRANGE_LIMITED << FIMC_IS_SCP_CRANGE_SHIFT); } break; default: err("unsupported ioctl(%d)\n", ctrl->id); ret = -EINVAL; break; } p_err: return ret; }