diff options
| -rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 4c47b449b775..d4ea6c265ce1 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
| @@ -1777,10 +1777,13 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) | |||
| 1777 | * arranged in priority order. | 1777 | * arranged in priority order. |
| 1778 | */ | 1778 | */ |
| 1779 | intel_ddc_get_modes(connector, &intel_sdvo->ddc); | 1779 | intel_ddc_get_modes(connector, &intel_sdvo->ddc); |
| 1780 | if (list_empty(&connector->probed_modes) == false) | ||
| 1781 | goto end; | ||
| 1782 | 1780 | ||
| 1783 | /* Fetch modes from VBT */ | 1781 | /* |
| 1782 | * Fetch modes from VBT. For SDVO prefer the VBT mode since some | ||
| 1783 | * SDVO->LVDS transcoders can't cope with the EDID mode. Since | ||
| 1784 | * drm_mode_probed_add adds the mode at the head of the list we add it | ||
| 1785 | * last. | ||
| 1786 | */ | ||
| 1784 | if (dev_priv->sdvo_lvds_vbt_mode != NULL) { | 1787 | if (dev_priv->sdvo_lvds_vbt_mode != NULL) { |
| 1785 | newmode = drm_mode_duplicate(connector->dev, | 1788 | newmode = drm_mode_duplicate(connector->dev, |
| 1786 | dev_priv->sdvo_lvds_vbt_mode); | 1789 | dev_priv->sdvo_lvds_vbt_mode); |
| @@ -1792,7 +1795,6 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) | |||
| 1792 | } | 1795 | } |
| 1793 | } | 1796 | } |
| 1794 | 1797 | ||
| 1795 | end: | ||
| 1796 | list_for_each_entry(newmode, &connector->probed_modes, head) { | 1798 | list_for_each_entry(newmode, &connector->probed_modes, head) { |
| 1797 | if (newmode->type & DRM_MODE_TYPE_PREFERRED) { | 1799 | if (newmode->type & DRM_MODE_TYPE_PREFERRED) { |
| 1798 | intel_sdvo->sdvo_lvds_fixed_mode = | 1800 | intel_sdvo->sdvo_lvds_fixed_mode = |
| @@ -2790,12 +2792,6 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) | |||
| 2790 | SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; | 2792 | SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; |
| 2791 | } | 2793 | } |
| 2792 | 2794 | ||
| 2793 | /* Only enable the hotplug irq if we need it, to work around noisy | ||
| 2794 | * hotplug lines. | ||
| 2795 | */ | ||
| 2796 | if (intel_sdvo->hotplug_active) | ||
| 2797 | intel_encoder->hpd_pin = HPD_SDVO_B ? HPD_SDVO_B : HPD_SDVO_C; | ||
| 2798 | |||
| 2799 | intel_encoder->compute_config = intel_sdvo_compute_config; | 2795 | intel_encoder->compute_config = intel_sdvo_compute_config; |
| 2800 | intel_encoder->disable = intel_disable_sdvo; | 2796 | intel_encoder->disable = intel_disable_sdvo; |
| 2801 | intel_encoder->mode_set = intel_sdvo_mode_set; | 2797 | intel_encoder->mode_set = intel_sdvo_mode_set; |
| @@ -2814,6 +2810,14 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) | |||
| 2814 | goto err_output; | 2810 | goto err_output; |
| 2815 | } | 2811 | } |
| 2816 | 2812 | ||
| 2813 | /* Only enable the hotplug irq if we need it, to work around noisy | ||
| 2814 | * hotplug lines. | ||
| 2815 | */ | ||
| 2816 | if (intel_sdvo->hotplug_active) { | ||
| 2817 | intel_encoder->hpd_pin = | ||
| 2818 | intel_sdvo->is_sdvob ? HPD_SDVO_B : HPD_SDVO_C; | ||
| 2819 | } | ||
| 2820 | |||
| 2817 | /* | 2821 | /* |
| 2818 | * Cloning SDVO with anything is often impossible, since the SDVO | 2822 | * Cloning SDVO with anything is often impossible, since the SDVO |
| 2819 | * encoder can request a special input timing mode. And even if that's | 2823 | * encoder can request a special input timing mode. And even if that's |
