diff --git a/Android.mk b/Android.mk
index c212127..b8576a5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -56,7 +56,7 @@
 
 LOCAL_SRC_FILES := \
 	autolock.cpp \
-	drmresources.cpp \
+	drmdevice.cpp \
 	drmconnector.cpp \
 	drmcrtc.cpp \
 	drmdisplaycomposition.cpp \
diff --git a/drmconnector.cpp b/drmconnector.cpp
index 10b96b5..83d4161 100644
--- a/drmconnector.cpp
+++ b/drmconnector.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "hwc-drm-connector"
 
 #include "drmconnector.h"
-#include "drmresources.h"
+#include "drmdevice.h"
 
 #include <errno.h>
 #include <stdint.h>
@@ -27,7 +27,7 @@
 
 namespace android {
 
-DrmConnector::DrmConnector(DrmResources *drm, drmModeConnectorPtr c,
+DrmConnector::DrmConnector(DrmDevice *drm, drmModeConnectorPtr c,
                            DrmEncoder *current_encoder,
                            std::vector<DrmEncoder *> &possible_encoders)
     : drm_(drm),
diff --git a/drmconnector.h b/drmconnector.h
index 5601e06..99b89d5 100644
--- a/drmconnector.h
+++ b/drmconnector.h
@@ -27,11 +27,11 @@
 
 namespace android {
 
-class DrmResources;
+class DrmDevice;
 
 class DrmConnector {
  public:
-  DrmConnector(DrmResources *drm, drmModeConnectorPtr c,
+  DrmConnector(DrmDevice *drm, drmModeConnectorPtr c,
                DrmEncoder *current_encoder,
                std::vector<DrmEncoder *> &possible_encoders);
   DrmConnector(const DrmProperty &) = delete;
@@ -71,7 +71,7 @@
   uint32_t mm_height() const;
 
  private:
-  DrmResources *drm_;
+  DrmDevice *drm_;
 
   uint32_t id_;
   DrmEncoder *encoder_;
diff --git a/drmcrtc.cpp b/drmcrtc.cpp
index 4033269..a392a4d 100644
--- a/drmcrtc.cpp
+++ b/drmcrtc.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "hwc-drm-crtc"
 
 #include "drmcrtc.h"
-#include "drmresources.h"
+#include "drmdevice.h"
 
 #include <stdint.h>
 #include <xf86drmMode.h>
@@ -26,12 +26,8 @@
 
 namespace android {
 
-DrmCrtc::DrmCrtc(DrmResources *drm, drmModeCrtcPtr c, unsigned pipe)
-    : drm_(drm),
-      id_(c->crtc_id),
-      pipe_(pipe),
-      display_(-1),
-      mode_(&c->mode) {
+DrmCrtc::DrmCrtc(DrmDevice *drm, drmModeCrtcPtr c, unsigned pipe)
+    : drm_(drm), id_(c->crtc_id), pipe_(pipe), display_(-1), mode_(&c->mode) {
 }
 
 int DrmCrtc::Init() {
diff --git a/drmcrtc.h b/drmcrtc.h
index c5a5599..3e17abd 100644
--- a/drmcrtc.h
+++ b/drmcrtc.h
@@ -25,11 +25,11 @@
 
 namespace android {
 
-class DrmResources;
+class DrmDevice;
 
 class DrmCrtc {
  public:
-  DrmCrtc(DrmResources *drm, drmModeCrtcPtr c, unsigned pipe);
+  DrmCrtc(DrmDevice *drm, drmModeCrtcPtr c, unsigned pipe);
   DrmCrtc(const DrmCrtc &) = delete;
   DrmCrtc &operator=(const DrmCrtc &) = delete;
 
@@ -48,7 +48,7 @@
   const DrmProperty &out_fence_ptr_property() const;
 
  private:
-  DrmResources *drm_;
+  DrmDevice *drm_;
 
   uint32_t id_;
   unsigned pipe_;
diff --git a/drmresources.cpp b/drmdevice.cpp
similarity index 85%
rename from drmresources.cpp
rename to drmdevice.cpp
index ec6664c..1eae32b 100644
--- a/drmresources.cpp
+++ b/drmdevice.cpp
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "hwc-drm-resources"
+#define LOG_TAG "hwc-drm-device"
 
 #include "drmconnector.h"
 #include "drmcrtc.h"
 #include "drmencoder.h"
 #include "drmeventlistener.h"
 #include "drmplane.h"
-#include "drmresources.h"
+#include "drmdevice.h"
 
 #include <cinttypes>
 #include <errno.h>
@@ -35,14 +35,14 @@
 
 namespace android {
 
-DrmResources::DrmResources() : event_listener_(this) {
+DrmDevice::DrmDevice() : event_listener_(this) {
 }
 
-DrmResources::~DrmResources() {
+DrmDevice::~DrmDevice() {
   event_listener_.Exit();
 }
 
-int DrmResources::Init() {
+int DrmDevice::Init() {
   char path[PROPERTY_VALUE_MAX];
   property_get("hwc.drm.device", path, "/dev/dri/card0");
 
@@ -67,7 +67,7 @@
 
   drmModeResPtr res = drmModeGetResources(fd());
   if (!res) {
-    ALOGE("Failed to get DrmResources resources");
+    ALOGE("Failed to get DrmDevice resources");
     return -ENODEV;
   }
 
@@ -229,7 +229,7 @@
   return 0;
 }
 
-DrmConnector *DrmResources::GetConnectorForDisplay(int display) const {
+DrmConnector *DrmDevice::GetConnectorForDisplay(int display) const {
   for (auto &conn : connectors_) {
     if (conn->display() == display)
       return conn.get();
@@ -237,7 +237,7 @@
   return NULL;
 }
 
-DrmCrtc *DrmResources::GetCrtcForDisplay(int display) const {
+DrmCrtc *DrmDevice::GetCrtcForDisplay(int display) const {
   for (auto &crtc : crtcs_) {
     if (crtc->display() == display)
       return crtc.get();
@@ -245,7 +245,7 @@
   return NULL;
 }
 
-DrmPlane *DrmResources::GetPlane(uint32_t id) const {
+DrmPlane *DrmDevice::GetPlane(uint32_t id) const {
   for (auto &plane : planes_) {
     if (plane->id() == id)
       return plane.get();
@@ -253,15 +253,15 @@
   return NULL;
 }
 
-const std::vector<std::unique_ptr<DrmCrtc>> & DrmResources::crtcs() const {
+const std::vector<std::unique_ptr<DrmCrtc>> &DrmDevice::crtcs() const {
   return crtcs_;
 }
 
-uint32_t DrmResources::next_mode_id() {
+uint32_t DrmDevice::next_mode_id() {
   return ++mode_id_;
 }
 
-int DrmResources::TryEncoderForDisplay(int display, DrmEncoder *enc) {
+int DrmDevice::TryEncoderForDisplay(int display, DrmEncoder *enc) {
   /* First try to use the currently-bound crtc */
   DrmCrtc *crtc = enc->crtc();
   if (crtc && crtc->can_bind(display)) {
@@ -286,7 +286,7 @@
   return -EAGAIN;
 }
 
-int DrmResources::CreateDisplayPipe(DrmConnector *connector) {
+int DrmDevice::CreateDisplayPipe(DrmConnector *connector) {
   int display = connector->display();
   /* Try to use current setup first */
   if (connector->encoder()) {
@@ -314,8 +314,8 @@
   return -ENODEV;
 }
 
-int DrmResources::CreatePropertyBlob(void *data, size_t length,
-                                     uint32_t *blob_id) {
+int DrmDevice::CreatePropertyBlob(void *data, size_t length,
+                                  uint32_t *blob_id) {
   struct drm_mode_create_blob create_blob;
   memset(&create_blob, 0, sizeof(create_blob));
   create_blob.length = length;
@@ -330,7 +330,7 @@
   return 0;
 }
 
-int DrmResources::DestroyPropertyBlob(uint32_t blob_id) {
+int DrmDevice::DestroyPropertyBlob(uint32_t blob_id) {
   if (!blob_id)
     return 0;
 
@@ -345,12 +345,12 @@
   return 0;
 }
 
-DrmEventListener *DrmResources::event_listener() {
+DrmEventListener *DrmDevice::event_listener() {
   return &event_listener_;
 }
 
-int DrmResources::GetProperty(uint32_t obj_id, uint32_t obj_type,
-                              const char *prop_name, DrmProperty *property) {
+int DrmDevice::GetProperty(uint32_t obj_id, uint32_t obj_type,
+                           const char *prop_name, DrmProperty *property) {
   drmModeObjectPropertiesPtr props;
 
   props = drmModeObjectGetProperties(fd(), obj_id, obj_type);
@@ -373,19 +373,19 @@
   return found ? 0 : -ENOENT;
 }
 
-int DrmResources::GetPlaneProperty(const DrmPlane &plane, const char *prop_name,
-                                   DrmProperty *property) {
+int DrmDevice::GetPlaneProperty(const DrmPlane &plane, const char *prop_name,
+                                DrmProperty *property) {
   return GetProperty(plane.id(), DRM_MODE_OBJECT_PLANE, prop_name, property);
 }
 
-int DrmResources::GetCrtcProperty(const DrmCrtc &crtc, const char *prop_name,
-                                  DrmProperty *property) {
+int DrmDevice::GetCrtcProperty(const DrmCrtc &crtc, const char *prop_name,
+                               DrmProperty *property) {
   return GetProperty(crtc.id(), DRM_MODE_OBJECT_CRTC, prop_name, property);
 }
 
-int DrmResources::GetConnectorProperty(const DrmConnector &connector,
-                                       const char *prop_name,
-                                       DrmProperty *property) {
+int DrmDevice::GetConnectorProperty(const DrmConnector &connector,
+                                    const char *prop_name,
+                                    DrmProperty *property) {
   return GetProperty(connector.id(), DRM_MODE_OBJECT_CONNECTOR, prop_name,
                      property);
 }
diff --git a/drmresources.h b/drmdevice.h
similarity index 97%
rename from drmresources.h
rename to drmdevice.h
index 4cca48c..5a82f90 100644
--- a/drmresources.h
+++ b/drmdevice.h
@@ -27,10 +27,10 @@
 
 namespace android {
 
-class DrmResources {
+class DrmDevice {
  public:
-  DrmResources();
-  ~DrmResources();
+  DrmDevice();
+  ~DrmDevice();
 
   int Init();
 
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index aaf78cc..65d7cf1 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -16,11 +16,11 @@
 
 #define LOG_TAG "hwc-drm-display-composition"
 
+#include "drmdevice.h"
 #include "drmdisplaycomposition.h"
 #include "drmdisplaycompositor.h"
 #include "drmcrtc.h"
 #include "drmplane.h"
-#include "drmresources.h"
 #include "platform.h"
 
 #include <stdlib.h>
@@ -37,7 +37,7 @@
 DrmDisplayComposition::~DrmDisplayComposition() {
 }
 
-int DrmDisplayComposition::Init(DrmResources *drm, DrmCrtc *crtc,
+int DrmDisplayComposition::Init(DrmDevice *drm, DrmCrtc *crtc,
                                 Importer *importer, Planner *planner,
                                 uint64_t frame_no) {
   drm_ = drm;
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index b4c5892..078bf9b 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -111,8 +111,8 @@
   DrmDisplayComposition(const DrmDisplayComposition &) = delete;
   ~DrmDisplayComposition();
 
-  int Init(DrmResources *drm, DrmCrtc *crtc, Importer *importer,
-           Planner *planner, uint64_t frame_no);
+  int Init(DrmDevice *drm, DrmCrtc *crtc, Importer *importer, Planner *planner,
+           uint64_t frame_no);
 
   int SetLayers(DrmHwcLayer *layers, size_t num_layers, bool geometry_changed);
   int AddPlaneComposition(DrmCompositionPlane plane);
@@ -176,7 +176,7 @@
  private:
   bool validate_composition_type(DrmCompositionType desired);
 
-  DrmResources *drm_ = NULL;
+  DrmDevice *drm_ = NULL;
   DrmCrtc *crtc_ = NULL;
   Importer *importer_ = NULL;
   Planner *planner_ = NULL;
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index e7e0694..4291ad1 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -33,8 +33,8 @@
 
 #include "autolock.h"
 #include "drmcrtc.h"
+#include "drmdevice.h"
 #include "drmplane.h"
-#include "drmresources.h"
 
 namespace android {
 
@@ -74,7 +74,7 @@
   pthread_mutex_destroy(&lock_);
 }
 
-int DrmDisplayCompositor::Init(DrmResources *drm, int display) {
+int DrmDisplayCompositor::Init(DrmDevice *drm, int display) {
   drm_ = drm;
   display_ = display;
 
diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h
index 0d85949..1866d43 100644
--- a/drmdisplaycompositor.h
+++ b/drmdisplaycompositor.h
@@ -40,7 +40,7 @@
   DrmDisplayCompositor();
   ~DrmDisplayCompositor();
 
-  int Init(DrmResources *drm, int display);
+  int Init(DrmDevice *drm, int display);
 
   std::unique_ptr<DrmDisplayComposition> CreateComposition() const;
   int ApplyComposition(std::unique_ptr<DrmDisplayComposition> composition);
@@ -78,7 +78,7 @@
 
   std::tuple<int, uint32_t> CreateModeBlob(const DrmMode &mode);
 
-  DrmResources *drm_;
+  DrmDevice *drm_;
   int display_;
 
   std::unique_ptr<DrmDisplayComposition> active_composition_;
diff --git a/drmencoder.cpp b/drmencoder.cpp
index 3d762f3..f61c8fd 100644
--- a/drmencoder.cpp
+++ b/drmencoder.cpp
@@ -15,8 +15,8 @@
  */
 
 #include "drmcrtc.h"
+#include "drmdevice.h"
 #include "drmencoder.h"
-#include "drmresources.h"
 
 #include <stdint.h>
 #include <xf86drmMode.h>
diff --git a/drmeventlistener.cpp b/drmeventlistener.cpp
index 9cdff81..aca02a9 100644
--- a/drmeventlistener.cpp
+++ b/drmeventlistener.cpp
@@ -16,8 +16,8 @@
 
 #define LOG_TAG "hwc-drm-event-listener"
 
+#include "drmdevice.h"
 #include "drmeventlistener.h"
-#include "drmresources.h"
 
 #include <assert.h>
 #include <errno.h>
@@ -31,9 +31,8 @@
 
 namespace android {
 
-DrmEventListener::DrmEventListener(DrmResources *drm)
-    : Worker("drm-event-listener", HAL_PRIORITY_URGENT_DISPLAY),
-      drm_(drm) {
+DrmEventListener::DrmEventListener(DrmDevice *drm)
+    : Worker("drm-event-listener", HAL_PRIORITY_URGENT_DISPLAY), drm_(drm) {
 }
 
 int DrmEventListener::Init() {
diff --git a/drmeventlistener.h b/drmeventlistener.h
index 61eefe8..37adbdd 100644
--- a/drmeventlistener.h
+++ b/drmeventlistener.h
@@ -22,7 +22,7 @@
 
 namespace android {
 
-class DrmResources;
+class DrmDevice;
 
 class DrmEventHandler {
  public:
@@ -36,7 +36,7 @@
 
 class DrmEventListener : public Worker {
  public:
-  DrmEventListener(DrmResources *drm);
+  DrmEventListener(DrmDevice *drm);
   virtual ~DrmEventListener() {
   }
 
@@ -57,7 +57,7 @@
   UniqueFd uevent_fd_;
   int max_fd_ = -1;
 
-  DrmResources *drm_;
+  DrmDevice *drm_;
   DrmEventHandler *hotplug_handler_ = NULL;
 };
 }
diff --git a/drmhwctwo.cpp b/drmhwctwo.cpp
index 3d0217c..2dcf088 100644
--- a/drmhwctwo.cpp
+++ b/drmhwctwo.cpp
@@ -150,7 +150,7 @@
   return HWC2::Error::None;
 }
 
-DrmHwcTwo::HwcDisplay::HwcDisplay(DrmResources *drm,
+DrmHwcTwo::HwcDisplay::HwcDisplay(DrmDevice *drm,
                                   std::shared_ptr<Importer> importer,
                                   hwc2_display_t handle, HWC2::DisplayType type)
     : drm_(drm), importer_(importer), handle_(handle), type_(type) {
diff --git a/drmhwctwo.h b/drmhwctwo.h
index 82a9768..33c688c 100644
--- a/drmhwctwo.h
+++ b/drmhwctwo.h
@@ -16,7 +16,7 @@
 
 #include "drmdisplaycompositor.h"
 #include "drmhwcomposer.h"
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 #include "vsyncworker.h"
 
@@ -135,7 +135,7 @@
 
   class HwcDisplay {
    public:
-    HwcDisplay(DrmResources *drm, std::shared_ptr<Importer> importer,
+    HwcDisplay(DrmDevice *drm, std::shared_ptr<Importer> importer,
                hwc2_display_t handle, HWC2::DisplayType type);
     HwcDisplay(const HwcDisplay &) = delete;
     HWC2::Error Init(std::vector<DrmPlane *> *planes);
@@ -188,7 +188,7 @@
     HWC2::Error CreateComposition(bool test);
     void AddFenceToRetireFence(int fd);
 
-    DrmResources *drm_;
+    DrmDevice *drm_;
     DrmDisplayCompositor compositor_;
     std::shared_ptr<Importer> importer_;
     std::unique_ptr<Planner> planner_;
@@ -261,7 +261,7 @@
   HWC2::Error RegisterCallback(int32_t descriptor, hwc2_callback_data_t data,
                                hwc2_function_pointer_t function);
 
-  DrmResources drm_;
+  DrmDevice drm_;
   std::shared_ptr<Importer> importer_;  // Shared with HwcDisplay
   std::map<hwc2_display_t, HwcDisplay> displays_;
   std::map<HWC2::Callback, HwcCallback> callbacks_;
diff --git a/drmmode.cpp b/drmmode.cpp
index 081efcd..ee47a8e 100644
--- a/drmmode.cpp
+++ b/drmmode.cpp
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
+#include "drmdevice.h"
 #include "drmmode.h"
-#include "drmresources.h"
 
 #include <stdint.h>
 #include <string>
diff --git a/drmplane.cpp b/drmplane.cpp
index 4449256..051d591 100644
--- a/drmplane.cpp
+++ b/drmplane.cpp
@@ -16,8 +16,8 @@
 
 #define LOG_TAG "hwc-drm-plane"
 
+#include "drmdevice.h"
 #include "drmplane.h"
-#include "drmresources.h"
 
 #include <cinttypes>
 #include <errno.h>
@@ -28,7 +28,7 @@
 
 namespace android {
 
-DrmPlane::DrmPlane(DrmResources *drm, drmModePlanePtr p)
+DrmPlane::DrmPlane(DrmDevice *drm, drmModePlanePtr p)
     : drm_(drm), id_(p->plane_id), possible_crtc_mask_(p->possible_crtcs) {
 }
 
diff --git a/drmplane.h b/drmplane.h
index 5b73b08..a293afe 100644
--- a/drmplane.h
+++ b/drmplane.h
@@ -26,11 +26,11 @@
 
 namespace android {
 
-class DrmResources;
+class DrmDevice;
 
 class DrmPlane {
  public:
-  DrmPlane(DrmResources *drm, drmModePlanePtr p);
+  DrmPlane(DrmDevice *drm, drmModePlanePtr p);
   DrmPlane(const DrmPlane &) = delete;
   DrmPlane &operator=(const DrmPlane &) = delete;
 
@@ -57,7 +57,7 @@
   const DrmProperty &in_fence_fd_property() const;
 
  private:
-  DrmResources *drm_;
+  DrmDevice *drm_;
   uint32_t id_;
 
   uint32_t possible_crtc_mask_;
diff --git a/drmproperty.cpp b/drmproperty.cpp
index 6f65dac..d7a06e3 100644
--- a/drmproperty.cpp
+++ b/drmproperty.cpp
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
+#include "drmdevice.h"
 #include "drmproperty.h"
-#include "drmresources.h"
 
 #include <errno.h>
 #include <stdint.h>
diff --git a/platform.cpp b/platform.cpp
index b6c39d0..39761fa 100644
--- a/platform.cpp
+++ b/platform.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "hwc-platform"
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 
 #include <log/log.h>
diff --git a/platform.h b/platform.h
index 068499e..32d0011 100644
--- a/platform.h
+++ b/platform.h
@@ -28,7 +28,7 @@
 
 namespace android {
 
-class DrmResources;
+class DrmDevice;
 
 class Importer {
  public:
@@ -36,7 +36,7 @@
   }
 
   // Creates a platform-specific importer instance
-  static Importer *CreateInstance(DrmResources *drm);
+  static Importer *CreateInstance(DrmDevice *drm);
 
   // Imports the buffer referred to by handle into bo.
   //
@@ -88,7 +88,7 @@
   };
 
   // Creates a planner instance with platform-specific planning stages
-  static std::unique_ptr<Planner> CreateInstance(DrmResources *drm);
+  static std::unique_ptr<Planner> CreateInstance(DrmDevice *drm);
 
   // Takes a stack of layers and provisions hardware planes for them. If the
   // entire stack can't fit in hardware, FIXME
diff --git a/platformdrmgeneric.cpp b/platformdrmgeneric.cpp
index 7c4758d..a1198bf 100644
--- a/platformdrmgeneric.cpp
+++ b/platformdrmgeneric.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "hwc-platform-drm-generic"
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"
 
@@ -32,7 +32,7 @@
 
 #ifdef USE_DRM_GENERIC_IMPORTER
 // static
-Importer *Importer::CreateInstance(DrmResources *drm) {
+Importer *Importer::CreateInstance(DrmDevice *drm) {
   DrmGenericImporter *importer = new DrmGenericImporter(drm);
   if (!importer)
     return NULL;
@@ -47,7 +47,7 @@
 }
 #endif
 
-DrmGenericImporter::DrmGenericImporter(DrmResources *drm) : drm_(drm) {
+DrmGenericImporter::DrmGenericImporter(DrmDevice *drm) : drm_(drm) {
 }
 
 DrmGenericImporter::~DrmGenericImporter() {
@@ -141,7 +141,7 @@
 }
 
 #ifdef USE_DRM_GENERIC_IMPORTER
-std::unique_ptr<Planner> Planner::CreateInstance(DrmResources *) {
+std::unique_ptr<Planner> Planner::CreateInstance(DrmDevice *) {
   std::unique_ptr<Planner> planner(new Planner);
   planner->AddStage<PlanStageGreedy>();
   return planner;
diff --git a/platformdrmgeneric.h b/platformdrmgeneric.h
index 0339e1e..8701329 100644
--- a/platformdrmgeneric.h
+++ b/platformdrmgeneric.h
@@ -17,7 +17,7 @@
 #ifndef ANDROID_PLATFORM_DRM_GENERIC_H_
 #define ANDROID_PLATFORM_DRM_GENERIC_H_
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 
 #include <hardware/gralloc.h>
@@ -26,7 +26,7 @@
 
 class DrmGenericImporter : public Importer {
  public:
-  DrmGenericImporter(DrmResources *drm);
+  DrmGenericImporter(DrmDevice *drm);
   ~DrmGenericImporter() override;
 
   int Init();
@@ -36,8 +36,7 @@
 
   uint32_t ConvertHalFormatToDrm(uint32_t hal_format);
  private:
-
-  DrmResources *drm_;
+  DrmDevice *drm_;
 
   const gralloc_module_t *gralloc_;
 };
diff --git a/platformhisi.cpp b/platformhisi.cpp
index d4428d0..3ff355f 100644
--- a/platformhisi.cpp
+++ b/platformhisi.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "hwc-platform-hisi"
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 #include "platformhisi.h"
 
@@ -35,7 +35,7 @@
 
 namespace android {
 
-Importer *Importer::CreateInstance(DrmResources *drm) {
+Importer *Importer::CreateInstance(DrmDevice *drm) {
   HisiImporter *importer = new HisiImporter(drm);
   if (!importer)
     return NULL;
@@ -49,7 +49,8 @@
   return importer;
 }
 
-HisiImporter::HisiImporter(DrmResources *drm) : DrmGenericImporter(drm), drm_(drm) {
+HisiImporter::HisiImporter(DrmDevice *drm)
+    : DrmGenericImporter(drm), drm_(drm) {
 }
 
 HisiImporter::~HisiImporter() {
@@ -132,7 +133,7 @@
   return ret;
 }
 
-std::unique_ptr<Planner> Planner::CreateInstance(DrmResources *) {
+std::unique_ptr<Planner> Planner::CreateInstance(DrmDevice *) {
   std::unique_ptr<Planner> planner(new Planner);
   planner->AddStage<PlanStageGreedy>();
   return planner;
diff --git a/platformhisi.h b/platformhisi.h
index a098692..4e6cc57 100644
--- a/platformhisi.h
+++ b/platformhisi.h
@@ -17,7 +17,7 @@
 #ifndef ANDROID_PLATFORM_HISI_H_
 #define ANDROID_PLATFORM_HISI_H_
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"
 
@@ -29,7 +29,7 @@
 
 class HisiImporter : public DrmGenericImporter {
  public:
-  HisiImporter(DrmResources *drm);
+  HisiImporter(DrmDevice *drm);
   ~HisiImporter() override;
 
   int Init();
@@ -37,8 +37,7 @@
   int ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) override;
 
  private:
-
-  DrmResources *drm_;
+  DrmDevice *drm_;
 
   const gralloc_module_t *gralloc_;
 };
diff --git a/vsyncworker.cpp b/vsyncworker.cpp
index 6ac016d..e8a9332 100644
--- a/vsyncworker.cpp
+++ b/vsyncworker.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "hwc-vsync-worker"
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "vsyncworker.h"
 #include "worker.h"
 
@@ -42,7 +42,7 @@
 VSyncWorker::~VSyncWorker() {
 }
 
-int VSyncWorker::Init(DrmResources *drm, int display) {
+int VSyncWorker::Init(DrmDevice *drm, int display) {
   drm_ = drm;
   display_ = display;
 
diff --git a/vsyncworker.h b/vsyncworker.h
index 787152e..3d3a805 100644
--- a/vsyncworker.h
+++ b/vsyncworker.h
@@ -17,7 +17,7 @@
 #ifndef ANDROID_EVENT_WORKER_H_
 #define ANDROID_EVENT_WORKER_H_
 
-#include "drmresources.h"
+#include "drmdevice.h"
 #include "worker.h"
 
 #include <map>
@@ -40,7 +40,7 @@
   VSyncWorker();
   ~VSyncWorker() override;
 
-  int Init(DrmResources *drm, int display);
+  int Init(DrmDevice *drm, int display);
   void RegisterCallback(std::shared_ptr<VsyncCallback> callback);
 
   void VSyncControl(bool enabled);
@@ -52,7 +52,7 @@
   int64_t GetPhasedVSync(int64_t frame_ns, int64_t current);
   int SyntheticWaitVBlank(int64_t *timestamp);
 
-  DrmResources *drm_;
+  DrmDevice *drm_;
 
   // shared_ptr since we need to use this outside of the thread lock (to
   // actually call the hook) and we don't want the memory freed until we're
