If the -M parameter is specified, modetest will use the requested device
name instead of trying its builtin list of device names.

Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
Reviewed-by: Jani Nikula <jani.nik...@intel.com>
---
 tests/modetest/modetest.c | 50 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 2bb4b19..5802c8e 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -894,7 +894,7 @@ static int parse_plane(struct plane *p, const char *arg)
 
 static void usage(char *name)
 {
-       fprintf(stderr, "usage: %s [-cefmPpsv]\n", name);
+       fprintf(stderr, "usage: %s [-cefMmPpsv]\n", name);
 
        fprintf(stderr, "\n Query options:\n\n");
        fprintf(stderr, "\t-c\tlist connectors\n");
@@ -908,6 +908,9 @@ static void usage(char *name)
        fprintf(stderr, "\t-s <connector_id>[@<crtc_id>]:<mode>[@<format>]\tset 
a mode\n");
        fprintf(stderr, "\t-v\ttest vsynced page flipping\n");
 
+       fprintf(stderr, "\n Generic options:\n\n");
+       fprintf(stderr, "\t-M module\tuse the given driver\n");
+
        fprintf(stderr, "\n\tDefault is to dump all info.\n");
        exit(0);
 }
@@ -935,7 +938,7 @@ static int page_flipping_supported(void)
 #endif
 }
 
-static char optstr[] = "cefmP:ps:v";
+static char optstr[] = "cefM:mP:ps:v";
 
 int main(int argc, char **argv)
 {
@@ -943,13 +946,17 @@ int main(int argc, char **argv)
        int encoders = 0, connectors = 0, crtcs = 0, planes = 0, framebuffers = 
0;
        int test_vsync = 0;
        const char *modules[] = { "i915", "radeon", "nouveau", "vmwgfx", 
"omapdrm", "exynos" };
+       char *module = NULL;
        unsigned int i;
        int count = 0, plane_count = 0;
        struct connector con_args[2];
        struct plane plane_args[2] = { { 0, }, };
+       unsigned int args = 0;
        
        opterr = 0;
        while ((c = getopt(argc, argv, optstr)) != -1) {
+               args++;
+
                switch (c) {
                case 'c':
                        connectors = 1;
@@ -960,6 +967,11 @@ int main(int argc, char **argv)
                case 'f':
                        framebuffers = 1;
                        break;
+               case 'M':
+                       module = optarg;
+                       /* Preserve the default behaviour of dumping all 
information. */
+                       args--;
+                       break;
                case 'm':
                        modes = 1;
                        break;
@@ -986,17 +998,30 @@ int main(int argc, char **argv)
                }
        }
 
-       if (argc == 1)
+       if (!args)
                encoders = connectors = crtcs = planes = modes = framebuffers = 
1;
 
-       for (i = 0; i < ARRAY_SIZE(modules); i++) {
-               printf("trying to load module %s...", modules[i]);
-               fd = drmOpen(modules[i], NULL);
+       if (module) {
+               fd = drmOpen(module, NULL);
                if (fd < 0) {
-                       printf("failed.\n");
-               } else {
-                       printf("success.\n");
-                       break;
+                       fprintf(stderr, "failed to open device '%s'.\n", 
module);
+                       return 1;
+               }
+       } else {
+               for (i = 0; i < ARRAY_SIZE(modules); i++) {
+                       printf("trying to open device '%s'...", modules[i]);
+                       fd = drmOpen(modules[i], NULL);
+                       if (fd < 0) {
+                               printf("failed.\n");
+                       } else {
+                               printf("success.\n");
+                               break;
+                       }
+               }
+
+               if (fd < 0) {
+                       fprintf(stderr, "no device found.\n");
+                       return 1;
                }
        }
 
@@ -1005,11 +1030,6 @@ int main(int argc, char **argv)
                return -1;
        }
 
-       if (i == ARRAY_SIZE(modules)) {
-               fprintf(stderr, "failed to load any modules, aborting.\n");
-               return -1;
-       }
-
        resources = drmModeGetResources(fd);
        if (!resources) {
                fprintf(stderr, "drmModeGetResources failed: %s\n",
-- 
1.8.1.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to