summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/display/intel_sdvo.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2022-03-23 20:29:35 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2022-03-29 16:35:33 +0300
commit50203b943b4f8522e6991e38e0f11594cd6845f8 (patch)
treef4565b3a63aeeeaabf0e04cde92528b56b20131f /drivers/gpu/drm/i915/display/intel_sdvo.c
parent7a36980cd2360141b5a6930236399a33c7cbbbb6 (diff)
downloadlinux-50203b943b4f8522e6991e38e0f11594cd6845f8.tar.gz
linux-50203b943b4f8522e6991e38e0f11594cd6845f8.tar.bz2
linux-50203b943b4f8522e6991e38e0f11594cd6845f8.zip
drm/i915: Change SDVO fixed mode handling
SDVO is the only connector type currently returning the VBT fixed mode directly from .get_modes(), everyone else just adds it to the fixed_modes list and then returns that from .get_modes(). Adjust SDVO to follow the common behaviour. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220323182935.4701-10-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_sdvo.c')
-rw-r--r--drivers/gpu/drm/i915/display/intel_sdvo.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 62e2e8b4358c..c9c3f71818d9 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2291,27 +2291,12 @@ static int intel_sdvo_get_lvds_modes(struct drm_connector *connector)
{
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
struct drm_i915_private *dev_priv = to_i915(connector->dev);
- struct drm_display_mode *newmode;
int num_modes = 0;
drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s]\n",
connector->base.id, connector->name);
- /*
- * Fetch modes from VBT. For SDVO prefer the VBT mode since some
- * SDVO->LVDS transcoders can't cope with the EDID mode.
- */
- newmode = intel_panel_vbt_sdvo_fixed_mode(to_intel_connector(connector));
- if (newmode) {
- drm_mode_probed_add(connector, newmode);
- num_modes++;
- }
-
- /*
- * Attempt to get the mode list from DDC.
- * Assume that the preferred modes are
- * arranged in priority order.
- */
+ num_modes += intel_panel_get_modes(to_intel_connector(connector));
num_modes += intel_ddc_get_modes(connector, &intel_sdvo->ddc);
return num_modes;
@@ -2915,9 +2900,15 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
goto err;
- intel_sdvo_get_lvds_modes(connector);
-
- fixed_mode = intel_panel_edid_fixed_mode(intel_connector);
+ /*
+ * Fetch modes from VBT. For SDVO prefer the VBT mode since some
+ * SDVO->LVDS transcoders can't cope with the EDID mode.
+ */
+ fixed_mode = intel_panel_vbt_sdvo_fixed_mode(intel_connector);
+ if (!fixed_mode) {
+ intel_ddc_get_modes(connector, &intel_sdvo->ddc);
+ fixed_mode = intel_panel_edid_fixed_mode(intel_connector);
+ }
intel_panel_init(intel_connector, fixed_mode, NULL);