diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-04-24 17:54:39 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-05-05 04:56:56 -0400 |
commit | 8cb92203bf223053ab6044211cfffe7b674cf526 (patch) | |
tree | 46fa641c72cb667393fd4e3b39c8f720561d3913 | |
parent | 912b0e2dc6779d70a549dc90b0884face3b2540a (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.c | 111 |
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 | ||
937 | static void | ||
938 | set_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 | |||
937 | static void intel_tv_mode_set(struct intel_encoder *encoder) | 996 | static 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); |