Test DRM display modes against the list of modes supported by the
VBIOS. The helper will respect the supported-modes flags in struct
ast_device. Hence only DRM display modes supported by the VBIOS
will be reported; without the current duplication of this information.

Signed-off-by: Thomas Zimmermann <[email protected]>
---
 drivers/gpu/drm/ast/ast_mode.c | 62 +++-------------------------------
 1 file changed, 5 insertions(+), 57 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index e3d15d30aeeae..372abff1c8673 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -950,65 +950,13 @@ static enum drm_mode_status
 ast_crtc_helper_mode_valid(struct drm_crtc *crtc, const struct 
drm_display_mode *mode)
 {
        struct ast_device *ast = to_ast_device(crtc->dev);
-       enum drm_mode_status status;
-
-       if (ast->support_wsxga_p) {
-               if ((mode->hdisplay == 1680) && (mode->vdisplay == 1050))
-                       return MODE_OK;
-               if ((mode->hdisplay == 1280) && (mode->vdisplay == 800))
-                       return MODE_OK;
-               if ((mode->hdisplay == 1440) && (mode->vdisplay == 900))
-                       return MODE_OK;
-               if ((mode->hdisplay == 1360) && (mode->vdisplay == 768))
-                       return MODE_OK;
-               if ((mode->hdisplay == 1600) && (mode->vdisplay == 900))
-                       return MODE_OK;
-
-               if (ast->support_fullhd) {
-                       if ((mode->hdisplay == 1920) && (mode->vdisplay == 
1080))
-                               return MODE_OK;
-
-                       if ((mode->hdisplay == 1920) && (mode->vdisplay == 
1200)) {
-                               if (ast->support_wuxga)
-                                       return MODE_OK;
-                               else
-                                       return MODE_NOMODE;
-                       }
-               }
-       }
+       const struct ast_vbios_enhtable *vmode;
 
-       status = MODE_NOMODE;
+       vmode = ast_vbios_find_mode(ast, mode);
+       if (!vmode)
+               return MODE_NOMODE;
 
-       switch (mode->hdisplay) {
-       case 640:
-               if (mode->vdisplay == 480)
-                       status = MODE_OK;
-               break;
-       case 800:
-               if (mode->vdisplay == 600)
-                       status = MODE_OK;
-               break;
-       case 1024:
-               if (mode->vdisplay == 768)
-                       status = MODE_OK;
-               break;
-       case 1152:
-               if (mode->vdisplay == 864)
-                       status = MODE_OK;
-               break;
-       case 1280:
-               if (mode->vdisplay == 1024)
-                       status = MODE_OK;
-               break;
-       case 1600:
-               if (mode->vdisplay == 1200)
-                       status = MODE_OK;
-               break;
-       default:
-               break;
-       }
-
-       return status;
+       return MODE_OK;
 }
 
 static void ast_crtc_helper_mode_set_nofb(struct drm_crtc *crtc)
-- 
2.47.1

Reply via email to