aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2012-05-02 05:14:49 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-20 08:19:32 -0400
commitc83a1ff063eb7cd8eb2025c08194f6bcb49334f1 (patch)
tree043924c0ccedb6b0f467d74e6db0cb2a0bd26330
parent693f5c40825e91632478624bf0366e6ebf862a25 (diff)
[media] s5p-fimc: Refactor the register interface functions
Simplify the register API and use FIMC_REG_ prefix for all register definitions for consistency with FIMC-LITE. The unused image effect defines are removed. 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>
-rw-r--r--drivers/media/video/s5p-fimc/fimc-capture.c1
-rw-r--r--drivers/media/video/s5p-fimc/fimc-core.c21
-rw-r--r--drivers/media/video/s5p-fimc/fimc-core.h118
-rw-r--r--drivers/media/video/s5p-fimc/fimc-m2m.c1
-rw-r--r--drivers/media/video/s5p-fimc/fimc-reg.c554
-rw-r--r--drivers/media/video/s5p-fimc/fimc-reg.h326
-rw-r--r--drivers/media/video/s5p-fimc/regs-fimc.h301
7 files changed, 641 insertions, 681 deletions
diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c
index b45da2780213..52a5fb469b45 100644
--- a/drivers/media/video/s5p-fimc/fimc-capture.c
+++ b/drivers/media/video/s5p-fimc/fimc-capture.c
@@ -29,6 +29,7 @@
29 29
30#include "fimc-mdevice.h" 30#include "fimc-mdevice.h"
31#include "fimc-core.h" 31#include "fimc-core.h"
32#include "fimc-reg.h"
32 33
33static int fimc_init_capture(struct fimc_dev *fimc) 34static int fimc_init_capture(struct fimc_dev *fimc)
34{ 35{
diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c
index add24cd373a5..afd69e3d44c2 100644
--- a/drivers/media/video/s5p-fimc/fimc-core.c
+++ b/drivers/media/video/s5p-fimc/fimc-core.c
@@ -28,6 +28,7 @@
28#include <media/videobuf2-dma-contig.h> 28#include <media/videobuf2-dma-contig.h>
29 29
30#include "fimc-core.h" 30#include "fimc-core.h"
31#include "fimc-reg.h"
31#include "fimc-mdevice.h" 32#include "fimc-mdevice.h"
32 33
33static char *fimc_clocks[MAX_FIMC_CLOCKS] = { 34static char *fimc_clocks[MAX_FIMC_CLOCKS] = {
@@ -388,40 +389,40 @@ int fimc_prepare_addr(struct fimc_ctx *ctx, struct vb2_buffer *vb,
388void fimc_set_yuv_order(struct fimc_ctx *ctx) 389void fimc_set_yuv_order(struct fimc_ctx *ctx)
389{ 390{
390 /* The one only mode supported in SoC. */ 391 /* The one only mode supported in SoC. */
391 ctx->in_order_2p = S5P_FIMC_LSB_CRCB; 392 ctx->in_order_2p = FIMC_REG_CIOCTRL_ORDER422_2P_LSB_CRCB;
392 ctx->out_order_2p = S5P_FIMC_LSB_CRCB; 393 ctx->out_order_2p = FIMC_REG_CIOCTRL_ORDER422_2P_LSB_CRCB;
393 394
394 /* Set order for 1 plane input formats. */ 395 /* Set order for 1 plane input formats. */
395 switch (ctx->s_frame.fmt->color) { 396 switch (ctx->s_frame.fmt->color) {
396 case S5P_FIMC_YCRYCB422: 397 case S5P_FIMC_YCRYCB422:
397 ctx->in_order_1p = S5P_MSCTRL_ORDER422_CBYCRY; 398 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CBYCRY;
398 break; 399 break;
399 case S5P_FIMC_CBYCRY422: 400 case S5P_FIMC_CBYCRY422:
400 ctx->in_order_1p = S5P_MSCTRL_ORDER422_YCRYCB; 401 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCRYCB;
401 break; 402 break;
402 case S5P_FIMC_CRYCBY422: 403 case S5P_FIMC_CRYCBY422:
403 ctx->in_order_1p = S5P_MSCTRL_ORDER422_YCBYCR; 404 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCBYCR;
404 break; 405 break;
405 case S5P_FIMC_YCBYCR422: 406 case S5P_FIMC_YCBYCR422:
406 default: 407 default:
407 ctx->in_order_1p = S5P_MSCTRL_ORDER422_CRYCBY; 408 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CRYCBY;
408 break; 409 break;
409 } 410 }
410 dbg("ctx->in_order_1p= %d", ctx->in_order_1p); 411 dbg("ctx->in_order_1p= %d", ctx->in_order_1p);
411 412
412 switch (ctx->d_frame.fmt->color) { 413 switch (ctx->d_frame.fmt->color) {
413 case S5P_FIMC_YCRYCB422: 414 case S5P_FIMC_YCRYCB422:
414 ctx->out_order_1p = S5P_CIOCTRL_ORDER422_CBYCRY; 415 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CBYCRY;
415 break; 416 break;
416 case S5P_FIMC_CBYCRY422: 417 case S5P_FIMC_CBYCRY422:
417 ctx->out_order_1p = S5P_CIOCTRL_ORDER422_YCRYCB; 418 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCRYCB;
418 break; 419 break;
419 case S5P_FIMC_CRYCBY422: 420 case S5P_FIMC_CRYCBY422:
420 ctx->out_order_1p = S5P_CIOCTRL_ORDER422_YCBYCR; 421 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCBYCR;
421 break; 422 break;
422 case S5P_FIMC_YCBYCR422: 423 case S5P_FIMC_YCBYCR422:
423 default: 424 default:
424 ctx->out_order_1p = S5P_CIOCTRL_ORDER422_CRYCBY; 425 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CRYCBY;
425 break; 426 break;
426 } 427 }
427 dbg("ctx->out_order_1p= %d", ctx->out_order_1p); 428 dbg("ctx->out_order_1p= %d", ctx->out_order_1p);
diff --git a/drivers/media/video/s5p-fimc/fimc-core.h b/drivers/media/video/s5p-fimc/fimc-core.h
index ef7c6a23ca2a..34fbba424692 100644
--- a/drivers/media/video/s5p-fimc/fimc-core.h
+++ b/drivers/media/video/s5p-fimc/fimc-core.h
@@ -26,8 +26,6 @@
26#include <media/v4l2-mediabus.h> 26#include <media/v4l2-mediabus.h>
27#include <media/s5p_fimc.h> 27#include <media/s5p_fimc.h>
28 28
29#include "regs-fimc.h"
30
31#define err(fmt, args...) \ 29#define err(fmt, args...) \
32 printk(KERN_ERR "%s:%d: " fmt "\n", __func__, __LINE__, ##args) 30 printk(KERN_ERR "%s:%d: " fmt "\n", __func__, __LINE__, ##args)
33 31
@@ -106,17 +104,6 @@ enum fimc_color_fmt {
106#define IS_M2M(__strt) ((__strt) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE || \ 104#define IS_M2M(__strt) ((__strt) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE || \
107 __strt == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) 105 __strt == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
108 106
109/* Cb/Cr chrominance components order for 2 plane Y/CbCr 4:2:2 formats. */
110#define S5P_FIMC_LSB_CRCB S5P_CIOCTRL_ORDER422_2P_LSB_CRCB
111
112/* The embedded image effect selection */
113#define S5P_FIMC_EFFECT_ORIGINAL S5P_CIIMGEFF_FIN_BYPASS
114#define S5P_FIMC_EFFECT_ARBITRARY S5P_CIIMGEFF_FIN_ARBITRARY
115#define S5P_FIMC_EFFECT_NEGATIVE S5P_CIIMGEFF_FIN_NEGATIVE
116#define S5P_FIMC_EFFECT_ARTFREEZE S5P_CIIMGEFF_FIN_ARTFREEZE
117#define S5P_FIMC_EFFECT_EMBOSSING S5P_CIIMGEFF_FIN_EMBOSSING
118#define S5P_FIMC_EFFECT_SIKHOUETTE S5P_CIIMGEFF_FIN_SILHOUETTE
119
120/* The hardware context state. */ 107/* The hardware context state. */
121#define FIMC_PARAMS (1 << 0) 108#define FIMC_PARAMS (1 << 0)
122#define FIMC_SRC_FMT (1 << 3) 109#define FIMC_SRC_FMT (1 << 3)
@@ -588,54 +575,6 @@ static inline int fimc_get_alpha_mask(struct fimc_fmt *fmt)
588 }; 575 };
589} 576}
590 577
591static inline void fimc_hw_clear_irq(struct fimc_dev *dev)
592{
593 u32 cfg = readl(dev->regs + S5P_CIGCTRL);
594 cfg |= S5P_CIGCTRL_IRQ_CLR;
595 writel(cfg, dev->regs + S5P_CIGCTRL);
596}
597
598static inline void fimc_hw_enable_scaler(struct fimc_dev *dev, bool on)
599{
600 u32 cfg = readl(dev->regs + S5P_CISCCTRL);
601 if (on)
602 cfg |= S5P_CISCCTRL_SCALERSTART;
603 else
604 cfg &= ~S5P_CISCCTRL_SCALERSTART;
605 writel(cfg, dev->regs + S5P_CISCCTRL);
606}
607
608static inline void fimc_hw_activate_input_dma(struct fimc_dev *dev, bool on)
609{
610 u32 cfg = readl(dev->regs + S5P_MSCTRL);
611 if (on)
612 cfg |= S5P_MSCTRL_ENVID;
613 else
614 cfg &= ~S5P_MSCTRL_ENVID;
615 writel(cfg, dev->regs + S5P_MSCTRL);
616}
617
618static inline void fimc_hw_dis_capture(struct fimc_dev *dev)
619{
620 u32 cfg = readl(dev->regs + S5P_CIIMGCPT);
621 cfg &= ~(S5P_CIIMGCPT_IMGCPTEN | S5P_CIIMGCPT_IMGCPTEN_SC);
622 writel(cfg, dev->regs + S5P_CIIMGCPT);
623}
624
625/**
626 * fimc_hw_set_dma_seq - configure output DMA buffer sequence
627 * @mask: each bit corresponds to one of 32 output buffer registers set
628 * 1 to include buffer in the sequence, 0 to disable
629 *
630 * This function mask output DMA ring buffers, i.e. it allows to configure
631 * which of the output buffer address registers will be used by the DMA
632 * engine.
633 */
634static inline void fimc_hw_set_dma_seq(struct fimc_dev *dev, u32 mask)
635