diff options
Diffstat (limited to 'drivers/media/video/s5p-fimc/fimc-reg.c')
-rw-r--r-- | drivers/media/video/s5p-fimc/fimc-reg.c | 31 |
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 | ||
355 | void fimc_hw_set_effect(struct fimc_ctx *ctx) | 355 | void 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); |