aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/s5p-fimc/fimc-reg.c
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2011-08-26 13:57:06 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-09-06 16:49:25 -0400
commitee7160e57c98ffb03253abb2cb4ad5b1376a2257 (patch)
treefa4be227ef1b4cc2d1e8773c4d8ae83e29613b9d /drivers/media/video/s5p-fimc/fimc-reg.c
parent237e026559b7cd03fc575b6007cea11aef9e0aa6 (diff)
[media] s5p-fimc: Add support for JPEG capture
Add support for transparent DMA transfer of JPEG data with MIPI-CSI2 USER1 format. In JPEG mode the color effect, scaling and cropping is not supported as well as image rotation and flipping thus these controls are marked as inactive if V4L2_PIX_FMT_JPEG pixel format was selected. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
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);