aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/s5p-fimc/fimc-reg.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/s5p-fimc/fimc-reg.c')
-rw-r--r--drivers/media/video/s5p-fimc/fimc-reg.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/media/video/s5p-fimc/fimc-reg.c b/drivers/media/video/s5p-fimc/fimc-reg.c
index a1fff022c5b4..2a1ae51ad949 100644
--- a/drivers/media/video/s5p-fimc/fimc-reg.c
+++ b/drivers/media/video/s5p-fimc/fimc-reg.c
@@ -352,17 +352,19 @@ void fimc_hw_en_capture(struct fimc_ctx *ctx)
352 writel(cfg | S5P_CIIMGCPT_IMGCPTEN, dev->regs + S5P_CIIMGCPT); 352 writel(cfg | S5P_CIIMGCPT_IMGCPTEN, dev->regs + S5P_CIIMGCPT);
353} 353}
354 354
355void fimc_hw_set_effect(struct fimc_ctx *ctx) 355void fimc_hw_set_effect(struct fimc_ctx *ctx, bool active)
356{ 356{
357 struct fimc_dev *dev = ctx->fimc_dev; 357 struct fimc_dev *dev = ctx->fimc_dev;
358 struct fimc_effect *effect = &ctx->effect; 358 struct fimc_effect *effect = &ctx->effect;
359 u32 cfg = (S5P_CIIMGEFF_IE_ENABLE | S5P_CIIMGEFF_IE_SC_AFTER); 359 u32 cfg = 0;
360
361 cfg |= effect->type;
362 360
363 if (effect->type == S5P_FIMC_EFFECT_ARBITRARY) { 361 if (active) {
364 cfg |= S5P_CIIMGEFF_PAT_CB(effect->pat_cb); 362 cfg |= S5P_CIIMGEFF_IE_SC_AFTER | S5P_CIIMGEFF_IE_ENABLE;
365 cfg |= S5P_CIIMGEFF_PAT_CR(effect->pat_cr); 363 cfg |= effect->type;
364 if (effect->type == S5P_FIMC_EFFECT_ARBITRARY) {
365 cfg |= S5P_CIIMGEFF_PAT_CB(effect->pat_cb);
366 cfg |= S5P_CIIMGEFF_PAT_CR(effect->pat_cr);
367 }
366 } 368 }
367 369
368 writel(cfg, dev->regs + S5P_CIIMGEFF); 370 writel(cfg, dev->regs + S5P_CIIMGEFF);
@@ -592,6 +594,9 @@ int fimc_hw_set_camera_source(struct fimc_dev *fimc,
592 else if (bus_width == 16) 594 else if (bus_width == 16)
593 cfg |= S5P_CISRCFMT_ITU601_16BIT; 595 cfg |= S5P_CISRCFMT_ITU601_16BIT;
594 } /* else defaults to ITU-R BT.656 8-bit */ 596 } /* else defaults to ITU-R BT.656 8-bit */
597 } else if (cam->bus_type == FIMC_MIPI_CSI2) {
598 if (fimc_fmt_is_jpeg(f->fmt->color))
599 cfg |= S5P_CISRCFMT_ITU601_8BIT;
595 } 600 }
596 601
597 cfg |= S5P_CISRCFMT_HSIZE(f->o_width) | S5P_CISRCFMT_VSIZE(f->o_height); 602 cfg |= S5P_CISRCFMT_HSIZE(f->o_width) | S5P_CISRCFMT_VSIZE(f->o_height);
@@ -633,7 +638,7 @@ int fimc_hw_set_camera_type(struct fimc_dev *fimc,
633 /* Select ITU B interface, disable Writeback path and test pattern. */ 638 /* Select ITU B interface, disable Writeback path and test pattern. */
634 cfg &= ~(S5P_CIGCTRL_TESTPAT_MASK | S5P_CIGCTRL_SELCAM_ITU_A | 639 cfg &= ~(S5P_CIGCTRL_TESTPAT_MASK | S5P_CIGCTRL_SELCAM_ITU_A |
635 S5P_CIGCTRL_SELCAM_MIPI | S5P_CIGCTRL_CAMIF_SELWB | 640 S5P_CIGCTRL_SELCAM_MIPI | S5P_CIGCTRL_CAMIF_SELWB |
636 S5P_CIGCTRL_SELCAM_MIPI_A); 641 S5P_CIGCTRL_SELCAM_MIPI_A | S5P_CIGCTRL_CAM_JPEG);
637 642
638 if (cam->bus_type == FIMC_MIPI_CSI2) { 643 if (cam->bus_type == FIMC_MIPI_CSI2) {
639 cfg |= S5P_CIGCTRL_SELCAM_MIPI; 644 cfg |= S5P_CIGCTRL_SELCAM_MIPI;
@@ -642,9 +647,15 @@ int fimc_hw_set_camera_type(struct fimc_dev *fimc,
642 cfg |= S5P_CIGCTRL_SELCAM_MIPI_A; 647 cfg |= S5P_CIGCTRL_SELCAM_MIPI_A;
643 648
644 /* TODO: add remaining supported formats. */ 649 /* TODO: add remaining supported formats. */
645 if (vid_cap->mf.code == V4L2_MBUS_FMT_VYUY8_2X8) { 650 switch (vid_cap->mf.code) {
651 case V4L2_MBUS_FMT_VYUY8_2X8:
646 tmp = S5P_CSIIMGFMT_YCBCR422_8BIT; 652 tmp = S5P_CSIIMGFMT_YCBCR422_8BIT;
647 } else { 653 break;
654 case V4L2_MBUS_FMT_JPEG_1X8:
655 tmp = S5P_CSIIMGFMT_USER(1);
656 cfg |= S5P_CIGCTRL_CAM_JPEG;
657 break;
658 default:
648 v4l2_err(fimc->vid_cap.vfd, 659 v4l2_err(fimc->vid_cap.vfd,
649 "Not supported camera pixel format: %d", 660 "Not supported camera pixel format: %d",
650 vid_cap->mf.code); 661 vid_cap->mf.code);