Пример #1
0
static int fimc_cap_s_input(struct file *file, void *priv,
				  unsigned int i)
{
	struct fimc_ctx *ctx = priv;
	struct fimc_dev *fimc = ctx->fimc_dev;
	struct s3c_platform_fimc *pdata = fimc->pdata;
	int ret;

	if (fimc_capture_active(ctx->fimc_dev))
		return -EBUSY;

	if (mutex_lock_interruptible(&fimc->lock))
		return -ERESTARTSYS;

	if (i >= FIMC_MAX_CAMIF_CLIENTS || !pdata->isp_info[i]) {
		ret = -EINVAL;
		goto si_unlock;
	}

	if (fimc->vid_cap.sd) {
		ret = v4l2_subdev_call(fimc->vid_cap.sd, core, s_power, 0);
		if (ret)
			err("s_power failed: %d", ret);
	}

	/* Release the attached sensor subdevice. */
	fimc_subdev_unregister(fimc);

	ret = fimc_isp_subdev_init(fimc, i);

si_unlock:
	mutex_unlock(&fimc->lock);
	return ret;
}
Пример #2
0
static int fimc_cap_s_input(struct file *file, void *priv,
                            unsigned int i)
{
    struct fimc_ctx *ctx = priv;
    struct fimc_dev *fimc = ctx->fimc_dev;
    struct s5p_platform_fimc *pdata = fimc->pdata;

    if (fimc_capture_active(ctx->fimc_dev))
        return -EBUSY;

    if (i >= pdata->num_clients)
        return -EINVAL;


    if (fimc->vid_cap.sd) {
        int ret = v4l2_subdev_call(fimc->vid_cap.sd, core, s_power, 0);
        if (ret)
            err("s_power failed: %d", ret);

        clk_disable(fimc->clock[CLK_CAM]);
    }

    /* Release the attached sensor subdevice. */
    fimc_subdev_unregister(fimc);

    return fimc_isp_subdev_init(fimc, i);
}
Пример #3
0
static int fimc_capture_open(struct file *file)
{
	struct fimc_dev *fimc = video_drvdata(file);
	int ret = 0;

	dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state);

	/* Return if the corresponding video mem2mem node is already opened. */
	if (fimc_m2m_active(fimc))
		return -EBUSY;

	if (mutex_lock_interruptible(&fimc->lock))
		return -ERESTARTSYS;

	if (++fimc->vid_cap.refcnt == 1) {
		ret = fimc_isp_subdev_init(fimc, -1);
		if (ret) {
			fimc->vid_cap.refcnt--;
			ret = -EIO;
		}
	}

	file->private_data = fimc->vid_cap.ctx;

	mutex_unlock(&fimc->lock);
	return ret;
}