Пример #1
0
static int fimc_capture_hw_init(struct fimc_dev *fimc)
{
	struct fimc_ctx *ctx = fimc->vid_cap.ctx;
	struct fimc_pipeline *p = &fimc->pipeline;
	struct fimc_sensor_info *sensor;
	unsigned long flags;
	int ret = 0;

	if (p->subdevs[IDX_SENSOR] == NULL || ctx == NULL)
		return -ENXIO;
	if (ctx->s_frame.fmt == NULL)
		return -EINVAL;

	sensor = v4l2_get_subdev_hostdata(p->subdevs[IDX_SENSOR]);

	spin_lock_irqsave(&fimc->slock, flags);
	fimc_prepare_dma_offset(ctx, &ctx->d_frame);
	fimc_set_yuv_order(ctx);

	fimc_hw_set_camera_polarity(fimc, &sensor->pdata);
	fimc_hw_set_camera_type(fimc, &sensor->pdata);
	fimc_hw_set_camera_source(fimc, &sensor->pdata);
	fimc_hw_set_camera_offset(fimc, &ctx->s_frame);

	ret = fimc_set_scaler_info(ctx);
	if (!ret) {
		fimc_hw_set_input_path(ctx);
		fimc_hw_set_prescaler(ctx);
		fimc_hw_set_mainscaler(ctx);
		fimc_hw_set_target_format(ctx);
		fimc_hw_set_rotation(ctx);
		fimc_hw_set_effect(ctx);
		fimc_hw_set_output_path(ctx);
		fimc_hw_set_out_dma(ctx);
		if (fimc->variant->has_alpha)
			fimc_hw_set_rgb_alpha(ctx);
		clear_bit(ST_CAPT_APPLY_CFG, &fimc->state);
	}
	spin_unlock_irqrestore(&fimc->slock, flags);
	return ret;
}
Пример #2
0
static int fimc_isp_subdev_init(struct fimc_dev *fimc, int index)
{
	struct s3c_fimc_isp_info *isp_info;
	int ret;

	ret = fimc_subdev_attach(fimc, index);
	if (ret)
		return ret;

	isp_info = fimc->pdata->isp_info[fimc->vid_cap.input_index];
	ret = fimc_hw_set_camera_polarity(fimc, isp_info);
	if (!ret) {
		ret = v4l2_subdev_call(fimc->vid_cap.sd, core,
				       s_power, 1);
		if (!ret)
			return ret;
	}

	fimc_subdev_unregister(fimc);
	err("ISP initialization failed: %d", ret);
	return ret;
}
Пример #3
0
static int fimc_isp_subdev_init(struct fimc_dev *fimc, unsigned int index)
{
    struct s5p_fimc_isp_info *isp_info;
    struct s5p_platform_fimc *pdata = fimc->pdata;
    int ret;

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

    isp_info = &pdata->isp_info[index];

    if (isp_info->clk_frequency)
        clk_set_rate(fimc->clock[CLK_CAM], isp_info->clk_frequency);

    ret = clk_enable(fimc->clock[CLK_CAM]);
    if (ret)
        return ret;

    ret = fimc_subdev_attach(fimc, index);
    if (ret)
        return ret;

    ret = fimc_hw_set_camera_polarity(fimc, isp_info);
    if (ret)
        return ret;

    ret = v4l2_subdev_call(fimc->vid_cap.sd, core, s_power, 1);
    if (!ret)
        return ret;

    /* enabling power failed so unregister subdev */
    fimc_subdev_unregister(fimc);

    v4l2_err(&fimc->vid_cap.v4l2_dev, "ISP initialization failed: %d\n",
             ret);

    return ret;
}