On Thu, Oct 25, 2012 at 01:57:47PM -0400, Yuly Novikov wrote:
LVDS allowed changing panel fitting scaling mode, while eDP didn't. Copied relevant code from LVDS to eDP. This also changes default mode on eDP to ascpect ratio preserving scaling.
Signed-off-by: Yuly Novikov ynovikov@chromium.org
Jani from our team is working on unifying a bunch of things between lvds and eDP, some of them already merged into drm-intel-next-queued branch. Jani, can you please take a look?
Thanks, Daniel
drivers/gpu/drm/i915/intel_dp.c | 33 ++++++++++++++++++++++++++++++--- drivers/gpu/drm/i915/intel_drv.h | 1 + 2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 368ed8e..a65546e 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -685,7 +685,7 @@ intel_dp_mode_fixup(struct drm_encoder *encoder,
if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) { intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode);
intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
}intel_pch_panel_fitting(dev, intel_dp->fitting_mode, mode, adjusted_mode);
@@ -2358,6 +2358,22 @@ intel_dp_set_property(struct drm_connector *connector, goto done; }
- if (is_edp(intel_dp) &&
property == connector->dev->mode_config.scaling_mode_property) {
if (val == DRM_MODE_SCALE_NONE) {
DRM_DEBUG_KMS("no scaling not supported\n");
return -EINVAL;
}
if (intel_dp->fitting_mode == val) {
/* the eDP scaling property is not changed */
return 0;
}
intel_dp->fitting_mode = val;
goto done;
- }
- return -EINVAL;
done: @@ -2469,10 +2485,21 @@ bool intel_dpd_is_edp(struct drm_device *dev) }
static void -intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector) +intel_dp_add_properties(struct drm_device *dev,
struct intel_dp *intel_dp,
struct drm_connector *connector)
{ intel_attach_force_audio_property(connector); intel_attach_broadcast_rgb_property(connector);
- if (is_edp(intel_dp)) {
drm_mode_create_scaling_mode_property(dev);
drm_connector_attach_property(
connector,
dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_ASPECT);
intel_dp->fitting_mode = DRM_MODE_SCALE_ASPECT;
- }
}
void @@ -2665,7 +2692,7 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port) intel_panel_setup_backlight(dev); }
- intel_dp_add_properties(intel_dp, connector);
intel_dp_add_properties(dev, intel_dp, connector);
/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
- 0xd. Failure to do so will result in spurious interrupts being
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index fe71425..da50cd4 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -358,6 +358,7 @@ struct intel_dp { int backlight_on_delay; int backlight_off_delay; struct drm_display_mode *panel_fixed_mode; /* for eDP */
- int fitting_mode; /* for eDP */ struct delayed_work panel_vdd_work; bool want_panel_vdd; struct edid *edid; /* cached EDID for eDP */
-- 1.7.7.3