diff --git a/va/Android.mk b/va/Android.mk
index eb9967d..5eb8e6d 100644
--- a/va/Android.mk
+++ b/va/Android.mk
@@ -17,6 +17,7 @@
 LOCAL_C_INCLUDES += \
    $(TOPDIR)kernel/include \
    $(TARGET_OUT_HEADERS)/libva \
+   $(LOCAL_PATH)/x11 \
    $(TOPDIR)kernel/include/drm
 
 LOCAL_COPY_HEADERS_TO := libva/va
diff --git a/va/android/va_android.c b/va/android/va_android.c
index 5ccf998..39b1876 100644
--- a/va/android/va_android.c
+++ b/va/android/va_android.c
@@ -26,7 +26,7 @@
 #include "va.h"
 #include "va_backend.h"
 #include "va_android.h"
-#include "x11/va_dricommon.h" /* needs some helper functions from this file */
+#include "va_dricommon.h" /* needs some helper functions from this file */
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -37,6 +37,10 @@
 #include <fcntl.h>
 #include <dlfcn.h>
 #include <errno.h>
+#ifndef ANDROID
+#include <libudev.h>
+#include "drm_test.h"
+#endif
 
 #define CHECK_SYMBOL(func) { if (!func) printf("func %s not found\n", #func); return VA_STATUS_ERROR_UNKNOWN; }
 #define DEVICE_NAME "/dev/dri/card0"
@@ -110,7 +114,7 @@
     free(pDisplayContext);
 }
 
-
+#ifdef ANDROID
 static VAStatus va_DisplayContextGetDriverName (
     VADisplayContextP pDisplayContext,
     char **driver_name
@@ -154,7 +158,51 @@
     
     return VA_STATUS_SUCCESS;
 }
+#else
+static VAStatus va_DisplayContextGetDriverName (
+    VADisplayContextP pDisplayContext,
+    char **driver_name
+)
+{
+    VADriverContextP ctx = pDisplayContext->pDriverContext;
+    struct dri_state *dri_state = (struct dri_state *)ctx->dri_state;
+    char *driver_name_env;
 
+    struct {
+        unsigned int vendor_id;
+        unsigned int device_id;
+        char driver_name[64];
+    } devices[] = {
+        { 0x8086, 0x4100, "pvr" },
+    };
+
+    memset(dri_state, 0, sizeof(*dri_state));
+    dri_state->fd = drm_open_any_master();
+    if (dri_state->fd < 0) {
+        fprintf(stderr, "open DRM device by udev failed, try /dev/dri/card0\n");
+        dri_state->fd = open("/dev/dri/card0", O_RDWR);
+    }
+
+    if (dri_state->fd < 0) {
+        fprintf(stderr,"can't open DRM devices\n");
+        return VA_STATUS_ERROR_UNKNOWN;
+    }
+
+    if ((driver_name_env = getenv("LIBVA_DRIVER_NAME")) != NULL
+        && geteuid() == getuid())
+    {
+        /* don't allow setuid apps to use LIBVA_DRIVER_NAME */
+        *driver_name = strdup(driver_name_env);
+        return VA_STATUS_SUCCESS;
+    } else /* TBD: other vendor driver names */
+        *driver_name = strdup(devices[0].driver_name);
+
+
+    dri_state->driConnectedFlag = VA_DUMMY;
+
+    return VA_STATUS_SUCCESS;
+}
+#endif
 
 VADisplay vaGetDisplay (
     void *native_dpy /* implementation specific */
@@ -245,7 +293,6 @@
 
   CHECK_DISPLAY(dpy);
   ctx = CTX(dpy);
-
   return ctx->vtable.vaPutSurface( ctx, surface, (void *)draw, srcx, srcy, srcw, srch, 
                                    destx, desty, destw, desth,
                                    cliprects, number_cliprects, flags );
diff --git a/va/va_android.h b/va/va_android.h
index 3e050b8..43b2730 100644
--- a/va/va_android.h
+++ b/va/va_android.h
@@ -5,7 +5,6 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-
 /*
  * Returns a suitable VADisplay for VA API
  */
@@ -16,7 +15,7 @@
 #if ANDROID    
 //#include <ui/Surface.h>
 //class Surface;
-    
+
 /*
  * Output rendering
  * Following is the rendering interface for X windows, 
diff --git a/va/va_backend.h b/va/va_backend.h
index 54db430..f457cc4 100644
--- a/va/va_backend.h
+++ b/va/va_backend.h
@@ -185,7 +185,11 @@
 	VAStatus (*vaPutSurface) (
     		VADriverContextP ctx,
 		VASurfaceID surface,
-		void * draw, /* Drawable of window system */
+#ifdef ANDROID
+		Surface* draw, /* Drawable of window system */
+#else
+		Drawable draw,
+#endif
 		short srcx,
 		short srcy,
 		unsigned short srcw,
@@ -199,25 +203,6 @@
 		unsigned int flags /* de-interlacing flags */
 	);
 
-	VAStatus (*vaPutSurfaceBuf) (
-		VADriverContextP ctx,
-                VASurfaceID surface,
-                Drawable draw, /* X Drawable */
-                unsigned char* data,
-                int* data_len,
-                short srcx,
-                short srcy,
-                unsigned short srcw,
-                unsigned short srch,
-                short destx,
-                short desty,
-                unsigned short destw,
-                unsigned short desth,
-		VARectangle *cliprects, /* client supplied clip list */
-		unsigned int number_cliprects, /* number of clip rects in the clip list */
-                unsigned int flags /* de-interlacing flags */
-	);
-
 	VAStatus (*vaQueryImageFormats) (
 		VADriverContextP ctx,
 		VAImageFormat *format_list,        /* out */
