vainfo: add an option "--device" to specify a drm device

This option is only available when the drm display is specified in the
command line

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
diff --git a/common/va_display.c b/common/va_display.c
index 68aa43f..30a25ae 100644
--- a/common/va_display.c
+++ b/common/va_display.c
@@ -56,6 +56,7 @@
 };
 
 static const char *g_display_name;
+const char *g_drm_device_name;
 
 static const char *
 get_display_name(int argc, char *argv[])
@@ -76,6 +77,25 @@
     return display_name;
 }
 
+static const char *
+get_drm_device_name(int argc, char *argv[])
+{
+    const char *device_name = NULL;
+    int i;
+
+    for (i = 1; i < argc; i++) {
+        if (argv[i] && (strcmp(argv[i], "--device") != 0))
+            continue;
+        argv[i] = NULL;
+
+        if (++i < argc) {
+            device_name = argv[i];
+            argv[i] = NULL;
+        }
+    }
+    return device_name;
+}
+
 static void
 print_display_names(void)
 {
@@ -104,6 +124,7 @@
 va_init_display_args(int *argc, char *argv[])
 {
     const char *display_name;
+    const char *device_name;
 
     display_name = get_display_name(*argc, argv);
     if (display_name && strcmp(display_name, "help") == 0) {
@@ -112,6 +133,9 @@
     }
     g_display_name = display_name;
 
+    if (g_display_name && strcmp(g_display_name, "drm") == 0)
+        g_drm_device_name = get_drm_device_name(*argc, argv);
+
     sanitize_args(argc, argv);
 }
 
diff --git a/common/va_display_drm.c b/common/va_display_drm.c
index b6394cd..4d9c656 100644
--- a/common/va_display_drm.c
+++ b/common/va_display_drm.c
@@ -23,6 +23,7 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
 #ifdef IN_LIBVA
@@ -33,6 +34,7 @@
 #include "va_display.h"
 
 static int drm_fd = -1;
+extern const char *g_drm_device_name;
 
 static VADisplay
 va_open_display_drm(void)
@@ -46,6 +48,25 @@
         NULL
     };
 
+    if (g_drm_device_name) {
+        drm_fd = open(g_drm_device_name, O_RDWR);
+        if (drm_fd < 0) {
+            printf("Failed to open the given device!\n");
+            exit(1);
+            return NULL;
+        }
+
+        va_dpy = vaGetDisplayDRM(drm_fd);
+        if (va_dpy)
+            return va_dpy;
+
+        printf("Failed to a DRM display for the given device\n");
+        close(drm_fd);
+        drm_fd = -1;
+        exit(1);
+        return NULL;
+    }
+
     for (i = 0; drm_device_paths[i]; i++) {
         drm_fd = open(drm_device_paths[i], O_RDWR);
         if (drm_fd < 0)