diff options
| author | Keith Packard <keithp@keithp.com> | 2011-11-01 22:34:06 -0400 |
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-11-16 23:26:25 -0500 |
| commit | 832dd3c17f7829fe8e4c257531d6c5c9e19bd7ac (patch) | |
| tree | 8b1f37958d0e2e285fb792f4796d9b520beea77b | |
| parent | 4415e63b13c68c2f56d16d400a1ae345f68cf655 (diff) | |
drm/i915: Move common PCH_PP_CONTROL setup to ironlake_get_pp_control
Every usage of PCH_PP_CONTROL sets the PANEL_UNLOCK_REGS value to
ensure that writes will be respected, move this to a common function
to make the driver cleaner.
No functional changes.
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 7259034b33d1..efe5f9e0de9e 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -906,6 +906,19 @@ static void ironlake_wait_panel_off(struct intel_dp *intel_dp) | |||
| 906 | msleep(delay); | 906 | msleep(delay); |
| 907 | } | 907 | } |
| 908 | 908 | ||
| 909 | /* Read the current pp_control value, unlocking the register if it | ||
| 910 | * is locked | ||
| 911 | */ | ||
| 912 | |||
| 913 | static u32 ironlake_get_pp_control(struct drm_i915_private *dev_priv) | ||
| 914 | { | ||
| 915 | u32 control = I915_READ(PCH_PP_CONTROL); | ||
| 916 | |||
| 917 | control &= ~PANEL_UNLOCK_MASK; | ||
| 918 | control |= PANEL_UNLOCK_REGS; | ||
| 919 | return control; | ||
| 920 | } | ||
| 921 | |||
| 909 | static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp) | 922 | static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp) |
| 910 | { | 923 | { |
| 911 | struct drm_device *dev = intel_dp->base.base.dev; | 924 | struct drm_device *dev = intel_dp->base.base.dev; |
| @@ -926,9 +939,7 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp) | |||
| 926 | } | 939 | } |
| 927 | 940 | ||
| 928 | ironlake_wait_panel_off(intel_dp); | 941 | ironlake_wait_panel_off(intel_dp); |
| 929 | pp = I915_READ(PCH_PP_CONTROL); | 942 | pp = ironlake_get_pp_control(dev_priv); |
| 930 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 931 | pp |= PANEL_UNLOCK_REGS; | ||
| 932 | pp |= EDP_FORCE_VDD; | 943 | pp |= EDP_FORCE_VDD; |
| 933 | I915_WRITE(PCH_PP_CONTROL, pp); | 944 | I915_WRITE(PCH_PP_CONTROL, pp); |
| 934 | POSTING_READ(PCH_PP_CONTROL); | 945 | POSTING_READ(PCH_PP_CONTROL); |
| @@ -951,9 +962,7 @@ static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp) | |||
| 951 | u32 pp; | 962 | u32 pp; |
| 952 | 963 | ||
| 953 | if (!intel_dp->want_panel_vdd && ironlake_edp_have_panel_vdd(intel_dp)) { | 964 | if (!intel_dp->want_panel_vdd && ironlake_edp_have_panel_vdd(intel_dp)) { |
| 954 | pp = I915_READ(PCH_PP_CONTROL); | 965 | pp = ironlake_get_pp_control(dev_priv); |
| 955 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 956 | pp |= PANEL_UNLOCK_REGS; | ||
| 957 | pp &= ~EDP_FORCE_VDD; | 966 | pp &= ~EDP_FORCE_VDD; |
| 958 | I915_WRITE(PCH_PP_CONTROL, pp); | 967 | I915_WRITE(PCH_PP_CONTROL, pp); |
| 959 | POSTING_READ(PCH_PP_CONTROL); | 968 | POSTING_READ(PCH_PP_CONTROL); |
| @@ -1012,9 +1021,7 @@ static void ironlake_edp_panel_on(struct intel_dp *intel_dp) | |||
| 1012 | return; | 1021 | return; |
| 1013 | 1022 | ||
| 1014 | ironlake_wait_panel_off(intel_dp); | 1023 | ironlake_wait_panel_off(intel_dp); |
| 1015 | pp = I915_READ(PCH_PP_CONTROL); | 1024 | pp = ironlake_get_pp_control(dev_priv); |
| 1016 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 1017 | pp |= PANEL_UNLOCK_REGS; | ||
| 1018 | 1025 | ||
| 1019 | if (IS_GEN5(dev)) { | 1026 | if (IS_GEN5(dev)) { |
| 1020 | /* ILK workaround: disable reset around power sequence */ | 1027 | /* ILK workaround: disable reset around power sequence */ |
| @@ -1049,9 +1056,7 @@ static void ironlake_edp_panel_off(struct drm_encoder *encoder) | |||
| 1049 | 1056 | ||
| 1050 | if (!is_edp(intel_dp)) | 1057 | if (!is_edp(intel_dp)) |
| 1051 | return; | 1058 | return; |
| 1052 | pp = I915_READ(PCH_PP_CONTROL); | 1059 | pp = ironlake_get_pp_control(dev_priv); |
| 1053 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 1054 | pp |= PANEL_UNLOCK_REGS; | ||
| 1055 | 1060 | ||
| 1056 | if (IS_GEN5(dev)) { | 1061 | if (IS_GEN5(dev)) { |
| 1057 | /* ILK workaround: disable reset around power sequence */ | 1062 | /* ILK workaround: disable reset around power sequence */ |
| @@ -1098,9 +1103,7 @@ static void ironlake_edp_backlight_on(struct intel_dp *intel_dp) | |||
| 1098 | * allowing it to appear. | 1103 | * allowing it to appear. |
| 1099 | */ | 1104 | */ |
| 1100 | msleep(intel_dp->backlight_on_delay); | 1105 | msleep(intel_dp->backlight_on_delay); |
| 1101 | pp = I915_READ(PCH_PP_CONTROL); | 1106 | pp = ironlake_get_pp_control(dev_priv); |
| 1102 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 1103 | pp |= PANEL_UNLOCK_REGS; | ||
| 1104 | pp |= EDP_BLC_ENABLE; | 1107 | pp |= EDP_BLC_ENABLE; |
| 1105 | I915_WRITE(PCH_PP_CONTROL, pp); | 1108 | I915_WRITE(PCH_PP_CONTROL, pp); |
| 1106 | POSTING_READ(PCH_PP_CONTROL); | 1109 | POSTING_READ(PCH_PP_CONTROL); |
| @@ -1116,9 +1119,7 @@ static void ironlake_edp_backlight_off(struct intel_dp *intel_dp) | |||
| 1116 | return; | 1119 | return; |
| 1117 | 1120 | ||
| 1118 | DRM_DEBUG_KMS("\n"); | 1121 | DRM_DEBUG_KMS("\n"); |
| 1119 | pp = I915_READ(PCH_PP_CONTROL); | 1122 | pp = ironlake_get_pp_control(dev_priv); |
| 1120 | pp &= ~PANEL_UNLOCK_MASK; | ||
| 1121 | pp |= PANEL_UNLOCK_REGS; | ||
| 1122 | pp &= ~EDP_BLC_ENABLE; | 1123 | pp &= ~EDP_BLC_ENABLE; |
| 1123 | I915_WRITE(PCH_PP_CONTROL, pp); | 1124 | I915_WRITE(PCH_PP_CONTROL, pp); |
| 1124 | POSTING_READ(PCH_PP_CONTROL); | 1125 | POSTING_READ(PCH_PP_CONTROL); |
