]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/gpu/drm/i915/intel_lvds.c
drm: Nuke drm_atomic_helper_connector_dpms
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / i915 / intel_lvds.c
index 8b942ef2b3ec3fa8e7a7708a836e6a64a58e93bd..61d557948e2150bd9e511baccf930722950026e1 100644 (file)
@@ -311,8 +311,6 @@ static void intel_enable_lvds(struct intel_encoder *encoder,
 {
        struct drm_device *dev = encoder->base.dev;
        struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
-       struct intel_connector *intel_connector =
-               &lvds_encoder->attached_connector->base;
        struct drm_i915_private *dev_priv = to_i915(dev);
 
        I915_WRITE(lvds_encoder->reg, I915_READ(lvds_encoder->reg) | LVDS_PORT_EN);
@@ -322,7 +320,7 @@ static void intel_enable_lvds(struct intel_encoder *encoder,
        if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 1000))
                DRM_ERROR("timed out waiting for panel to power on\n");
 
-       intel_panel_enable_backlight(intel_connector);
+       intel_panel_enable_backlight(pipe_config, conn_state);
 }
 
 static void intel_disable_lvds(struct intel_encoder *encoder,
@@ -345,11 +343,7 @@ static void gmch_disable_lvds(struct intel_encoder *encoder,
                              struct drm_connector_state *old_conn_state)
 
 {
-       struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
-       struct intel_connector *intel_connector =
-               &lvds_encoder->attached_connector->base;
-
-       intel_panel_disable_backlight(intel_connector);
+       intel_panel_disable_backlight(old_conn_state);
 
        intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
 }
@@ -358,11 +352,7 @@ static void pch_disable_lvds(struct intel_encoder *encoder,
                             struct intel_crtc_state *old_crtc_state,
                             struct drm_connector_state *old_conn_state)
 {
-       struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
-       struct intel_connector *intel_connector =
-               &lvds_encoder->attached_connector->base;
-
-       intel_panel_disable_backlight(intel_connector);
+       intel_panel_disable_backlight(old_conn_state);
 }
 
 static void pch_post_disable_lvds(struct intel_encoder *encoder,
@@ -433,10 +423,10 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
                pipe_config->has_pch_encoder = true;
 
                intel_pch_panel_fitting(intel_crtc, pipe_config,
-                                       intel_connector->panel.fitting_mode);
+                                       conn_state->scaling_mode);
        } else {
                intel_gmch_panel_fitting(intel_crtc, pipe_config,
-                                        intel_connector->panel.fitting_mode);
+                                        conn_state->scaling_mode);
 
        }
 
@@ -598,56 +588,22 @@ static void intel_lvds_destroy(struct drm_connector *connector)
        kfree(connector);
 }
 
-static int intel_lvds_set_property(struct drm_connector *connector,
-                                  struct drm_property *property,
-                                  uint64_t value)
-{
-       struct intel_connector *intel_connector = to_intel_connector(connector);
-       struct drm_device *dev = connector->dev;
-
-       if (property == dev->mode_config.scaling_mode_property) {
-               struct drm_crtc *crtc;
-
-               if (value == DRM_MODE_SCALE_NONE) {
-                       DRM_DEBUG_KMS("no scaling not supported\n");
-                       return -EINVAL;
-               }
-
-               if (intel_connector->panel.fitting_mode == value) {
-                       /* the LVDS scaling property is not changed */
-                       return 0;
-               }
-               intel_connector->panel.fitting_mode = value;
-
-               crtc = intel_attached_encoder(connector)->base.crtc;
-               if (crtc && crtc->state->enable) {
-                       /*
-                        * If the CRTC is enabled, the display will be changed
-                        * according to the new panel fitting mode.
-                        */
-                       intel_crtc_restore_mode(crtc);
-               }
-       }
-
-       return 0;
-}
-
 static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
        .get_modes = intel_lvds_get_modes,
        .mode_valid = intel_lvds_mode_valid,
+       .atomic_check = intel_digital_connector_atomic_check,
 };
 
 static const struct drm_connector_funcs intel_lvds_connector_funcs = {
-       .dpms = drm_atomic_helper_connector_dpms,
        .detect = intel_lvds_detect,
        .fill_modes = drm_helper_probe_single_connector_modes,
-       .set_property = intel_lvds_set_property,
-       .atomic_get_property = intel_connector_atomic_get_property,
+       .atomic_get_property = intel_digital_connector_atomic_get_property,
+       .atomic_set_property = intel_digital_connector_atomic_set_property,
        .late_register = intel_connector_register,
        .early_unregister = intel_connector_unregister,
        .destroy = intel_lvds_destroy,
        .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
-       .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+       .atomic_duplicate_state = intel_digital_connector_duplicate_state,
 };
 
 static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
@@ -988,6 +944,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;
@@ -1083,11 +1040,11 @@ 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);
-       intel_connector->panel.fitting_mode = 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);
        lvds_encoder->init_lvds_val = lvds;