]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/i915: Use intel_panel_mode_valid() for DSI/LVDS/(s)DVO
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 23 Sep 2021 20:01:05 +0000 (23:01 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 30 Sep 2021 08:19:08 +0000 (11:19 +0300)
All fixed mode panels should behave the same way when it comes to mode
filtering. Reuse the intel_panel_mode_valid() for all of them.

This changes the behaviour to match what we do for eDP, ie.
reject anything that doesn't exactly match the fixed mode
dimensions. Users can still manually provide different
sized modes which will be handled by the panel fitter just
as before. The difference is that we can no longer report
funny modes in the connector's mode list.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210923200109.4459-3-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_dsi.c
drivers/gpu/drm/i915/display/intel_dvo.c
drivers/gpu/drm/i915/display/intel_lvds.c
drivers/gpu/drm/i915/display/intel_sdvo.c

index f453ceb8d1494529ebe698ad58a7325c8151cd61..6f1171112a3af5d96a406fe1072d9b54e4e3cb20 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <drm/drm_mipi_dsi.h>
 #include "intel_dsi.h"
+#include "intel_panel.h"
 
 int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
 {
@@ -67,10 +68,12 @@ enum drm_mode_status intel_dsi_mode_valid(struct drm_connector *connector,
                return MODE_NO_DBLESCAN;
 
        if (fixed_mode) {
-               if (mode->hdisplay > fixed_mode->hdisplay)
-                       return MODE_PANEL;
-               if (mode->vdisplay > fixed_mode->vdisplay)
-                       return MODE_PANEL;
+               enum drm_mode_status status;
+
+               status = intel_panel_mode_valid(intel_connector, mode);
+               if (status != MODE_OK)
+                       return status;
+
                if (fixed_mode->clock > max_dotclk)
                        return MODE_CLOCK_HIGH;
        }
index 86c903e9df604f7484de087b48ca9eceddd7befc..f8fdc0386fd40d4fb19bd8c3b365092fdb8e41b2 100644 (file)
@@ -223,9 +223,10 @@ static enum drm_mode_status
 intel_dvo_mode_valid(struct drm_connector *connector,
                     struct drm_display_mode *mode)
 {
-       struct intel_dvo *intel_dvo = intel_attached_dvo(to_intel_connector(connector));
+       struct intel_connector *intel_connector = to_intel_connector(connector);
+       struct intel_dvo *intel_dvo = intel_attached_dvo(intel_connector);
        const struct drm_display_mode *fixed_mode =
-               to_intel_connector(connector)->panel.fixed_mode;
+               intel_connector->panel.fixed_mode;
        int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
        int target_clock = mode->clock;
 
@@ -235,10 +236,11 @@ intel_dvo_mode_valid(struct drm_connector *connector,
        /* XXX: Validate clock range */
 
        if (fixed_mode) {
-               if (mode->hdisplay > fixed_mode->hdisplay)
-                       return MODE_PANEL;
-               if (mode->vdisplay > fixed_mode->vdisplay)
-                       return MODE_PANEL;
+               enum drm_mode_status status;
+
+               status = intel_panel_mode_valid(intel_connector, mode);
+               if (status != MODE_OK)
+                       return status;
 
                target_clock = fixed_mode->clock;
        }
index e9fb402708a7bfe2c59086cf59d54815d18e1388..37e81bc71f7c1d3a80ec04b0112c987ee86547db 100644 (file)
@@ -389,13 +389,15 @@ intel_lvds_mode_valid(struct drm_connector *connector,
        struct intel_connector *intel_connector = to_intel_connector(connector);
        struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
        int max_pixclk = to_i915(connector->dev)->max_dotclk_freq;
+       enum drm_mode_status status;
 
        if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
                return MODE_NO_DBLESCAN;
-       if (mode->hdisplay > fixed_mode->hdisplay)
-               return MODE_PANEL;
-       if (mode->vdisplay > fixed_mode->vdisplay)
-               return MODE_PANEL;
+
+       status = intel_panel_mode_valid(intel_connector, mode);
+       if (status != MODE_OK)
+               return status;
+
        if (fixed_mode->clock > max_pixclk)
                return MODE_CLOCK_HIGH;
 
index 6cb27599ea0303e5d75e4988981e9c6c255e7947..fe0ea1db4cf11e6fe4ec0c3e4571506af6c3837b 100644 (file)
@@ -1873,7 +1873,6 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
        if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
                return MODE_NO_DBLESCAN;
 
-
        if (clock > max_dotclk)
                return MODE_CLOCK_HIGH;
 
@@ -1890,14 +1889,11 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
                return MODE_CLOCK_HIGH;
 
        if (IS_LVDS(intel_sdvo_connector)) {
-               const struct drm_display_mode *fixed_mode =
-                       intel_sdvo_connector->base.panel.fixed_mode;
-
-               if (mode->hdisplay > fixed_mode->hdisplay)
-                       return MODE_PANEL;
+               enum drm_mode_status status;
 
-               if (mode->vdisplay > fixed_mode->vdisplay)
-                       return MODE_PANEL;
+               status = intel_panel_mode_valid(&intel_sdvo_connector->base, mode);
+               if (status != MODE_OK)
+                       return status;
        }
 
        return MODE_OK;