aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2013-03-21 13:22:34 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-04-04 19:23:53 -0400
commit439797980af4bddfc2b86a44ddb573c5e48a1fcc (patch)
tree3cee3905e065b5c0fd5715e7ff32b26bd779194a /drivers/media
parente90ad659cde4d11ccbc935adcfe018799afcc22d (diff)
[media] exynos4-is: Correct input DMA YUV order configuration
This patch fixes erroneous setup of the YUV order caused by not clearing FIMC_REG_MSCTRL_ORDER422_MASK bit field before setting proper FIMC_REG_MSCTRL_ORDER422 bits. This resulted in false colors for YUYV, YVYU, UYVY, VYUY color formats, depending in what sequence those were configured by user space. YUV order definitions are corrected so that following convention is used: | byte3 | byte2 | byte1 | byte0 -------+-------+-------+-------+------ YCBYCR | CR | Y | CB | Y YCRYCB | CB | Y | CR | Y CBYCRY | Y | CR | Y | CB CRYCBY | Y | CB | Y | CR 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')
-rw-r--r--drivers/media/platform/exynos4-is/fimc-core.c16
-rw-r--r--drivers/media/platform/exynos4-is/fimc-reg.c3
-rw-r--r--drivers/media/platform/exynos4-is/fimc-reg.h16
3 files changed, 18 insertions, 17 deletions
diff --git a/drivers/media/platform/exynos4-is/fimc-core.c b/drivers/media/platform/exynos4-is/fimc-core.c
index 90d907e1a5f8..f25807d7bc8a 100644
--- a/drivers/media/platform/exynos4-is/fimc-core.c
+++ b/drivers/media/platform/exynos4-is/fimc-core.c
@@ -412,34 +412,34 @@ void fimc_set_yuv_order(struct fimc_ctx *ctx)
412 /* Set order for 1 plane input formats. */ 412 /* Set order for 1 plane input formats. */
413 switch (ctx->s_frame.fmt->color) { 413 switch (ctx->s_frame.fmt->color) {
414 case FIMC_FMT_YCRYCB422: 414 case FIMC_FMT_YCRYCB422:
415 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CBYCRY; 415 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCRYCB;
416 break; 416 break;
417 case FIMC_FMT_CBYCRY422: 417 case FIMC_FMT_CBYCRY422:
418 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCRYCB; 418 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CBYCRY;
419 break; 419 break;
420 case FIMC_FMT_CRYCBY422: 420 case FIMC_FMT_CRYCBY422:
421 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCBYCR; 421 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CRYCBY;
422 break; 422 break;
423 case FIMC_FMT_YCBYCR422: 423 case FIMC_FMT_YCBYCR422:
424 default: 424 default:
425 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CRYCBY; 425 ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCBYCR;
426 break; 426 break;
427 } 427 }
428 dbg("ctx->in_order_1p= %d", ctx->in_order_1p); 428 dbg("ctx->in_order_1p= %d", ctx->in_order_1p);
429 429
430 switch (ctx->d_frame.fmt->color) { 430 switch (ctx->d_frame.fmt->color) {
431 case FIMC_FMT_YCRYCB422: 431 case FIMC_FMT_YCRYCB422:
432 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CBYCRY; 432 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCRYCB;
433 break; 433 break;
434 case FIMC_FMT_CBYCRY422: 434 case FIMC_FMT_CBYCRY422:
435 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCRYCB; 435 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CBYCRY;
436 break; 436 break;
437 case FIMC_FMT_CRYCBY422: 437 case FIMC_FMT_CRYCBY422:
438 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCBYCR; 438 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CRYCBY;
439 break; 439 break;
440 case FIMC_FMT_YCBYCR422: 440 case FIMC_FMT_YCBYCR422:
441 default: 441 default:
442 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CRYCBY; 442 ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCBYCR;
443 break; 443 break;
444 } 444 }
445 dbg("ctx->out_order_1p= %d", ctx->out_order_1p); 445 dbg("ctx->out_order_1p= %d", ctx->out_order_1p);
diff --git a/drivers/media/platform/exynos4-is/fimc-reg.c b/drivers/media/platform/exynos4-is/fimc-reg.c
index c82e9bdaae94..f079f36099de 100644
--- a/drivers/media/platform/exynos4-is/fimc-reg.c
+++ b/drivers/media/platform/exynos4-is/fimc-reg.c
@@ -449,7 +449,8 @@ void fimc_hw_set_in_dma(struct fimc_ctx *ctx)
449 | FIMC_REG_MSCTRL_IN_BURST_COUNT_MASK 449 | FIMC_REG_MSCTRL_IN_BURST_COUNT_MASK
450 | FIMC_REG_MSCTRL_INPUT_MASK 450 | FIMC_REG_MSCTRL_INPUT_MASK
451 | FIMC_REG_MSCTRL_C_INT_IN_MASK 451 | FIMC_REG_MSCTRL_C_INT_IN_MASK
452 | FIMC_REG_MSCTRL_2P_IN_ORDER_MASK); 452 | FIMC_REG_MSCTRL_2P_IN_ORDER_MASK
453 | FIMC_REG_MSCTRL_ORDER422_MASK);
453 454
454 cfg |= (FIMC_REG_MSCTRL_IN_BURST_COUNT(4) 455 cfg |= (FIMC_REG_MSCTRL_IN_BURST_COUNT(4)
455 | FIMC_REG_MSCTRL_INPUT_MEMORY 456 | FIMC_REG_MSCTRL_INPUT_MEMORY
diff --git a/drivers/media/platform/exynos4-is/fimc-reg.h b/drivers/media/platform/exynos4-is/fimc-reg.h
index 01da7f3622bf..6c97798c75a5 100644
--- a/drivers/media/platform/exynos4-is/fimc-reg.h
+++ b/drivers/media/platform/exynos4-is/fimc-reg.h
@@ -95,10 +95,10 @@
95/* Output DMA control */ 95/* Output DMA control */
96#define FIMC_REG_CIOCTRL 0x4c 96#define FIMC_REG_CIOCTRL 0x4c
97#define FIMC_REG_CIOCTRL_ORDER422_MASK (3 << 0) 97#define FIMC_REG_CIOCTRL_ORDER422_MASK (3 << 0)
98#define FIMC_REG_CIOCTRL_ORDER422_CRYCBY (0 << 0) 98#define FIMC_REG_CIOCTRL_ORDER422_YCBYCR (0 << 0)
99#define FIMC_REG_CIOCTRL_ORDER422_CBYCRY (1 << 0) 99#define FIMC_REG_CIOCTRL_ORDER422_YCRYCB (1 << 0)
100#define FIMC_REG_CIOCTRL_ORDER422_YCRYCB (2 << 0) 100#define FIMC_REG_CIOCTRL_ORDER422_CBYCRY (2 << 0)
101#define FIMC_REG_CIOCTRL_ORDER422_YCBYCR (3 << 0) 101#define FIMC_REG_CIOCTRL_ORDER422_CRYCBY (3 << 0)
102#define FIMC_REG_CIOCTRL_LASTIRQ_ENABLE (1 << 2) 102#define FIMC_REG_CIOCTRL_LASTIRQ_ENABLE (1 << 2)
103#define FIMC_REG_CIOCTRL_YCBCR_3PLANE (0 << 3) 103#define FIMC_REG_CIOCTRL_YCBCR_3PLANE (0 << 3)
104#define FIMC_REG_CIOCTRL_YCBCR_2PLANE (1 << 3) 104#define FIMC_REG_CIOCTRL_YCBCR_2PLANE (1 << 3)
@@ -220,10 +220,10 @@
220#define FIMC_REG_MSCTRL_FLIP_180 (3 << 13) 220#define FIMC_REG_MSCTRL_FLIP_180 (3 << 13)
221#define FIMC_REG_MSCTRL_FIFO_CTRL_FULL (1 << 12) 221#define FIMC_REG_MSCTRL_FIFO_CTRL_FULL (1 << 12)
222#define FIMC_REG_MSCTRL_ORDER422_SHIFT 4 222#define FIMC_REG_MSCTRL_ORDER422_SHIFT 4
223#define FIMC_REG_MSCTRL_ORDER422_YCBYCR (0 << 4) 223#define FIMC_REG_MSCTRL_ORDER422_CRYCBY (0 << 4)
224#define FIMC_REG_MSCTRL_ORDER422_CBYCRY (1 << 4) 224#define FIMC_REG_MSCTRL_ORDER422_YCRYCB (1 << 4)
225#define FIMC_REG_MSCTRL_ORDER422_YCRYCB (2 << 4) 225#define FIMC_REG_MSCTRL_ORDER422_CBYCRY (2 << 4)
226#define FIMC_REG_MSCTRL_ORDER422_CRYCBY (3 << 4) 226#define FIMC_REG_MSCTRL_ORDER422_YCBYCR (3 << 4)
227#define FIMC_REG_MSCTRL_ORDER422_MASK (3 << 4) 227#define FIMC_REG_MSCTRL_ORDER422_MASK (3 << 4)
228#define FIMC_REG_MSCTRL_INPUT_EXTCAM (0 << 3) 228#define FIMC_REG_MSCTRL_INPUT_EXTCAM (0 << 3)
229#define FIMC_REG_MSCTRL_INPUT_MEMORY (1 << 3) 229#define FIMC_REG_MSCTRL_INPUT_MEMORY (1 << 3)