aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Stanislawski <t.stanislaws@samsung.com>2011-08-25 11:47:48 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-09-26 07:04:31 -0400
commit0689133b7fadd2e10f4bddca36c895223a541c6c (patch)
tree4479f1b53f668656675b9f4eeb1466fcb5f1a54e
parent17b27478ccdb5b6883032031b83f5cd2ce5f8cf9 (diff)
[media] s5p-tv: fix mbus configuration
This patch fixes mbus configuration between Mixer, SDO and HDMI. The SDO accepts only YUV444 on input. The HDMI in DVI mode accepts only RGB888. Now Mixer is choosing proper output format depending on mbus format. Signed-off-by: Tomasz Stanislawski <t.stanislaws@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-tv/hdmi_drv.c4
-rw-r--r--drivers/media/video/s5p-tv/mixer_reg.c11
-rw-r--r--drivers/media/video/s5p-tv/regs-mixer.h1
-rw-r--r--drivers/media/video/s5p-tv/sdo_drv.c1
4 files changed, 15 insertions, 2 deletions
diff --git a/drivers/media/video/s5p-tv/hdmi_drv.c b/drivers/media/video/s5p-tv/hdmi_drv.c
index e1b29b488f6..0279e6e89fe 100644
--- a/drivers/media/video/s5p-tv/hdmi_drv.c
+++ b/drivers/media/video/s5p-tv/hdmi_drv.c
@@ -440,6 +440,7 @@ static const struct hdmi_preset_conf hdmi_conf_480p = {
440 .height = 480, 440 .height = 480,
441 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */ 441 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */
442 .field = V4L2_FIELD_NONE, 442 .field = V4L2_FIELD_NONE,
443 .colorspace = V4L2_COLORSPACE_SRGB,
443 }, 444 },
444}; 445};
445 446
@@ -472,6 +473,7 @@ static const struct hdmi_preset_conf hdmi_conf_720p60 = {
472 .height = 720, 473 .height = 720,
473 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */ 474 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */
474 .field = V4L2_FIELD_NONE, 475 .field = V4L2_FIELD_NONE,
476 .colorspace = V4L2_COLORSPACE_SRGB,
475 }, 477 },
476}; 478};
477 479
@@ -504,6 +506,7 @@ static const struct hdmi_preset_conf hdmi_conf_1080p50 = {
504 .height = 1080, 506 .height = 1080,
505 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */ 507 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */
506 .field = V4L2_FIELD_NONE, 508 .field = V4L2_FIELD_NONE,
509 .colorspace = V4L2_COLORSPACE_SRGB,
507 }, 510 },
508}; 511};
509 512
@@ -536,6 +539,7 @@ static const struct hdmi_preset_conf hdmi_conf_1080p60 = {
536 .height = 1080, 539 .height = 1080,
537 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */ 540 .code = V4L2_MBUS_FMT_FIXED, /* means RGB888 */
538 .field = V4L2_FIELD_NONE, 541 .field = V4L2_FIELD_NONE,
542 .colorspace = V4L2_COLORSPACE_SRGB,
539 }, 543 },
540}; 544};
541 545
diff --git a/drivers/media/video/s5p-tv/mixer_reg.c b/drivers/media/video/s5p-tv/mixer_reg.c
index 38dac672aa1..4800a3cbb29 100644
--- a/drivers/media/video/s5p-tv/mixer_reg.c
+++ b/drivers/media/video/s5p-tv/mixer_reg.c
@@ -90,7 +90,7 @@ void mxr_reg_reset(struct mxr_device *mdev)
90 mxr_vsync_set_update(mdev, MXR_DISABLE); 90 mxr_vsync_set_update(mdev, MXR_DISABLE);
91 91
92 /* set output in RGB888 mode */ 92 /* set output in RGB888 mode */
93 mxr_write(mdev, MXR_CFG, MXR_CFG_OUT_YUV444); 93 mxr_write(mdev, MXR_CFG, MXR_CFG_OUT_RGB888);
94 94
95 /* 16 beat burst in DMA */ 95 /* 16 beat burst in DMA */
96 mxr_write_mask(mdev, MXR_STATUS, MXR_STATUS_16_BURST, 96 mxr_write_mask(mdev, MXR_STATUS, MXR_STATUS_16_BURST,
@@ -376,6 +376,12 @@ void mxr_reg_set_mbus_fmt(struct mxr_device *mdev,
376 spin_lock_irqsave(&mdev->reg_slock, flags); 376 spin_lock_irqsave(&mdev->reg_slock, flags);
377 mxr_vsync_set_update(mdev, MXR_DISABLE); 377 mxr_vsync_set_update(mdev, MXR_DISABLE);
378 378
379 /* selecting colorspace accepted by output */
380 if (fmt->colorspace == V4L2_COLORSPACE_JPEG)
381 val |= MXR_CFG_OUT_YUV444;
382 else
383 val |= MXR_CFG_OUT_RGB888;
384
379 /* choosing between interlace and progressive mode */ 385 /* choosing between interlace and progressive mode */
380 if (fmt->field == V4L2_FIELD_INTERLACED) 386 if (fmt->field == V4L2_FIELD_INTERLACED)
381 val |= MXR_CFG_SCAN_INTERLACE; 387 val |= MXR_CFG_SCAN_INTERLACE;
@@ -394,7 +400,8 @@ void mxr_reg_set_mbus_fmt(struct mxr_device *mdev,
394 else 400 else
395 WARN(1, "unrecognized mbus height %u!\n", fmt->height); 401 WARN(1, "unrecognized mbus height %u!\n", fmt->height);
396 402
397 mxr_write_mask(mdev, MXR_CFG, val, MXR_CFG_SCAN_MASK); 403 mxr_write_mask(mdev, MXR_CFG, val, MXR_CFG_SCAN_MASK |
404 MXR_CFG_OUT_MASK);
398 405
399 val = (fmt->field == V4L2_FIELD_INTERLACED) ? ~0 : 0; 406 val = (fmt->field == V4L2_FIELD_INTERLACED) ? ~0 : 0;
400 vp_write_mask(mdev, VP_MODE, val, 407 vp_write_mask(mdev, VP_MODE, val,
diff --git a/drivers/media/video/s5p-tv/regs-mixer.h b/drivers/media/video/s5p-tv/regs-mixer.h
index 3c8442609c1..158abb43d0a 100644
--- a/drivers/media/video/s5p-tv/regs-mixer.h
+++ b/drivers/media/video/s5p-tv/regs-mixer.h
@@ -67,6 +67,7 @@
67/* bits for MXR_CFG */ 67/* bits for MXR_CFG */
68#define MXR_CFG_OUT_YUV444 (0 << 8) 68#define MXR_CFG_OUT_YUV444 (0 << 8)
69#define MXR_CFG_OUT_RGB888 (1 << 8) 69#define MXR_CFG_OUT_RGB888 (1 << 8)
70#define MXR_CFG_OUT_MASK (1 << 8)
70#define MXR_CFG_DST_SDO (0 << 7) 71#define MXR_CFG_DST_SDO (0 << 7)
71#define MXR_CFG_DST_HDMI (1 << 7) 72#define MXR_CFG_DST_HDMI (1 << 7)
72#define MXR_CFG_DST_MASK (1 << 7) 73#define MXR_CFG_DST_MASK (1 << 7)
diff --git a/drivers/media/video/s5p-tv/sdo_drv.c b/drivers/media/video/s5p-tv/sdo_drv.c
index 4dddd6bd635..8cec67ef48c 100644
--- a/drivers/media/video/s5p-tv/sdo_drv.c
+++ b/drivers/media/video/s5p-tv/sdo_drv.c
@@ -170,6 +170,7 @@ static int sdo_g_mbus_fmt(struct v4l2_subdev *sd,
170 fmt->height = sdev->fmt->height; 170 fmt->height = sdev->fmt->height;
171 fmt->code = V4L2_MBUS_FMT_FIXED; 171 fmt->code = V4L2_MBUS_FMT_FIXED;
172 fmt->field = V4L2_FIELD_INTERLACED; 172 fmt->field = V4L2_FIELD_INTERLACED;
173 fmt->colorspace = V4L2_COLORSPACE_JPEG;
173 return 0; 174 return 0;
174} 175}
175 176