VIGS: Support custom resolutions
authorStanislav Vorobiov <s.vorobiov@samsung.com>
Mon, 17 Jun 2013 15:29:48 +0000 (19:29 +0400)
committerStanislav Vorobiov <s.vorobiov@samsung.com>
Mon, 17 Jun 2013 15:29:48 +0000 (19:29 +0400)
drivers/gpu/drm/vigs/vigs_output.c

index 7b11e6fdbef7672f81a57ed73c89a1cea79f5cb3..28984813bf5c196e720272a4950bf492614828c9 100644 (file)
@@ -88,29 +88,26 @@ static int vigs_connector_get_modes(struct drm_connector *connector)
 {
     struct vigs_output *vigs_output = connector_to_vigs_output(connector);
     struct drm_device *drm_dev = vigs_output->connector.dev;
-    int i;
-    struct
-    {
-        int w;
-        int h;
-    } modes[] =
-    {
-        { 480, 800 },
-        { 720, 1280 },
-    };
+    char *option = NULL;
 
     DRM_DEBUG_KMS("enter\n");
 
-    for (i = 0; i < ARRAY_SIZE(modes); i++) {
-        struct drm_display_mode *mode =
-            drm_cvt_mode(drm_dev,
-                         modes[i].w,
-                         modes[i].h,
-                         60, false, false, false);
-        drm_mode_probed_add(connector, mode);
+    if (fb_get_options(drm_get_connector_name(connector), &option) == 0) {
+        struct drm_cmdline_mode cmdline_mode;
+
+        if (drm_mode_parse_command_line_for_connector(option,
+                                                      connector,
+                                                      &cmdline_mode)) {
+            struct drm_display_mode *preferred_mode =
+                drm_mode_create_from_cmdline_mode(drm_dev,
+                                                  &cmdline_mode);
+            preferred_mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
+            drm_mode_probed_add(connector, preferred_mode);
+            return 1;
+        }
     }
 
-    return (i - 1);
+    return 0;
 }
 
 static int vigs_connector_mode_valid(struct drm_connector *connector,