diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2017-10-27 15:31:23 -0400 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2017-10-30 13:53:22 -0400 |
commit | e1214b95ed83c0bb903fe368c9a408dffd80491d (patch) | |
tree | 9d4537c4f6b52e0dce628458bbd70a192f48db27 | |
parent | d6038611aa3d7d8080a8ae7f3122779fb4779a13 (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.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dsi.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dvo.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_tv.c | 2 |
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) | |||
119 | static void intel_crt_get_config(struct intel_encoder *encoder, | 119 | static 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 | |||
868 | intel_tv_get_config(struct intel_encoder *encoder, | 868 | intel_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 | ||