aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-04-24 17:54:39 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-05 04:56:56 -0400
commit8cb92203bf223053ab6044211cfffe7b674cf526 (patch)
tree46fa641c72cb667393fd4e3b39c8f720561d3913
parent912b0e2dc6779d70a549dc90b0884face3b2540a (diff)
drm/i915/tv: extract set_tv_mode_timings
intel_tv_mode_set is just too big. Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c111
1 files changed, 61 insertions, 50 deletions
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index bafe92e317d5..04bf8caaac0c 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -934,6 +934,65 @@ intel_tv_compute_config(struct intel_encoder *encoder,
934 return true; 934 return true;
935} 935}
936 936
937static void
938set_tv_mode_timings(struct drm_i915_private *dev_priv,
939 const struct tv_mode *tv_mode,
940 bool burst_ena)
941{
942 u32 hctl1, hctl2, hctl3;
943 u32 vctl1, vctl2, vctl3, vctl4, vctl5, vctl6, vctl7;
944
945 hctl1 = (tv_mode->hsync_end << TV_HSYNC_END_SHIFT) |
946 (tv_mode->htotal << TV_HTOTAL_SHIFT);
947
948 hctl2 = (tv_mode->hburst_start << 16) |
949 (tv_mode->hburst_len << TV_HBURST_LEN_SHIFT);
950
951 if (burst_ena)
952 hctl2 |= TV_BURST_ENA;
953
954 hctl3 = (tv_mode->hblank_start << TV_HBLANK_START_SHIFT) |
955 (tv_mode->hblank_end << TV_HBLANK_END_SHIFT);
956
957 vctl1 = (tv_mode->nbr_end << TV_NBR_END_SHIFT) |
958 (tv_mode->vi_end_f1 << TV_VI_END_F1_SHIFT) |
959 (tv_mode->vi_end_f2 << TV_VI_END_F2_SHIFT);
960
961 vctl2 = (tv_mode->vsync_len << TV_VSYNC_LEN_SHIFT) |
962 (tv_mode->vsync_start_f1 << TV_VSYNC_START_F1_SHIFT) |
963 (tv_mode->vsync_start_f2 << TV_VSYNC_START_F2_SHIFT);
964
965 vctl3 = (tv_mode->veq_len << TV_VEQ_LEN_SHIFT) |
966 (tv_mode->veq_start_f1 << TV_VEQ_START_F1_SHIFT) |
967 (tv_mode->veq_start_f2 << TV_VEQ_START_F2_SHIFT);
968
969 if (tv_mode->veq_ena)
970 vctl3 |= TV_EQUAL_ENA;
971
972 vctl4 = (tv_mode->vburst_start_f1 << TV_VBURST_START_F1_SHIFT) |
973 (tv_mode->vburst_end_f1 << TV_VBURST_END_F1_SHIFT);
974
975 vctl5 = (tv_mode->vburst_start_f2 << TV_VBURST_START_F2_SHIFT) |
976 (tv_mode->vburst_end_f2 << TV_VBURST_END_F2_SHIFT);
977
978 vctl6 = (tv_mode->vburst_start_f3 << TV_VBURST_START_F3_SHIFT) |
979 (tv_mode->vburst_end_f3 << TV_VBURST_END_F3_SHIFT);
980
981 vctl7 = (tv_mode->vburst_start_f4 << TV_VBURST_START_F4_SHIFT) |
982 (tv_mode->vburst_end_f4 << TV_VBURST_END_F4_SHIFT);
983
984 I915_WRITE(TV_H_CTL_1, hctl1);
985 I915_WRITE(TV_H_CTL_2, hctl2);
986 I915_WRITE(TV_H_CTL_3, hctl3);
987 I915_WRITE(TV_V_CTL_1, vctl1);
988 I915_WRITE(TV_V_CTL_2, vctl2);
989 I915_WRITE(TV_V_CTL_3, vctl3);
990 I915_WRITE(TV_V_CTL_4, vctl4);
991 I915_WRITE(TV_V_CTL_5, vctl5);
992 I915_WRITE(TV_V_CTL_6, vctl6);
993 I915_WRITE(TV_V_CTL_7, vctl7);
994}
995
937static void intel_tv_mode_set(struct intel_encoder *encoder) 996static void intel_tv_mode_set(struct intel_encoder *encoder)
938{ 997{
939 struct drm_device *dev = encoder->base.dev; 998 struct drm_device *dev = encoder->base.dev;
@@ -942,8 +1001,6 @@ static void intel_tv_mode_set(struct intel_encoder *encoder)
942 struct intel_tv *intel_tv = enc_to_tv(encoder); 1001 struct intel_tv *intel_tv = enc_to_tv(encoder);
943 const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv); 1002 const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
944 u32 tv_ctl; 1003 u32 tv_ctl;
945 u32 hctl1, hctl2, hctl3;
946 u32 vctl1, vctl2, vctl3, vctl4, vctl5, vctl6, vctl7;
947 u32 scctl1, scctl2, scctl3; 1004 u32 scctl1, scctl2, scctl3;
948 int i, j; 1005 int i, j;
949 const struct video_levels *video_levels; 1006 const struct video_levels *video_levels;
@@ -982,44 +1039,6 @@ static void intel_tv_mode_set(struct intel_encoder *encoder)
982 burst_ena = tv_mode->burst_ena; 1039 burst_ena = tv_mode->burst_ena;
983 break; 1040 break;
984 } 1041 }
985 hctl1 = (tv_mode->hsync_end << TV_HSYNC_END_SHIFT) |
986 (tv_mode->htotal << TV_HTOTAL_SHIFT);
987
988 hctl2 = (tv_mode->hburst_start << 16) |
989 (tv_mode->hburst_len << TV_HBURST_LEN_SHIFT);
990
991 if (burst_ena)
992 hctl2 |= TV_BURST_ENA;
993
994 hctl3 = (tv_mode->hblank_start << TV_HBLANK_START_SHIFT) |
995 (tv_mode->hblank_end << TV_HBLANK_END_SHIFT);
996
997 vctl1 = (tv_mode->nbr_end << TV_NBR_END_SHIFT) |
998 (tv_mode->vi_end_f1 << TV_VI_END_F1_SHIFT) |
999 (tv_mode->vi_end_f2 << TV_VI_END_F2_SHIFT);
1000
1001 vctl2 = (tv_mode->vsync_len << TV_VSYNC_LEN_SHIFT) |
1002 (tv_mode->vsync_start_f1 << TV_VSYNC_START_F1_SHIFT) |
1003 (tv_mode->vsync_start_f2 << TV_VSYNC_START_F2_SHIFT);
1004
1005 vctl3 = (tv_mode->veq_len << TV_VEQ_LEN_SHIFT) |
1006 (tv_mode->veq_start_f1 << TV_VEQ_START_F1_SHIFT) |
1007 (tv_mode->veq_start_f2 << TV_VEQ_START_F2_SHIFT);
1008
1009 if (tv_mode->veq_ena)
1010 vctl3 |= TV_EQUAL_ENA;
1011
1012 vctl4 = (tv_mode->vburst_start_f1 << TV_VBURST_START_F1_SHIFT) |
1013 (tv_mode->vburst_end_f1 << TV_VBURST_END_F1_SHIFT);
1014
1015 vctl5 = (tv_mode->vburst_start_f2 << TV_VBURST_START_F2_SHIFT) |
1016 (tv_mode->vburst_end_f2 << TV_VBURST_END_F2_SHIFT);
1017
1018 vctl6 = (tv_mode->vburst_start_f3 << TV_VBURST_START_F3_SHIFT) |
1019 (tv_mode->vburst_end_f3 << TV_VBURST_END_F3_SHIFT);
1020
1021 vctl7 = (tv_mode->vburst_start_f4 << TV_VBURST_START_F4_SHIFT) |
1022 (tv_mode->vburst_end_f4 << TV_VBURST_END_F4_SHIFT);
1023 1042
1024 if (intel_crtc->pipe == 1) 1043 if (intel_crtc->pipe == 1)
1025 tv_ctl |= TV_ENC_PIPEB_SELECT; 1044 tv_ctl |= TV_ENC_PIPEB_SELECT;
@@ -1054,16 +1073,8 @@ static void intel_tv_mode_set(struct intel_encoder *encoder)
1054 if (dev->pdev->device < 0x2772) 1073 if (dev->pdev->device < 0x2772)
1055 tv_ctl |= TV_ENC_C0_FIX | TV_ENC_SDP_FIX; 1074 tv_ctl |= TV_ENC_C0_FIX | TV_ENC_SDP_FIX;
1056 1075
1057 I915_WRITE(TV_H_CTL_1, hctl1); 1076 set_tv_mode_timings(dev_priv, tv_mode, burst_ena);
1058 I915_WRITE(TV_H_CTL_2, hctl2); 1077
1059 I915_WRITE(TV_H_CTL_3, hctl3);
1060 I915_WRITE(TV_V_CTL_1, vctl1);
1061 I915_WRITE(TV_V_CTL_2, vctl2);
1062 I915_WRITE(TV_V_CTL_3, vctl3);
1063 I915_WRITE(TV_V_CTL_4, vctl4);
1064 I915_WRITE(TV_V_CTL_5, vctl5);
1065 I915_WRITE(TV_V_CTL_6, vctl6);
1066 I915_WRITE(TV_V_CTL_7, vctl7);
1067 I915_WRITE(TV_SC_CTL_1, scctl1); 1078 I915_WRITE(TV_SC_CTL_1, scctl1);
1068 I915_WRITE(TV_SC_CTL_2, scctl2); 1079 I915_WRITE(TV_SC_CTL_2, scctl2);
1069 I915_WRITE(TV_SC_CTL_3, scctl3); 1080 I915_WRITE(TV_SC_CTL_3, scctl3);