From bb39eefecc83c06f13ca72b48b07b7e6053b9fa4 Mon Sep 17 00:00:00 2001
From: Mark Yao <mark.yao@rock-chips.com>
Date: Thu, 15 Oct 2015 10:33:33 +0800
Subject: [PATCH] video: lcdc: 3228: update colorspace config

Add windows bt601 and bt709 convert

Change-Id: I0a24227e91c5bf7643f72ef79acaadde1a37be25
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
 drivers/video/rockchip/lcdc/rk3228_lcdc.c | 28 ++++++++++++++++-------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/video/rockchip/lcdc/rk3228_lcdc.c b/drivers/video/rockchip/lcdc/rk3228_lcdc.c
index 6f34233a8d0c..0426946a2d58 100644
--- a/drivers/video/rockchip/lcdc/rk3228_lcdc.c
+++ b/drivers/video/rockchip/lcdc/rk3228_lcdc.c
@@ -486,16 +486,19 @@ static void vop_win_csc_mode(struct vop_device *vop_dev,
  * 6. YUV(601/709)-> bypass   ---+       bypass        --> YUV_OUTPUT(601)
  *    RGB        --> R2Y(601) __/
  *
- * 7. YUV(601/709)-> Y2R(mpeg)---+       bypass        --> RGB_OUTPUT(709)
- *    RGB        --> bypass   __/
+ * 7. YUV(601)   --> Y2R(601/mpeg)-+     bypass        --> RGB_OUTPUT(709)
+ *    RGB        --> bypass   ____/
  *
- * 8. RGB        --> bypass   --->    709To2020->R2Y   --> YUV_OUTPUT(2020)
+ * 8. YUV(709)   --> Y2R(709/hd) --+     bypass        --> RGB_OUTPUT(709)
+ *    RGB        --> bypass   ____/
  *
- * 9. RGB        --> R2Y(709) --->       Y2R           --> YUV_OUTPUT(709)
+ * 9. RGB        --> bypass   --->    709To2020->R2Y   --> YUV_OUTPUT(2020)
  *
- * 10. RGB       --> R2Y(601) --->       Y2R           --> YUV_OUTPUT(601)
+ * 10. RGB        --> R2Y(709) --->       Y2R          --> YUV_OUTPUT(709)
  *
- * 11. RGB       --> bypass   --->       bypass        --> RGB_OUTPUT(709)
+ * 11. RGB       --> R2Y(601) --->       Y2R           --> YUV_OUTPUT(601)
+ *
+ * 12. RGB       --> bypass   --->       bypass        --> RGB_OUTPUT(709)
  */
 
 static void vop_post_csc_cfg(struct rk_lcdc_driver *dev_drv)
@@ -543,8 +546,17 @@ static void vop_post_csc_cfg(struct rk_lcdc_driver *dev_drv)
 		if (overlay_mode == VOP_YUV_DOMAIN &&
 		    !IS_YUV(win->area[0].fmt_cfg))
 			vop_win_csc_mode(vop_dev, win, r2y_mode);
-		else if (IS_YUV(win->area[0].fmt_cfg))
-			vop_win_csc_mode(vop_dev, win, VOP_Y2R_CSC_MPEG);
+		if (overlay_mode == VOP_RGB_DOMAIN &&
+		    IS_YUV(win->area[0].fmt_cfg)) {
+			if (win->colorspace == CSC_BT709)
+				vop_win_csc_mode(vop_dev, win, VOP_Y2R_CSC_HD);
+			else if (win->colorspace == CSC_BT601)
+				vop_win_csc_mode(vop_dev, win,
+						 VOP_Y2R_CSC_MPEG);
+			else
+				pr_err("Error Y2R path, colorspace=%d\n",
+				       win->colorspace);
+		}
 	}
 
 	val = V_YUV2YUV_POST_Y2R_EN(0) | V_YUV2YUV_POST_EN(0) |
-- 
2.34.1