diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lvds.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 3f3043b4ff26..fecff3c2b9e1 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -899,6 +899,7 @@ void intel_lvds_init(struct drm_device *dev) | |||
899 | struct drm_encoder *encoder; | 899 | struct drm_encoder *encoder; |
900 | struct drm_display_mode *scan; /* *modes, *bios_mode; */ | 900 | struct drm_display_mode *scan; /* *modes, *bios_mode; */ |
901 | struct drm_display_mode *fixed_mode = NULL; | 901 | struct drm_display_mode *fixed_mode = NULL; |
902 | struct drm_display_mode *downclock_mode = NULL; | ||
902 | struct edid *edid; | 903 | struct edid *edid; |
903 | struct drm_crtc *crtc; | 904 | struct drm_crtc *crtc; |
904 | u32 lvds; | 905 | u32 lvds; |
@@ -957,6 +958,7 @@ void intel_lvds_init(struct drm_device *dev) | |||
957 | intel_encoder->get_hw_state = intel_lvds_get_hw_state; | 958 | intel_encoder->get_hw_state = intel_lvds_get_hw_state; |
958 | intel_encoder->get_config = intel_lvds_get_config; | 959 | intel_encoder->get_config = intel_lvds_get_config; |
959 | intel_connector->get_hw_state = intel_connector_get_hw_state; | 960 | intel_connector->get_hw_state = intel_connector_get_hw_state; |
961 | intel_connector->unregister = intel_connector_unregister; | ||
960 | 962 | ||
961 | intel_connector_attach_encoder(intel_connector, intel_encoder); | 963 | intel_connector_attach_encoder(intel_connector, intel_encoder); |
962 | intel_encoder->type = INTEL_OUTPUT_LVDS; | 964 | intel_encoder->type = INTEL_OUTPUT_LVDS; |
@@ -1032,15 +1034,14 @@ void intel_lvds_init(struct drm_device *dev) | |||
1032 | 1034 | ||
1033 | fixed_mode = drm_mode_duplicate(dev, scan); | 1035 | fixed_mode = drm_mode_duplicate(dev, scan); |
1034 | if (fixed_mode) { | 1036 | if (fixed_mode) { |
1035 | intel_connector->panel.downclock_mode = | 1037 | downclock_mode = |
1036 | intel_find_panel_downclock(dev, | 1038 | intel_find_panel_downclock(dev, |
1037 | fixed_mode, connector); | 1039 | fixed_mode, connector); |
1038 | if (intel_connector->panel.downclock_mode != | 1040 | if (downclock_mode != NULL && |
1039 | NULL && i915.lvds_downclock) { | 1041 | i915.lvds_downclock) { |
1040 | /* We found the downclock for LVDS. */ | 1042 | /* We found the downclock for LVDS. */ |
1041 | dev_priv->lvds_downclock_avail = true; | 1043 | dev_priv->lvds_downclock_avail = true; |
1042 | dev_priv->lvds_downclock = | 1044 | dev_priv->lvds_downclock = |
1043 | intel_connector->panel. | ||
1044 | downclock_mode->clock; | 1045 | downclock_mode->clock; |
1045 | DRM_DEBUG_KMS("LVDS downclock is found" | 1046 | DRM_DEBUG_KMS("LVDS downclock is found" |
1046 | " in EDID. Normal clock %dKhz, " | 1047 | " in EDID. Normal clock %dKhz, " |
@@ -1116,7 +1117,7 @@ out: | |||
1116 | } | 1117 | } |
1117 | drm_sysfs_connector_add(connector); | 1118 | drm_sysfs_connector_add(connector); |
1118 | 1119 | ||
1119 | intel_panel_init(&intel_connector->panel, fixed_mode); | 1120 | intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode); |
1120 | intel_panel_setup_backlight(connector); | 1121 | intel_panel_setup_backlight(connector); |
1121 | 1122 | ||
1122 | return; | 1123 | return; |
@@ -1125,8 +1126,6 @@ failed: | |||
1125 | DRM_DEBUG_KMS("No LVDS modes found, disabling.\n"); | 1126 | DRM_DEBUG_KMS("No LVDS modes found, disabling.\n"); |
1126 | drm_connector_cleanup(connector); | 1127 | drm_connector_cleanup(connector); |
1127 | drm_encoder_cleanup(encoder); | 1128 | drm_encoder_cleanup(encoder); |
1128 | if (fixed_mode) | ||
1129 | drm_mode_destroy(dev, fixed_mode); | ||
1130 | kfree(lvds_encoder); | 1129 | kfree(lvds_encoder); |
1131 | kfree(lvds_connector); | 1130 | kfree(lvds_connector); |
1132 | return; | 1131 | return; |