|
@@ -261,8 +261,6 @@ centre_horizontally(struct drm_display_mode *mode,
|
|
|
|
|
|
mode->crtc_hsync_start = mode->crtc_hblank_start + sync_pos;
|
|
|
mode->crtc_hsync_end = mode->crtc_hsync_start + sync_width;
|
|
|
-
|
|
|
- mode->private_flags |= INTEL_MODE_CRTC_TIMINGS_SET;
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -284,8 +282,6 @@ centre_vertically(struct drm_display_mode *mode,
|
|
|
|
|
|
mode->crtc_vsync_start = mode->crtc_vblank_start + sync_pos;
|
|
|
mode->crtc_vsync_end = mode->crtc_vsync_start + sync_width;
|
|
|
-
|
|
|
- mode->private_flags |= INTEL_MODE_CRTC_TIMINGS_SET;
|
|
|
}
|
|
|
|
|
|
static inline u32 panel_fitter_scaling(u32 source, u32 target)
|
|
@@ -301,15 +297,17 @@ static inline u32 panel_fitter_scaling(u32 source, u32 target)
|
|
|
return (FACTOR * ratio + FACTOR/2) / FACTOR;
|
|
|
}
|
|
|
|
|
|
-static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
|
|
- const struct drm_display_mode *mode,
|
|
|
- struct drm_display_mode *adjusted_mode)
|
|
|
+static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
|
|
|
+ struct intel_crtc_config *pipe_config)
|
|
|
{
|
|
|
- struct drm_device *dev = encoder->dev;
|
|
|
+ struct drm_device *dev = intel_encoder->base.dev;
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
- struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(encoder);
|
|
|
+ struct intel_lvds_encoder *lvds_encoder =
|
|
|
+ to_lvds_encoder(&intel_encoder->base);
|
|
|
struct intel_connector *intel_connector =
|
|
|
&lvds_encoder->attached_connector->base;
|
|
|
+ struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode;
|
|
|
+ struct drm_display_mode *mode = &pipe_config->requested_mode;
|
|
|
struct intel_crtc *intel_crtc = lvds_encoder->base.new_crtc;
|
|
|
u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0;
|
|
|
int pipe;
|
|
@@ -359,6 +357,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
|
|
I915_WRITE(BCLRPAT(pipe), 0);
|
|
|
|
|
|
drm_mode_set_crtcinfo(adjusted_mode, 0);
|
|
|
+ pipe_config->timings_set = true;
|
|
|
|
|
|
switch (intel_connector->panel.fitting_mode) {
|
|
|
case DRM_MODE_SCALE_CENTER:
|
|
@@ -661,7 +660,6 @@ static int intel_lvds_set_property(struct drm_connector *connector,
|
|
|
}
|
|
|
|
|
|
static const struct drm_encoder_helper_funcs intel_lvds_helper_funcs = {
|
|
|
- .mode_fixup = intel_lvds_mode_fixup,
|
|
|
.mode_set = intel_lvds_mode_set,
|
|
|
};
|
|
|
|
|
@@ -1105,6 +1103,7 @@ bool intel_lvds_init(struct drm_device *dev)
|
|
|
intel_encoder->enable = intel_enable_lvds;
|
|
|
intel_encoder->pre_enable = intel_pre_enable_lvds;
|
|
|
intel_encoder->pre_pll_enable = intel_pre_pll_enable_lvds;
|
|
|
+ intel_encoder->compute_config = intel_lvds_compute_config;
|
|
|
intel_encoder->disable = intel_disable_lvds;
|
|
|
intel_encoder->get_hw_state = intel_lvds_get_hw_state;
|
|
|
intel_connector->get_hw_state = intel_connector_get_hw_state;
|