aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-27 15:31:23 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-30 13:53:22 -0400
commite1214b95ed83c0bb903fe368c9a408dffd80491d (patch)
tree9d4537c4f6b52e0dce628458bbd70a192f48db27
parentd6038611aa3d7d8080a8ae7f3122779fb4779a13 (diff)
drm/i915: Populate output_types from .get_config()
Rather than having the caller of .get_config() set output_types based on encoder->type, let's just have .get_config() itself populate output_types. This way we are isolated from encoder->type, which won't be useable for this purpose anyway soon (at least for DDI encoders). Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171027193128.14483-2-ville.syrjala@linux.intel.com Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c11
-rw-r--r--drivers/gpu/drm/i915/intel_display.c5
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c5
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c2
-rw-r--r--drivers/gpu/drm/i915/intel_dsi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c2
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c2
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c2
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c2
11 files changed, 33 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 437339f5d098..9c000ac612da 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -119,6 +119,8 @@ static unsigned int intel_crt_get_flags(struct intel_encoder *encoder)
119static void intel_crt_get_config(struct intel_encoder *encoder, 119static void intel_crt_get_config(struct intel_encoder *encoder,
120 struct intel_crtc_state *pipe_config) 120 struct intel_crtc_state *pipe_config)
121{ 121{
122 pipe_config->output_types |= BIT(INTEL_OUTPUT_ANALOG);
123
122 pipe_config->base.adjusted_mode.flags |= intel_crt_get_flags(encoder); 124 pipe_config->base.adjusted_mode.flags |= intel_crt_get_flags(encoder);
123 125
124 pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock; 126 pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock;
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 9c118e5305f7..7e0b1a02912a 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2595,12 +2595,23 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
2595 pipe_config->hdmi_high_tmds_clock_ratio = true; 2595 pipe_config->hdmi_high_tmds_clock_ratio = true;
2596 /* fall through */ 2596 /* fall through */
2597 case TRANS_DDI_MODE_SELECT_DVI: 2597 case TRANS_DDI_MODE_SELECT_DVI:
2598 pipe_config->output_types |= BIT(INTEL_OUTPUT_HDMI);
2598 pipe_config->lane_count = 4; 2599 pipe_config->lane_count = 4;
2599 break; 2600 break;
2600 case TRANS_DDI_MODE_SELECT_FDI: 2601 case TRANS_DDI_MODE_SELECT_FDI:
2602 pipe_config->output_types |= BIT(INTEL_OUTPUT_ANALOG);
2601 break; 2603 break;
2602 case TRANS_DDI_MODE_SELECT_DP_SST: 2604 case TRANS_DDI_MODE_SELECT_DP_SST:
2605 if (encoder->type == INTEL_OUTPUT_EDP)
2606 pipe_config->output_types |= BIT(INTEL_OUTPUT_EDP);
2607 else
2608 pipe_config->output_types |= BIT(INTEL_OUTPUT_DP);
2609 pipe_config->lane_count =
2610 ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
2611 intel_dp_get_m_n(intel_crtc, pipe_config);
2612 break;
2603 case TRANS_DDI_MODE_SELECT_DP_MST: 2613 case TRANS_DDI_MODE_SELECT_DP_MST:
2614 pipe_config->output_types |= BIT(INTEL_OUTPUT_DP_MST);
2604 pipe_config->lane_count = 2615 pipe_config->lane_count =
2605 ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1; 2616 ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
2606 intel_dp_get_m_n(intel_crtc, pipe_config); 2617 intel_dp_get_m_n(intel_crtc, pipe_config);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index a369b35d044d..8f769e9b9342 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11562,10 +11562,8 @@ verify_crtc_state(struct drm_crtc *crtc,
11562 "Encoder connected to wrong pipe %c\n", 11562 "Encoder connected to wrong pipe %c\n",
11563 pipe_name(pipe)); 11563 pipe_name(pipe));
11564 11564
11565 if (active) { 11565 if (active)
11566 pipe_config->output_types |= 1 << encoder->type;
11567 encoder->get_config(encoder, pipe_config); 11566 encoder->get_config(encoder, pipe_config);
11568 }
11569 } 11567 }
11570 11568
11571 intel_crtc_compute_pixel_rate(pipe_config); 11569 intel_crtc_compute_pixel_rate(pipe_config);
@@ -14960,7 +14958,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
14960 crtc_state = to_intel_crtc_state(crtc->base.state); 14958 crtc_state = to_intel_crtc_state(crtc->base.state);
14961 14959
14962 encoder->base.crtc = &crtc->base; 14960 encoder->base.crtc = &crtc->base;
14963 crtc_state->output_types |= 1 << encoder->type;
14964 encoder->get_config(encoder, crtc_state); 14961 encoder->get_config(encoder, crtc_state);
14965 } else { 14962 } else {
14966 encoder->base.crtc = NULL; 14963 encoder->base.crtc = NULL;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 8d25a019b772..30688a5d680d 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2621,6 +2621,11 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
2621 enum port port = dp_to_dig_port(intel_dp)->port; 2621 enum port port = dp_to_dig_port(intel_dp)->port;
2622 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 2622 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2623 2623
2624 if (encoder->type == INTEL_OUTPUT_EDP)
2625 pipe_config->output_types |= BIT(INTEL_OUTPUT_EDP);
2626 else
2627 pipe_config->output_types |= BIT(INTEL_OUTPUT_DP);
2628
2624 tmp = I915_READ(intel_dp->output_reg); 2629 tmp = I915_READ(intel_dp->output_reg);
2625 2630
2626 pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A; 2631 pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A;
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index c34ffa959e90..210ad0580a66 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -291,6 +291,8 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
291 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; 291 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
292 u32 temp, flags = 0; 292 u32 temp, flags = 0;
293 293
294 pipe_config->output_types |= BIT(INTEL_OUTPUT_DP_MST);
295
294 pipe_config->has_audio = 296 pipe_config->has_audio =
295 intel_ddi_is_audio_enabled(dev_priv, crtc); 297 intel_ddi_is_audio_enabled(dev_priv, crtc);
296 298
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 83f15848098a..2bff7ab25bf3 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1243,6 +1243,8 @@ static void intel_dsi_get_config(struct intel_encoder *encoder,
1243 u32 pclk; 1243 u32 pclk;
1244 DRM_DEBUG_KMS("\n"); 1244 DRM_DEBUG_KMS("\n");
1245 1245
1246 pipe_config->output_types |= BIT(INTEL_OUTPUT_DSI);
1247
1246 if (IS_GEN9_LP(dev_priv)) 1248 if (IS_GEN9_LP(dev_priv))
1247 bxt_dsi_get_pipe_config(encoder, pipe_config); 1249 bxt_dsi_get_pipe_config(encoder, pipe_config);
1248 1250
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 53c9b763f4ce..754baa00bea9 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -159,6 +159,8 @@ static void intel_dvo_get_config(struct intel_encoder *encoder,
159 struct intel_dvo *intel_dvo = enc_to_dvo(encoder); 159 struct intel_dvo *intel_dvo = enc_to_dvo(encoder);
160 u32 tmp, flags = 0; 160 u32 tmp, flags = 0;
161 161
162 pipe_config->output_types |= BIT(INTEL_OUTPUT_DVO);
163
162 tmp = I915_READ(intel_dvo->dev.dvo_reg); 164 tmp = I915_READ(intel_dvo->dev.dvo_reg);
163 if (tmp & DVO_HSYNC_ACTIVE_HIGH) 165 if (tmp & DVO_HSYNC_ACTIVE_HIGH)
164 flags |= DRM_MODE_FLAG_PHSYNC; 166 flags |= DRM_MODE_FLAG_PHSYNC;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 38fe24565b4d..0ec30b4a7dce 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -957,6 +957,8 @@ static void intel_hdmi_get_config(struct intel_encoder *encoder,
957 u32 tmp, flags = 0; 957 u32 tmp, flags = 0;
958 int dotclock; 958 int dotclock;
959 959
960 pipe_config->output_types |= BIT(INTEL_OUTPUT_HDMI);
961
960 tmp = I915_READ(intel_hdmi->hdmi_reg); 962 tmp = I915_READ(intel_hdmi->hdmi_reg);
961 963
962 if (tmp & SDVO_HSYNC_ACTIVE_HIGH) 964 if (tmp & SDVO_HSYNC_ACTIVE_HIGH)
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 38572d65e46e..ef80499113ee 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -125,6 +125,8 @@ static void intel_lvds_get_config(struct intel_encoder *encoder,
125 struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); 125 struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
126 u32 tmp, flags = 0; 126 u32 tmp, flags = 0;
127 127
128 pipe_config->output_types |= BIT(INTEL_OUTPUT_LVDS);
129
128 tmp = I915_READ(lvds_encoder->reg); 130 tmp = I915_READ(lvds_encoder->reg);
129 if (tmp & LVDS_HSYNC_POLARITY) 131 if (tmp & LVDS_HSYNC_POLARITY)
130 flags |= DRM_MODE_FLAG_NHSYNC; 132 flags |= DRM_MODE_FLAG_NHSYNC;
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 7437944b388f..42ec2d1f7a61 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1429,6 +1429,8 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
1429 u8 val; 1429 u8 val;
1430 bool ret; 1430 bool ret;
1431 1431
1432 pipe_config->output_types |= BIT(INTEL_OUTPUT_SDVO);
1433
1432 sdvox = I915_READ(intel_sdvo->sdvo_reg); 1434 sdvox = I915_READ(intel_sdvo->sdvo_reg);
1433 1435
1434 ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd); 1436 ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd);
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index a79a7591b2cf..b18609cebe03 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -868,6 +868,8 @@ static void
868intel_tv_get_config(struct intel_encoder *encoder, 868intel_tv_get_config(struct intel_encoder *encoder,
869 struct intel_crtc_state *pipe_config) 869 struct intel_crtc_state *pipe_config)
870{ 870{
871 pipe_config->output_types |= BIT(INTEL_OUTPUT_TVOUT);
872
871 pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock; 873 pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock;
872} 874}
873 875