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; }
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; }
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; }