|
@@ -241,7 +241,7 @@ static int fimc_get_scaler_factor(u32 src, u32 tar, u32 *ratio, u32 *shift)
|
|
|
|
|
|
int fimc_set_scaler_info(struct fimc_ctx *ctx)
|
|
|
{
|
|
|
- struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
+ const struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
struct device *dev = &ctx->fimc_dev->pdev->dev;
|
|
|
struct fimc_scaler *sc = &ctx->scaler;
|
|
|
struct fimc_frame *s_frame = &ctx->s_frame;
|
|
@@ -440,7 +440,7 @@ void fimc_set_yuv_order(struct fimc_ctx *ctx)
|
|
|
|
|
|
void fimc_prepare_dma_offset(struct fimc_ctx *ctx, struct fimc_frame *f)
|
|
|
{
|
|
|
- struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
+ const struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
u32 i, depth = 0;
|
|
|
|
|
|
for (i = 0; i < f->fmt->colplanes; i++)
|
|
@@ -524,7 +524,7 @@ static int fimc_set_color_effect(struct fimc_ctx *ctx, enum v4l2_colorfx colorfx
|
|
|
static int __fimc_s_ctrl(struct fimc_ctx *ctx, struct v4l2_ctrl *ctrl)
|
|
|
{
|
|
|
struct fimc_dev *fimc = ctx->fimc_dev;
|
|
|
- struct fimc_variant *variant = fimc->variant;
|
|
|
+ const struct fimc_variant *variant = fimc->variant;
|
|
|
unsigned int flags = FIMC_DST_FMT | FIMC_SRC_FMT;
|
|
|
int ret = 0;
|
|
|
|
|
@@ -591,7 +591,7 @@ static const struct v4l2_ctrl_ops fimc_ctrl_ops = {
|
|
|
|
|
|
int fimc_ctrls_create(struct fimc_ctx *ctx)
|
|
|
{
|
|
|
- struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
+ const struct fimc_variant *variant = ctx->fimc_dev->variant;
|
|
|
unsigned int max_alpha = fimc_get_alpha_mask(ctx->d_frame.fmt);
|
|
|
struct fimc_ctrls *ctrls = &ctx->ctrls;
|
|
|
struct v4l2_ctrl_handler *handler = &ctrls->handler;
|
|
@@ -881,7 +881,7 @@ static int fimc_m2m_resume(struct fimc_dev *fimc)
|
|
|
|
|
|
static int fimc_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- struct fimc_drvdata *drv_data = fimc_get_drvdata(pdev);
|
|
|
+ const struct fimc_drvdata *drv_data = fimc_get_drvdata(pdev);
|
|
|
struct s5p_platform_fimc *pdata;
|
|
|
struct fimc_dev *fimc;
|
|
|
struct resource *res;
|
|
@@ -1053,7 +1053,7 @@ static int __devexit fimc_remove(struct platform_device *pdev)
|
|
|
}
|
|
|
|
|
|
/* Image pixel limits, similar across several FIMC HW revisions. */
|
|
|
-static struct fimc_pix_limit s5p_pix_limit[4] = {
|
|
|
+static const struct fimc_pix_limit s5p_pix_limit[4] = {
|
|
|
[0] = {
|
|
|
.scaler_en_w = 3264,
|
|
|
.scaler_dis_w = 8192,
|
|
@@ -1088,7 +1088,7 @@ static struct fimc_pix_limit s5p_pix_limit[4] = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc0_variant_s5p = {
|
|
|
+static const struct fimc_variant fimc0_variant_s5p = {
|
|
|
.has_inp_rot = 1,
|
|
|
.has_out_rot = 1,
|
|
|
.has_cam_if = 1,
|
|
@@ -1100,7 +1100,7 @@ static struct fimc_variant fimc0_variant_s5p = {
|
|
|
.pix_limit = &s5p_pix_limit[0],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc2_variant_s5p = {
|
|
|
+static const struct fimc_variant fimc2_variant_s5p = {
|
|
|
.has_cam_if = 1,
|
|
|
.min_inp_pixsize = 16,
|
|
|
.min_out_pixsize = 16,
|
|
@@ -1110,7 +1110,7 @@ static struct fimc_variant fimc2_variant_s5p = {
|
|
|
.pix_limit = &s5p_pix_limit[1],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc0_variant_s5pv210 = {
|
|
|
+static const struct fimc_variant fimc0_variant_s5pv210 = {
|
|
|
.pix_hoff = 1,
|
|
|
.has_inp_rot = 1,
|
|
|
.has_out_rot = 1,
|
|
@@ -1123,7 +1123,7 @@ static struct fimc_variant fimc0_variant_s5pv210 = {
|
|
|
.pix_limit = &s5p_pix_limit[1],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc1_variant_s5pv210 = {
|
|
|
+static const struct fimc_variant fimc1_variant_s5pv210 = {
|
|
|
.pix_hoff = 1,
|
|
|
.has_inp_rot = 1,
|
|
|
.has_out_rot = 1,
|
|
@@ -1137,7 +1137,7 @@ static struct fimc_variant fimc1_variant_s5pv210 = {
|
|
|
.pix_limit = &s5p_pix_limit[2],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc2_variant_s5pv210 = {
|
|
|
+static const struct fimc_variant fimc2_variant_s5pv210 = {
|
|
|
.has_cam_if = 1,
|
|
|
.pix_hoff = 1,
|
|
|
.min_inp_pixsize = 16,
|
|
@@ -1148,7 +1148,7 @@ static struct fimc_variant fimc2_variant_s5pv210 = {
|
|
|
.pix_limit = &s5p_pix_limit[2],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc0_variant_exynos4 = {
|
|
|
+static const struct fimc_variant fimc0_variant_exynos4210 = {
|
|
|
.pix_hoff = 1,
|
|
|
.has_inp_rot = 1,
|
|
|
.has_out_rot = 1,
|
|
@@ -1164,9 +1164,8 @@ static struct fimc_variant fimc0_variant_exynos4 = {
|
|
|
.pix_limit = &s5p_pix_limit[1],
|
|
|
};
|
|
|
|
|
|
-static struct fimc_variant fimc3_variant_exynos4 = {
|
|
|
+static const struct fimc_variant fimc3_variant_exynos4210 = {
|
|
|
.pix_hoff = 1,
|
|
|
- .has_cam_if = 1,
|
|
|
.has_cistatus2 = 1,
|
|
|
.has_mainscaler_ext = 1,
|
|
|
.has_alpha = 1,
|
|
@@ -1178,8 +1177,38 @@ static struct fimc_variant fimc3_variant_exynos4 = {
|
|
|
.pix_limit = &s5p_pix_limit[3],
|
|
|
};
|
|
|
|
|
|
+static const struct fimc_variant fimc0_variant_exynos4x12 = {
|
|
|
+ .pix_hoff = 1,
|
|
|
+ .has_inp_rot = 1,
|
|
|
+ .has_out_rot = 1,
|
|
|
+ .has_cam_if = 1,
|
|
|
+ .has_isp_wb = 1,
|
|
|
+ .has_cistatus2 = 1,
|
|
|
+ .has_mainscaler_ext = 1,
|
|
|
+ .has_alpha = 1,
|
|
|
+ .min_inp_pixsize = 16,
|
|
|
+ .min_out_pixsize = 16,
|
|
|
+ .hor_offs_align = 2,
|
|
|
+ .min_vsize_align = 1,
|
|
|
+ .out_buf_count = 32,
|
|
|
+ .pix_limit = &s5p_pix_limit[1],
|
|
|
+};
|
|
|
+
|
|
|
+static const struct fimc_variant fimc3_variant_exynos4x12 = {
|
|
|
+ .pix_hoff = 1,
|
|
|
+ .has_cistatus2 = 1,
|
|
|
+ .has_mainscaler_ext = 1,
|
|
|
+ .has_alpha = 1,
|
|
|
+ .min_inp_pixsize = 16,
|
|
|
+ .min_out_pixsize = 16,
|
|
|
+ .hor_offs_align = 2,
|
|
|
+ .min_vsize_align = 1,
|
|
|
+ .out_buf_count = 32,
|
|
|
+ .pix_limit = &s5p_pix_limit[3],
|
|
|
+};
|
|
|
+
|
|
|
/* S5PC100 */
|
|
|
-static struct fimc_drvdata fimc_drvdata_s5p = {
|
|
|
+static const struct fimc_drvdata fimc_drvdata_s5p = {
|
|
|
.variant = {
|
|
|
[0] = &fimc0_variant_s5p,
|
|
|
[1] = &fimc0_variant_s5p,
|
|
@@ -1190,7 +1219,7 @@ static struct fimc_drvdata fimc_drvdata_s5p = {
|
|
|
};
|
|
|
|
|
|
/* S5PV210, S5PC110 */
|
|
|
-static struct fimc_drvdata fimc_drvdata_s5pv210 = {
|
|
|
+static const struct fimc_drvdata fimc_drvdata_s5pv210 = {
|
|
|
.variant = {
|
|
|
[0] = &fimc0_variant_s5pv210,
|
|
|
[1] = &fimc1_variant_s5pv210,
|
|
@@ -1201,18 +1230,30 @@ static struct fimc_drvdata fimc_drvdata_s5pv210 = {
|
|
|
};
|
|
|
|
|
|
/* EXYNOS4210, S5PV310, S5PC210 */
|
|
|
-static struct fimc_drvdata fimc_drvdata_exynos4 = {
|
|
|
+static const struct fimc_drvdata fimc_drvdata_exynos4210 = {
|
|
|
+ .variant = {
|
|
|
+ [0] = &fimc0_variant_exynos4210,
|
|
|
+ [1] = &fimc0_variant_exynos4210,
|
|
|
+ [2] = &fimc0_variant_exynos4210,
|
|
|
+ [3] = &fimc3_variant_exynos4210,
|
|
|
+ },
|
|
|
+ .num_entities = 4,
|
|
|
+ .lclk_frequency = 166000000UL,
|
|
|
+};
|
|
|
+
|
|
|
+/* EXYNOS4212, EXYNOS4412 */
|
|
|
+static const struct fimc_drvdata fimc_drvdata_exynos4x12 = {
|
|
|
.variant = {
|
|
|
- [0] = &fimc0_variant_exynos4,
|
|
|
- [1] = &fimc0_variant_exynos4,
|
|
|
- [2] = &fimc0_variant_exynos4,
|
|
|
- [3] = &fimc3_variant_exynos4,
|
|
|
+ [0] = &fimc0_variant_exynos4x12,
|
|
|
+ [1] = &fimc0_variant_exynos4x12,
|
|
|
+ [2] = &fimc0_variant_exynos4x12,
|
|
|
+ [3] = &fimc3_variant_exynos4x12,
|
|
|
},
|
|
|
.num_entities = 4,
|
|
|
.lclk_frequency = 166000000UL,
|
|
|
};
|
|
|
|
|
|
-static struct platform_device_id fimc_driver_ids[] = {
|
|
|
+static const struct platform_device_id fimc_driver_ids[] = {
|
|
|
{
|
|
|
.name = "s5p-fimc",
|
|
|
.driver_data = (unsigned long)&fimc_drvdata_s5p,
|
|
@@ -1221,7 +1262,10 @@ static struct platform_device_id fimc_driver_ids[] = {
|
|
|
.driver_data = (unsigned long)&fimc_drvdata_s5pv210,
|
|
|
}, {
|
|
|
.name = "exynos4-fimc",
|
|
|
- .driver_data = (unsigned long)&fimc_drvdata_exynos4,
|
|
|
+ .driver_data = (unsigned long)&fimc_drvdata_exynos4210,
|
|
|
+ }, {
|
|
|
+ .name = "exynos4x12-fimc",
|
|
|
+ .driver_data = (unsigned long)&fimc_drvdata_exynos4x12,
|
|
|
},
|
|
|
{},
|
|
|
};
|