Skip to content

Commit

Permalink
drm/i915: Use per-connector scaling mode property
Browse files Browse the repository at this point in the history
None of the intel connectors can use all types of scaling modes,
so only try the ones that are possible. This is another preparation
for connectors towards conversion to atomic.

Signed-off-by: Maarten Lankhorst <[email protected]>
Reviewed-by: Daniel Vetter <[email protected]>
Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
[mlankhorst: Use renamed drm_connector_attach_scaling_mode_property function]
  • Loading branch information
mlankhorst committed May 30, 2017
1 parent eead06d commit 8b45330
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 45 deletions.
29 changes: 12 additions & 17 deletions drivers/gpu/drm/i915/intel_dp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4888,18 +4888,7 @@ 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 (HAS_GMCH_DISPLAY(dev_priv) &&
val == DRM_MODE_SCALE_CENTER) {
DRM_DEBUG_KMS("centering not supported\n");
return -EINVAL;
}

if (property == connector->scaling_mode_property) {
if (connector->state->scaling_mode == val) {
/* the eDP scaling property is not changed */
return 0;
Expand Down Expand Up @@ -5182,17 +5171,23 @@ bool intel_dp_is_edp(struct drm_i915_private *dev_priv, enum port port)
static void
intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector)
{
struct drm_i915_private *dev_priv = to_i915(connector->dev);

intel_attach_force_audio_property(connector);
intel_attach_broadcast_rgb_property(connector);
intel_dp->color_range_auto = true;

if (is_edp(intel_dp)) {
drm_mode_create_scaling_mode_property(connector->dev);
drm_object_attach_property(
&connector->base,
connector->dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_ASPECT);
u32 allowed_scalers;

allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN);
if (!HAS_GMCH_DISPLAY(dev_priv))
allowed_scalers |= BIT(DRM_MODE_SCALE_CENTER);

drm_connector_attach_scaling_mode_property(connector, allowed_scalers);

connector->state->scaling_mode = DRM_MODE_SCALE_ASPECT;

}
}

Expand Down
28 changes: 11 additions & 17 deletions drivers/gpu/drm/i915/intel_dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1591,25 +1591,14 @@ static int intel_dsi_set_property(struct drm_connector *connector,
struct drm_property *property,
uint64_t val)
{
struct drm_device *dev = connector->dev;
struct drm_crtc *crtc;
int ret;

ret = drm_object_property_set_value(&connector->base, property, val);
if (ret)
return ret;

if (property == dev->mode_config.scaling_mode_property) {
if (val == DRM_MODE_SCALE_NONE) {
DRM_DEBUG_KMS("no scaling not supported\n");
return -EINVAL;
}
if (HAS_GMCH_DISPLAY(to_i915(dev)) &&
val == DRM_MODE_SCALE_CENTER) {
DRM_DEBUG_KMS("centering not supported\n");
return -EINVAL;
}

if (property == connector->scaling_mode_property) {
if (connector->state->scaling_mode == val)
return 0;

Expand Down Expand Up @@ -1672,13 +1661,18 @@ static const struct drm_connector_funcs intel_dsi_connector_funcs = {

static void intel_dsi_add_properties(struct intel_connector *connector)
{
struct drm_device *dev = connector->base.dev;
struct drm_i915_private *dev_priv = to_i915(connector->base.dev);

if (connector->panel.fixed_mode) {
drm_mode_create_scaling_mode_property(dev);
drm_object_attach_property(&connector->base.base,
dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_ASPECT);
u32 allowed_scalers;

allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN);
if (!HAS_GMCH_DISPLAY(dev_priv))
allowed_scalers |= BIT(DRM_MODE_SCALE_CENTER);

drm_connector_attach_scaling_mode_property(&connector->base,
allowed_scalers);

connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT;
}
}
Expand Down
17 changes: 6 additions & 11 deletions drivers/gpu/drm/i915/intel_lvds.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,16 +602,10 @@ static int intel_lvds_set_property(struct drm_connector *connector,
struct drm_property *property,
uint64_t value)
{
struct drm_device *dev = connector->dev;

if (property == dev->mode_config.scaling_mode_property) {
if (property == connector->scaling_mode_property) {
struct drm_crtc *crtc;

if (value == DRM_MODE_SCALE_NONE) {
DRM_DEBUG_KMS("no scaling not supported\n");
return -EINVAL;
}

if (connector->state->scaling_mode == value) {
/* the LVDS scaling property is not changed */
return 0;
Expand Down Expand Up @@ -987,6 +981,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
u32 lvds;
int pipe;
u8 pin;
u32 allowed_scalers;

if (!intel_lvds_supported(dev_priv))
return;
Expand Down Expand Up @@ -1082,10 +1077,10 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
lvds_encoder->reg = lvds_reg;

/* create the scaling mode property */
drm_mode_create_scaling_mode_property(dev);
drm_object_attach_property(&connector->base,
dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_ASPECT);
allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT);
allowed_scalers |= BIT(DRM_MODE_SCALE_FULLSCREEN);
allowed_scalers |= BIT(DRM_MODE_SCALE_CENTER);
drm_connector_attach_scaling_mode_property(connector, allowed_scalers);
connector->state->scaling_mode = DRM_MODE_SCALE_ASPECT;

intel_lvds_pps_get_hw_state(dev_priv, &lvds_encoder->init_pps);
Expand Down

0 comments on commit 8b45330

Please sign in to comment.