video: exynos_dp: add bit-masking for LINK_TRAINING_CTL register
authorJingoo Han <jg1.han@samsung.com>
Wed, 12 Sep 2012 04:34:24 +0000 (13:34 +0900)
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
Sat, 22 Sep 2012 21:39:53 +0000 (21:39 +0000)
This patch adds bit-masking for LINK_TRAINING_CTL register, when
pre-emphasis level is set. The bit 3 and bit 2 of LINK_TRAINING_CTL
register are used for pre-emphasis level setting, so other bits
should be masked.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
drivers/video/exynos/exynos_dp_reg.c
drivers/video/exynos/exynos_dp_reg.h

index 20e441f66149b3785ef69bfcffc019cb0e125757..365be69d9b5cc962cfa70f7b256ab03f28447725 100644 (file)
@@ -895,7 +895,9 @@ void exynos_dp_set_lane0_pre_emphasis(struct exynos_dp_device *dp, u32 level)
 {
        u32 reg;
 
-       reg = level << PRE_EMPHASIS_SET_SHIFT;
+       reg = readl(dp->reg_base + EXYNOS_DP_LN0_LINK_TRAINING_CTL);
+       reg &= ~PRE_EMPHASIS_SET_MASK;
+       reg |= level << PRE_EMPHASIS_SET_SHIFT;
        writel(reg, dp->reg_base + EXYNOS_DP_LN0_LINK_TRAINING_CTL);
 }
 
@@ -903,7 +905,9 @@ void exynos_dp_set_lane1_pre_emphasis(struct exynos_dp_device *dp, u32 level)
 {
        u32 reg;
 
-       reg = level << PRE_EMPHASIS_SET_SHIFT;
+       reg = readl(dp->reg_base + EXYNOS_DP_LN1_LINK_TRAINING_CTL);
+       reg &= ~PRE_EMPHASIS_SET_MASK;
+       reg |= level << PRE_EMPHASIS_SET_SHIFT;
        writel(reg, dp->reg_base + EXYNOS_DP_LN1_LINK_TRAINING_CTL);
 }
 
@@ -911,7 +915,9 @@ void exynos_dp_set_lane2_pre_emphasis(struct exynos_dp_device *dp, u32 level)
 {
        u32 reg;
 
-       reg = level << PRE_EMPHASIS_SET_SHIFT;
+       reg = readl(dp->reg_base + EXYNOS_DP_LN2_LINK_TRAINING_CTL);
+       reg &= ~PRE_EMPHASIS_SET_MASK;
+       reg |= level << PRE_EMPHASIS_SET_SHIFT;
        writel(reg, dp->reg_base + EXYNOS_DP_LN2_LINK_TRAINING_CTL);
 }
 
@@ -919,7 +925,9 @@ void exynos_dp_set_lane3_pre_emphasis(struct exynos_dp_device *dp, u32 level)
 {
        u32 reg;
 
-       reg = level << PRE_EMPHASIS_SET_SHIFT;
+       reg = readl(dp->reg_base + EXYNOS_DP_LN3_LINK_TRAINING_CTL);
+       reg &= ~PRE_EMPHASIS_SET_MASK;
+       reg |= level << PRE_EMPHASIS_SET_SHIFT;
        writel(reg, dp->reg_base + EXYNOS_DP_LN3_LINK_TRAINING_CTL);
 }
 
index 125b27cd57aebd3f44acf997cf08f711928b61dd..9e9af50d7da34d5797d90fed74e610e166390295 100644 (file)
 #define SW_TRAINING_PATTERN_SET_NORMAL         (0x0 << 0)
 
 /* EXYNOS_DP_LN0_LINK_TRAINING_CTL */
+#define PRE_EMPHASIS_SET_MASK                  (0x3 << 3)
 #define PRE_EMPHASIS_SET_SHIFT                 (3)
 
 /* EXYNOS_DP_DEBUG_CTL */