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

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 tests/modetest/modetest.c | 34 +++++++++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 34457e2..b6298fc 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -908,6 +908,9 @@ 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,6 +946,7 @@ int main(int argc, char **argv)
        int encoders = 0, connectors = 0, crtcs = 0, planes = 0, framebuffers = 
0;
        int test_vsync = 0;
        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];
@@ -960,6 +964,9 @@ int main(int argc, char **argv)
                case 'f':
                        framebuffers = 1;
                        break;
+               case 'M':
+                       module = optarg;
+                       break;
                case 'm':
                        modes = 1;
                        break;
@@ -989,14 +996,27 @@ int main(int argc, char **argv)
        if (argc == 1)
                encoders = connectors = crtcs = planes = modes = framebuffers = 
1;

-       for (i = 0; i < ARRAY_SIZE(modules); i++) {
-               printf("trying to load module %s...", modules[i]);
+       if (module) {
                fd = drmOpen(modules[i], NULL);
                if (fd < 0) {
-                       printf("failed.\n");
-               } else {
-                       printf("success.\n");
-                       break;
+                       printf("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) {
+                       printf("no device found.\n", module);
+                       return 1;
                }
        }

-- 
1.7.12.4

Reply via email to