sdm: hw: Redesign the hw interface and implementation

The new structure eliminates the unnecessary multiple inheritance
and a lot of code bloat.

The structure now is:
HWInterface <>--- HWDevice <>--- HW{Primary, HDMI, Virtual}

Change-Id: Ieb4c97da039640f4499c788b69d5bda3c6146abe
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 118c036..2035813 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -118,8 +118,6 @@
     display_attributes_ = NULL;
   }
 
-  hw_intf_->Close();
-
   return error;
 }
 
@@ -140,8 +138,6 @@
     display_attributes_ = NULL;
   }
 
-  hw_intf_->Close();
-
   return kErrorNone;
 }
 
diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp
index dcabb7b..cdf7aca 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -26,8 +26,9 @@
 #include <utils/debug.h>
 
 #include "display_hdmi.h"
-#include "hw_hdmi_interface.h"
+#include "hw_interface.h"
 #include "hw_info_interface.h"
+#include "fb/hw_hdmi.h"
 
 #define __CLASS__ "DisplayHDMI"
 
@@ -43,21 +44,15 @@
 DisplayError DisplayHDMI::Init() {
   SCOPE_LOCK(locker_);
 
-  DisplayError error = HWHDMIInterface::Create(&hw_hdmi_intf_, hw_info_intf_,
-                                               DisplayBase::buffer_sync_handler_);
-  if (error != kErrorNone) {
-    return error;
-  }
-
-  DisplayBase::hw_intf_ = hw_hdmi_intf_;
-  error = hw_hdmi_intf_->Open(NULL);
+  DisplayError error = HWHDMI::Create(&hw_intf_, hw_info_intf_,
+                                      DisplayBase::buffer_sync_handler_);
   if (error != kErrorNone) {
     return error;
   }
 
   error = DisplayBase::Init();
   if (error != kErrorNone) {
-    HWHDMIInterface::Destroy(hw_hdmi_intf_);
+    HWHDMI::Destroy(hw_intf_);
   }
 
   GetScanSupport();
@@ -70,10 +65,7 @@
   SCOPE_LOCK(locker_);
 
   DisplayError error = DisplayBase::Deinit();
-  if (error != kErrorNone) {
-    return error;
-  }
-  HWHDMIInterface::Destroy(hw_hdmi_intf_);
+  HWHDMI::Destroy(hw_intf_);
 
   return error;
 }
@@ -178,7 +170,7 @@
 
 DisplayError DisplayHDMI::OnMinHdcpEncryptionLevelChange() {
   SCOPE_LOCK(locker_);
-  return hw_hdmi_intf_->OnMinHdcpEncryptionLevelChange();
+  return hw_intf_->OnMinHdcpEncryptionLevelChange();
 }
 
 int DisplayHDMI::GetBestConfig() {
@@ -227,14 +219,14 @@
   uint32_t video_format = -1;
   uint32_t max_cea_format = -1;
   HWScanInfo scan_info = HWScanInfo();
-  hw_hdmi_intf_->GetHWScanInfo(&scan_info);
+  hw_intf_->GetHWScanInfo(&scan_info);
 
-  error = hw_hdmi_intf_->GetVideoFormat(active_mode_index_, &video_format);
+  error = hw_intf_->GetVideoFormat(active_mode_index_, &video_format);
   if (error != kErrorNone) {
     return;
   }
 
-  error = hw_hdmi_intf_->GetMaxCEAFormat(&max_cea_format);
+  error = hw_intf_->GetMaxCEAFormat(&max_cea_format);
   if (error != kErrorNone) {
     return;
   }
diff --git a/sdm/libs/core/display_hdmi.h b/sdm/libs/core/display_hdmi.h
index 8e96828..d3ff97b 100644
--- a/sdm/libs/core/display_hdmi.h
+++ b/sdm/libs/core/display_hdmi.h
@@ -68,7 +68,6 @@
   virtual void GetScanSupport();
 
   Locker locker_;
-  HWHDMIInterface *hw_hdmi_intf_;
   HWScanSupport scan_support_;
 };
 
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index 365b601..d1ce1ff 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -26,8 +26,9 @@
 #include <utils/debug.h>
 
 #include "display_primary.h"
-#include "hw_primary_interface.h"
+#include "hw_interface.h"
 #include "hw_info_interface.h"
+#include "fb/hw_primary.h"
 
 #define __CLASS__ "DisplayPrimary"
 
@@ -43,31 +44,26 @@
 DisplayError DisplayPrimary::Init() {
   SCOPE_LOCK(locker_);
 
-  DisplayError error = HWPrimaryInterface::Create(&hw_primary_intf_, hw_info_intf_,
-                                                  DisplayBase::buffer_sync_handler_);
-  if (error != kErrorNone) {
-    return error;
-  }
-  DisplayBase::hw_intf_ = hw_primary_intf_;
+  DisplayError error = HWPrimary::Create(&hw_intf_, hw_info_intf_,
+                                         DisplayBase::buffer_sync_handler_, this);
 
-  error = hw_primary_intf_->Open(this);
   if (error != kErrorNone) {
     return error;
   }
 
   error = DisplayBase::Init();
   if (error != kErrorNone) {
-    HWPrimaryInterface::Destroy(hw_primary_intf_);
+    HWPrimary::Destroy(hw_intf_);
     return error;
   }
 
   // Idle fallback feature is supported only for video mode panel.
   if (hw_panel_info_.mode == kModeVideo) {
-    hw_primary_intf_->SetIdleTimeoutMs(Debug::GetIdleTimeoutMs());
+    hw_intf_->SetIdleTimeoutMs(Debug::GetIdleTimeoutMs());
   }
 
   if (hw_panel_info_.mode == kModeCommand && Debug::IsVideoModeEnabled()) {
-    error = hw_primary_intf_->SetDisplayMode(kModeVideo);
+    error = hw_intf_->SetDisplayMode(kModeVideo);
     if (error != kErrorNone) {
       DLOGW("Retaining current display mode. Current = %d, Requested = %d", hw_panel_info_.mode,
             kModeVideo);
@@ -81,10 +77,7 @@
   SCOPE_LOCK(locker_);
 
   DisplayError error = DisplayBase::Deinit();
-  if (error != kErrorNone) {
-    return error;
-  }
-  HWPrimaryInterface::Destroy(hw_primary_intf_);
+  HWPrimary::Destroy(hw_intf_);
 
   return error;
 }
@@ -105,9 +98,9 @@
     return error;
   }
 
-  hw_primary_intf_->GetHWPanelInfo(&panel_info);
+  hw_intf_->GetHWPanelInfo(&panel_info);
 
-  hw_primary_intf_->GetDisplayAttributes(&display_attributes, active_mode_index_);
+  hw_intf_->GetDisplayAttributes(&display_attributes, active_mode_index_);
 
   if (panel_info != hw_panel_info_ ||
       display_attributes != display_attributes_[active_mode_index_]) {
@@ -179,7 +172,7 @@
   SCOPE_LOCK(locker_);
   DisplayError error = kErrorNone;
   if (vsync_enable_ != enable) {
-    error = hw_primary_intf_->SetVSyncState(enable);
+    error = hw_intf_->SetVSyncState(enable);
     if (error == kErrorNone) {
       vsync_enable_ = enable;
     }
@@ -192,7 +185,7 @@
   SCOPE_LOCK(locker_);
   // Idle fallback feature is supported only for video mode panel.
   if (hw_panel_info_.mode == kModeVideo) {
-    hw_primary_intf_->SetIdleTimeoutMs(timeout_ms);
+    hw_intf_->SetIdleTimeoutMs(timeout_ms);
   }
 }
 
@@ -229,7 +222,7 @@
     return kErrorNone;
   }
 
-  error = hw_primary_intf_->SetDisplayMode(hw_display_mode);
+  error = hw_intf_->SetDisplayMode(hw_display_mode);
   if (error != kErrorNone) {
     DLOGW("Retaining current display mode. Current = %d, Requested = %d", hw_panel_info_.mode,
           hw_display_mode);
@@ -240,7 +233,7 @@
 }
 DisplayError DisplayPrimary::SetPanelBrightness(int level) {
   SCOPE_LOCK(locker_);
-  return hw_primary_intf_->SetPanelBrightness(level);
+  return hw_intf_->SetPanelBrightness(level);
 }
 
 DisplayError DisplayPrimary::IsScalingValid(const LayerRect &crop, const LayerRect &dst,
@@ -263,7 +256,7 @@
     refresh_rate = hw_panel_info_.min_fps;
   }
 
-  return hw_primary_intf_->SetRefreshRate(refresh_rate);
+  return hw_intf_->SetRefreshRate(refresh_rate);
 }
 
 void DisplayPrimary::AppendDump(char *buffer, uint32_t length) {
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index 64a47af..9f7f5b5 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -70,7 +70,6 @@
 
  private:
   Locker locker_;
-  HWPrimaryInterface *hw_primary_intf_;
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
index 61bf74e..56d2f93 100644
--- a/sdm/libs/core/display_virtual.cpp
+++ b/sdm/libs/core/display_virtual.cpp
@@ -26,8 +26,9 @@
 #include <utils/debug.h>
 
 #include "display_virtual.h"
-#include "hw_virtual_interface.h"
+#include "hw_interface.h"
 #include "hw_info_interface.h"
+#include "fb/hw_virtual.h"
 
 #define __CLASS__ "DisplayVirtual"
 
@@ -43,21 +44,15 @@
 DisplayError DisplayVirtual::Init() {
   SCOPE_LOCK(locker_);
 
-  DisplayError error = HWVirtualInterface::Create(&hw_virtual_intf_, hw_info_intf_,
-                                                  DisplayBase::buffer_sync_handler_);
-  if (error != kErrorNone) {
-    return error;
-  }
-
-  DisplayBase::hw_intf_ = hw_virtual_intf_;
-  error = hw_virtual_intf_->Open(NULL);
+  DisplayError error = HWVirtual::Create(&hw_intf_, hw_info_intf_,
+                                         DisplayBase::buffer_sync_handler_);
   if (error != kErrorNone) {
     return error;
   }
 
   error = DisplayBase::Init();
   if (error != kErrorNone) {
-    HWVirtualInterface::Destroy(hw_virtual_intf_);
+    HWVirtual::Destroy(hw_intf_);
   }
 
   return error;
@@ -67,10 +62,7 @@
   SCOPE_LOCK(locker_);
 
   DisplayError error = DisplayBase::Deinit();
-  if (error != kErrorNone) {
-    return error;
-  }
-  HWVirtualInterface::Destroy(hw_virtual_intf_);
+  HWVirtual::Destroy(hw_intf_);
 
   return error;
 }
diff --git a/sdm/libs/core/display_virtual.h b/sdm/libs/core/display_virtual.h
index f7c3160..45198bc 100644
--- a/sdm/libs/core/display_virtual.h
+++ b/sdm/libs/core/display_virtual.h
@@ -64,7 +64,6 @@
 
  private:
   Locker locker_;
-  HWVirtualInterface *hw_virtual_intf_;
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 2304720..f9d05eb 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -45,6 +45,7 @@
 #include <utils/sys.h>
 
 #include "hw_device.h"
+#include "hw_info_interface.h"
 
 #define __CLASS__ "HWDevice"
 
@@ -55,8 +56,11 @@
     buffer_sync_handler_(buffer_sync_handler), synchronous_commit_(false) {
 }
 
-DisplayError HWDevice::Init() {
+DisplayError HWDevice::Init(HWEventHandler *eventhandler) {
   DisplayError error = kErrorNone;
+  char device_name[64] = {0};
+
+  event_handler_ = eventhandler;
 
   // Read the fb node index
   fb_node_index_ = GetFBNodeIndex(device_type_);
@@ -71,19 +75,7 @@
   hw_resource_ = HWResourceInfo();
   hw_info_intf_->GetHWResourceInfo(&hw_resource_);
 
-  return error;
-}
-
-DisplayError HWDevice::Open(HWEventHandler *eventhandler) {
-  DisplayError error = kErrorNone;
-
-  char device_name[64] = {0};
-
-  // Store EventHandlers for two Physical displays, i.e., Primary and HDMI
-  // TODO(user): Need to revisit for HDMI as Primary usecase
-  event_handler_ = eventhandler;
   snprintf(device_name, sizeof(device_name), "%s%d", "/dev/graphics/fb", fb_node_index_);
-
   device_fd_ = Sys::open_(device_name, O_RDWR);
   if (device_fd_ < 0) {
     DLOGE("open %s failed err = %d errstr = %s", device_name, errno,  strerror(errno));
@@ -93,9 +85,10 @@
   return error;
 }
 
-DisplayError HWDevice::Close() {
-  if (device_fd_ > 0) {
+DisplayError HWDevice::Deinit() {
+  if (device_fd_ >= 0) {
     Sys::close_(device_fd_);
+    device_fd_ = -1;
   }
 
   return kErrorNone;
@@ -981,5 +974,48 @@
   return kErrorNone;
 }
 
+DisplayError HWDevice::GetPPFeaturesVersion(PPFeatureVersion *vers) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetPPFeatures(PPFeaturesConfig *feature_list) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetVSyncState(bool enable) {
+  return kErrorNotSupported;
+}
+
+void HWDevice::SetIdleTimeoutMs(uint32_t timeout_ms) {
+}
+
+DisplayError HWDevice::SetDisplayMode(const HWDisplayMode hw_display_mode) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetRefreshRate(uint32_t refresh_rate) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetPanelBrightness(int level) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetHWScanInfo(HWScanInfo *scan_info) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetVideoFormat(uint32_t config_index, uint32_t *video_format) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetMaxCEAFormat(uint32_t *max_cea_format) {
+  return kErrorNotSupported;
+}
+
+DisplayError HWDevice::OnMinHdcpEncryptionLevelChange() {
+  return kErrorNotSupported;
+}
+
 }  // namespace sdm
 
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 74cb626..bc2d0f0 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -31,34 +31,49 @@
 #include <pthread.h>
 
 #include "hw_interface.h"
-#include "hw_info_interface.h"
 
 #define IOCTL_LOGE(ioctl, type) DLOGE("ioctl %s, device = %d errno = %d, desc = %s", #ioctl, \
                                       type, errno, strerror(errno))
 
 namespace sdm {
+class HWInfoInterface;
 
-class HWDevice {
+class HWDevice : public HWInterface {
  protected:
   explicit HWDevice(BufferSyncHandler *buffer_sync_handler);
-  DisplayError Init();
-  DisplayError Open(HWEventHandler *eventhandler);
-  DisplayError Close();
-  DisplayError GetNumDisplayAttributes(uint32_t *count);
-  DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
-                                    uint32_t index);
-  DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
-  DisplayError SetDisplayAttributes(uint32_t index);
-  DisplayError GetConfigIndex(uint32_t mode, uint32_t *index);
-  DisplayError PowerOn();
-  DisplayError PowerOff();
-  DisplayError Doze();
-  DisplayError DozeSuspend();
-  DisplayError Standby();
-  DisplayError Validate(HWLayers *hw_layers);
-  DisplayError Commit(HWLayers *hw_layers);
-  DisplayError Flush();
-  DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
+  virtual ~HWDevice() {}
+
+  // From HWInterface
+  virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
+  virtual DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
+                                            uint32_t index);
+  virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
+  virtual DisplayError SetDisplayAttributes(uint32_t index);
+  virtual DisplayError GetConfigIndex(uint32_t mode, uint32_t *index);
+  virtual DisplayError PowerOn();
+  virtual DisplayError PowerOff();
+  virtual DisplayError Doze();
+  virtual DisplayError DozeSuspend();
+  virtual DisplayError Standby();
+  virtual DisplayError Validate(HWLayers *hw_layers);
+  virtual DisplayError Commit(HWLayers *hw_layers);
+  virtual DisplayError Flush();
+  virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
+  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
+  virtual DisplayError SetVSyncState(bool enable);
+  virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+  virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
+  virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+  virtual DisplayError SetPanelBrightness(int level);
+  virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
+  virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
+  virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
+  virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
+  virtual DisplayError OnMinHdcpEncryptionLevelChange();
+
+  // For HWDevice derivatives
+  virtual DisplayError Init(HWEventHandler *eventhandler);
+  virtual DisplayError Deinit();
 
   enum {
     kHWEventVSync,
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index 56b329a..ac68967 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -74,13 +74,13 @@
   return true;
 }
 
-DisplayError HWHDMIInterface::Create(HWHDMIInterface **intf, HWInfoInterface *hw_info_intf,
-                                     BufferSyncHandler *buffer_sync_handler) {
+DisplayError HWHDMI::Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                            BufferSyncHandler *buffer_sync_handler) {
   DisplayError error = kErrorNone;
   HWHDMI *hw_fb_hdmi = NULL;
 
   hw_fb_hdmi = new HWHDMI(buffer_sync_handler, hw_info_intf);
-  error = hw_fb_hdmi->Init();
+  error = hw_fb_hdmi->Init(NULL);
   if (error != kErrorNone) {
     delete hw_fb_hdmi;
   } else {
@@ -89,7 +89,7 @@
   return error;
 }
 
-DisplayError HWHDMIInterface::Destroy(HWHDMIInterface *intf) {
+DisplayError HWHDMI::Destroy(HWInterface *intf) {
   HWHDMI *hw_fb_hdmi = static_cast<HWHDMI *>(intf);
   hw_fb_hdmi->Deinit();
   delete hw_fb_hdmi;
@@ -104,10 +104,10 @@
   HWDevice::hw_info_intf_ = hw_info_intf;
 }
 
-DisplayError HWHDMI::Init() {
+DisplayError HWHDMI::Init(HWEventHandler *eventhandler) {
   DisplayError error = kErrorNone;
 
-  error = HWDevice::Init();
+  error = HWDevice::Init(eventhandler);
   if (error != kErrorNone) {
     return error;
   }
@@ -147,15 +147,7 @@
     delete supported_video_modes_;
   }
 
-  return kErrorNone;
-}
-
-DisplayError HWHDMI::Open(HWEventHandler *eventhandler) {
-  return HWDevice::Open(eventhandler);
-}
-
-DisplayError HWHDMI::Close() {
-  return HWDevice::Close();
+  return HWDevice::Deinit();
 }
 
 DisplayError HWHDMI::GetNumDisplayAttributes(uint32_t *count) {
@@ -315,43 +307,11 @@
   return kErrorNotSupported;
 }
 
-DisplayError HWHDMI::PowerOn() {
-  return HWDevice::PowerOn();
-}
-
-DisplayError HWHDMI::PowerOff() {
-  return HWDevice::PowerOff();
-}
-
-DisplayError HWHDMI::Doze() {
-  return HWDevice::Doze();
-}
-
-DisplayError HWHDMI::DozeSuspend() {
-  return HWDevice::DozeSuspend();
-}
-
-DisplayError HWHDMI::Standby() {
-  return HWDevice::Standby();
-}
-
 DisplayError HWHDMI::Validate(HWLayers *hw_layers) {
   HWDevice::ResetDisplayParams();
   return HWDevice::Validate(hw_layers);
 }
 
-DisplayError HWHDMI::Commit(HWLayers *hw_layers) {
-  return HWDevice::Commit(hw_layers);
-}
-
-DisplayError HWHDMI::Flush() {
-  return HWDevice::Flush();
-}
-
-DisplayError HWHDMI::GetHWPanelInfo(HWPanelInfo *panel_info) {
-  return HWDevice::GetHWPanelInfo(panel_info);
-}
-
 DisplayError HWHDMI::GetHWScanInfo(HWScanInfo *scan_info) {
   if (!scan_info) {
     return kErrorParameters;
@@ -458,14 +418,6 @@
         hw_scan_info_.cea_scan_support);
 }
 
-DisplayError HWHDMI::GetPPFeaturesVersion(PPFeatureVersion *vers) {
-  return kErrorNotSupported;
-}
-
-DisplayError HWHDMI::SetPPFeatures(PPFeaturesConfig *feature_list) {
-  return kErrorNotSupported;
-}
-
 int HWHDMI::OpenResolutionFile(int file_mode) {
   char file_path[kMaxStringLength];
   memset(file_path, 0, sizeof(file_path));
@@ -577,9 +529,5 @@
   return is_file_present;
 }
 
-DisplayError HWHDMI::SetCursorPosition(HWLayers *hw_layers, int x, int y) {
-  return HWDevice::SetCursorPosition(hw_layers, x, y);
-}
-
 }  // namespace sdm
 
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
index 2d2d557..5352249 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -27,38 +27,29 @@
 
 #include <video/msm_hdmi_modes.h>
 #include "hw_device.h"
-#include "hw_hdmi_interface.h"
 
 namespace sdm {
 
-class HWHDMI : public HWDevice, public HWHDMIInterface {
+class HWHDMI : public HWDevice {
  public:
+  static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                             BufferSyncHandler *buffer_sync_handler);
+  static DisplayError Destroy(HWInterface *intf);
+
+ protected:
   HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
-  virtual DisplayError Init();
+  virtual DisplayError Init(HWEventHandler *eventhandler);
   virtual DisplayError Deinit();
-  virtual DisplayError Open(HWEventHandler *eventhandler);
-  virtual DisplayError Close();
   virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
   virtual DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
                                             uint32_t index);
-  virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
   virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
   virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
   virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
   virtual DisplayError OnMinHdcpEncryptionLevelChange();
   virtual DisplayError SetDisplayAttributes(uint32_t index);
   virtual DisplayError GetConfigIndex(uint32_t mode, uint32_t *index);
-  virtual DisplayError PowerOn();
-  virtual DisplayError PowerOff();
-  virtual DisplayError Doze();
-  virtual DisplayError DozeSuspend();
-  virtual DisplayError Standby();
   virtual DisplayError Validate(HWLayers *hw_layers);
-  virtual DisplayError Commit(HWLayers *hw_layers);
-  virtual DisplayError Flush();
-  virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
-  virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
 
  private:
   DisplayError ReadEDIDInfo();
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index c407da1..475ed07 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -46,13 +46,14 @@
 
 namespace sdm {
 
-DisplayError HWPrimaryInterface::Create(HWPrimaryInterface **intf, HWInfoInterface *hw_info_intf,
-                                        BufferSyncHandler *buffer_sync_handler) {
+DisplayError HWPrimary::Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                               BufferSyncHandler *buffer_sync_handler,
+                               HWEventHandler *eventhandler) {
   DisplayError error = kErrorNone;
   HWPrimary *hw_primary = NULL;
 
   hw_primary = new HWPrimary(buffer_sync_handler, hw_info_intf);
-  error = hw_primary->Init();
+  error = hw_primary->Init(eventhandler);
   if (error != kErrorNone) {
     delete hw_primary;
   } else {
@@ -62,7 +63,7 @@
   return error;
 }
 
-DisplayError HWPrimaryInterface::Destroy(HWPrimaryInterface *intf) {
+DisplayError HWPrimary::Destroy(HWInterface *intf) {
   HWPrimary *hw_primary = static_cast<HWPrimary *>(intf);
   hw_primary->Deinit();
   delete hw_primary;
@@ -78,14 +79,14 @@
   HWDevice::hw_info_intf_ = hw_info_intf;
 }
 
-DisplayError HWPrimary::Init() {
+DisplayError HWPrimary::Init(HWEventHandler *eventhandler) {
   DisplayError error = kErrorNone;
   char node_path[kMaxStringLength] = {0};
   char data[kMaxStringLength] = {0};
   const char* event_name[kNumDisplayEvents] = {"vsync_event", "show_blank_event", "idle_notify",
                                               "msm_fb_thermal_level"};
 
-  error = HWDevice::Init();
+  error = HWDevice::Init(eventhandler);
   if (error != kErrorNone) {
     goto CleanupOnError;
   }
@@ -153,15 +154,7 @@
     Sys::close_(poll_fds_[event].fd);
   }
 
-  return kErrorNone;
-}
-
-DisplayError HWPrimary::Open(HWEventHandler *eventhandler) {
-  return HWDevice::Open(eventhandler);
-}
-
-DisplayError HWPrimary::Close() {
-  return HWDevice::Close();
+  return HWDevice::Deinit();
 }
 
 DisplayError HWPrimary::GetNumDisplayAttributes(uint32_t *count) {
@@ -274,10 +267,6 @@
   return HWDevice::GetConfigIndex(mode, index);
 }
 
-DisplayError HWPrimary::PowerOn() {
-  return HWDevice::PowerOn();
-}
-
 DisplayError HWPrimary::PowerOff() {
   if (Sys::ioctl_(device_fd_, FBIOBLANK, FB_BLANK_POWERDOWN) < 0) {
     IOCTL_LOGE(FB_BLANK_POWERDOWN, device_type_);
@@ -305,10 +294,6 @@
   return kErrorNone;
 }
 
-DisplayError HWPrimary::Standby() {
-  return HWDevice::Standby();
-}
-
 DisplayError HWPrimary::Validate(HWLayers *hw_layers) {
   HWDevice::ResetDisplayParams();
 
@@ -334,18 +319,6 @@
   return HWDevice::Validate(hw_layers);
 }
 
-DisplayError HWPrimary::Commit(HWLayers *hw_layers) {
-  return HWDevice::Commit(hw_layers);
-}
-
-DisplayError HWPrimary::Flush() {
-  return HWDevice::Flush();
-}
-
-DisplayError HWPrimary::GetHWPanelInfo(HWPanelInfo *panel_info) {
-  return HWDevice::GetHWPanelInfo(panel_info);
-}
-
 void* HWPrimary::DisplayEventThread(void *context) {
   if (context) {
     return reinterpret_cast<HWPrimary *>(context)->DisplayEventThreadHandler();
@@ -584,9 +557,5 @@
   return kErrorNone;
 }
 
-DisplayError HWPrimary::SetCursorPosition(HWLayers *hw_layers, int x, int y) {
-  return HWDevice::SetCursorPosition(hw_layers, x, y);
-}
-
 }  // namespace sdm
 
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
index 1614ee1..6006f35 100644
--- a/sdm/libs/core/fb/hw_primary.h
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -28,32 +28,29 @@
 #include <sys/poll.h>
 
 #include "hw_device.h"
-#include "hw_primary_interface.h"
 
 namespace sdm {
 #define MAX_SYSFS_COMMAND_LENGTH 12
 
-class HWPrimary : public HWDevice, public HWPrimaryInterface {
+class HWPrimary : public HWDevice {
  public:
+  static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                             BufferSyncHandler *buffer_sync_handler, HWEventHandler *eventhandler);
+  static DisplayError Destroy(HWInterface *intf);
+
+ protected:
   HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
-  virtual DisplayError Init();
+  virtual DisplayError Init(HWEventHandler *eventhandler);
   virtual DisplayError Deinit();
-  virtual DisplayError Open(HWEventHandler *eventhandler);
-  virtual DisplayError Close();
   virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
   virtual DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
                                             uint32_t index);
-  virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
   virtual DisplayError SetDisplayAttributes(uint32_t index);
   virtual DisplayError GetConfigIndex(uint32_t mode, uint32_t *index);
-  virtual DisplayError PowerOn();
   virtual DisplayError PowerOff();
   virtual DisplayError Doze();
   virtual DisplayError DozeSuspend();
-  virtual DisplayError Standby();
   virtual DisplayError Validate(HWLayers *hw_layers);
-  virtual DisplayError Commit(HWLayers *hw_layers);
-  virtual DisplayError Flush();
   virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
   virtual DisplayError SetVSyncState(bool enable);
   virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
@@ -61,7 +58,6 @@
   virtual DisplayError SetPanelBrightness(int level);
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
   virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
-  virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
 
  private:
   // Panel modes for the MSMFB_LPM_ENABLE ioctl
diff --git a/sdm/libs/core/fb/hw_virtual.cpp b/sdm/libs/core/fb/hw_virtual.cpp
index 5c3c8b4..033159f 100644
--- a/sdm/libs/core/fb/hw_virtual.cpp
+++ b/sdm/libs/core/fb/hw_virtual.cpp
@@ -34,13 +34,13 @@
 
 namespace sdm {
 
-DisplayError HWVirtualInterface::Create(HWVirtualInterface **intf, HWInfoInterface *hw_info_intf,
-                                        BufferSyncHandler *buffer_sync_handler) {
+DisplayError HWVirtual::Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                               BufferSyncHandler *buffer_sync_handler) {
   DisplayError error = kErrorNone;
   HWVirtual *hw_virtual = NULL;
 
   hw_virtual = new HWVirtual(buffer_sync_handler, hw_info_intf);
-  error = hw_virtual->Init();
+  error = hw_virtual->Init(NULL);
   if (error != kErrorNone) {
     delete hw_virtual;
   } else {
@@ -50,7 +50,7 @@
   return error;
 }
 
-DisplayError HWVirtualInterface::Destroy(HWVirtualInterface *intf) {
+DisplayError HWVirtual::Destroy(HWInterface *intf) {
   HWVirtual *hw_virtual = static_cast<HWVirtual *>(intf);
   hw_virtual->Deinit();
   delete hw_virtual;
@@ -65,57 +65,8 @@
   HWDevice::hw_info_intf_ = hw_info_intf;
 }
 
-DisplayError HWVirtual::Init() {
-  return HWDevice::Init();
-}
-
-DisplayError HWVirtual::Deinit() {
-  return kErrorNone;
-}
-
-DisplayError HWVirtual::Open(HWEventHandler *eventhandler) {
-  return HWDevice::Open(eventhandler);
-}
-
-DisplayError HWVirtual::Close() {
-  return HWDevice::Close();
-}
-
-DisplayError HWVirtual::GetNumDisplayAttributes(uint32_t *count) {
-  return HWDevice::GetNumDisplayAttributes(count);
-}
-
-DisplayError HWVirtual::GetDisplayAttributes(HWDisplayAttributes *display_attributes,
-                                             uint32_t index) {
-  return HWDevice::GetDisplayAttributes(display_attributes, index);
-}
-
-DisplayError HWVirtual::SetDisplayAttributes(uint32_t index) {
-  return HWDevice::SetDisplayAttributes(index);
-}
-
-DisplayError HWVirtual::GetConfigIndex(uint32_t mode, uint32_t *index) {
-  return HWDevice::GetConfigIndex(mode, index);
-}
-
-DisplayError HWVirtual::PowerOn() {
-  return HWDevice::PowerOn();
-}
-
-DisplayError HWVirtual::PowerOff() {
-  return HWDevice::PowerOff();
-}
-
-DisplayError HWVirtual::Doze() {
-  return HWDevice::Doze();
-}
-
-DisplayError HWVirtual::DozeSuspend() {
-  return HWDevice::DozeSuspend();
-}
-
-DisplayError HWVirtual::Standby() {
-  return HWDevice::Standby();
+DisplayError HWVirtual::Init(HWEventHandler *eventhandler) {
+  return HWDevice::Init(eventhandler);
 }
 
 DisplayError HWVirtual::Validate(HWLayers *hw_layers) {
@@ -123,29 +74,5 @@
   return HWDevice::Validate(hw_layers);
 }
 
-DisplayError HWVirtual::Commit(HWLayers *hw_layers) {
-  return HWDevice::Commit(hw_layers);
-}
-
-DisplayError HWVirtual::Flush() {
-  return HWDevice::Flush();
-}
-
-DisplayError HWVirtual::GetHWPanelInfo(HWPanelInfo *panel_info) {
-  return HWDevice::GetHWPanelInfo(panel_info);
-}
-
-DisplayError HWVirtual::GetPPFeaturesVersion(PPFeatureVersion *vers) {
-  return kErrorNotSupported;
-}
-
-DisplayError HWVirtual::SetPPFeatures(PPFeaturesConfig *feature_list) {
-  return kErrorNotSupported;
-}
-
-DisplayError HWVirtual::SetCursorPosition(HWLayers *hw_layers, int x, int y) {
-  return HWDevice::SetCursorPosition(hw_layers, x, y);
-}
-
 }  // namespace sdm
 
diff --git a/sdm/libs/core/fb/hw_virtual.h b/sdm/libs/core/fb/hw_virtual.h
index 573a371..2b740d5 100644
--- a/sdm/libs/core/fb/hw_virtual.h
+++ b/sdm/libs/core/fb/hw_virtual.h
@@ -26,34 +26,19 @@
 #define __HW_VIRTUAL_H__
 
 #include "hw_device.h"
-#include "hw_virtual_interface.h"
 
 namespace sdm {
 
-class HWVirtual : public HWDevice, public HWVirtualInterface {
+class HWVirtual : public HWDevice {
  public:
+  static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
+                             BufferSyncHandler *buffer_sync_handler);
+  static DisplayError Destroy(HWInterface *intf);
+
+ protected:
   HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
-  virtual DisplayError Init();
-  virtual DisplayError Deinit();
-  virtual DisplayError Open(HWEventHandler *eventhandler);
-  virtual DisplayError Close();
-  virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
-  virtual DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
-                                            uint32_t index);
-  virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
-  virtual DisplayError SetDisplayAttributes(uint32_t index);
-  virtual DisplayError GetConfigIndex(uint32_t mode, uint32_t *index);
-  virtual DisplayError PowerOn();
-  virtual DisplayError PowerOff();
-  virtual DisplayError Doze();
-  virtual DisplayError DozeSuspend();
-  virtual DisplayError Standby();
+  virtual DisplayError Init(HWEventHandler *eventhandler);
   virtual DisplayError Validate(HWLayers *hw_layers);
-  virtual DisplayError Commit(HWLayers *hw_layers);
-  virtual DisplayError Flush();
-  virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
-  virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
-  virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/hw_hdmi_interface.h b/sdm/libs/core/hw_hdmi_interface.h
deleted file mode 100644
index 3b177b4..0000000
--- a/sdm/libs/core/hw_hdmi_interface.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2015, The Linux Foundation. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are permitted
-* provided that the following conditions are met:
-*    * Redistributions of source code must retain the above copyright notice, this list of
-*      conditions and the following disclaimer.
-*    * Redistributions in binary form must reproduce the above copyright notice, this list of
-*      conditions and the following disclaimer in the documentation and/or other materials provided
-*      with the distribution.
-*    * Neither the name of The Linux Foundation nor the names of its contributors may be used to
-*      endorse or promote products derived from this software without specific prior written
-*      permission.
-*
-* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef __HW_HDMI_INTERFACE_H__
-#define __HW_HDMI_INTERFACE_H__
-
-#include "hw_interface.h"
-
-namespace sdm {
-
-class HWInfoInterface;
-
-class HWHDMIInterface: virtual public HWInterface {
- public:
-  static DisplayError Create(HWHDMIInterface **intf, HWInfoInterface *hw_info_intf,
-                             BufferSyncHandler *buffer_sync_handler);
-  static DisplayError Destroy(HWHDMIInterface *intf);
-  virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info) = 0;
-  virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format) = 0;
-  virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format) = 0;
-  virtual DisplayError OnMinHdcpEncryptionLevelChange() = 0;
-
- protected:
-  virtual ~HWHDMIInterface() { }
-};
-
-}  // namespace sdm
-
-#endif  // __HW_HDMI_INTERFACE_H__
-
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
index 0a4578f..e940d2b 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -26,11 +26,9 @@
 #define __HW_INTERFACE_H__
 
 #include <core/display_interface.h>
-#include <private/strategy_interface.h>
 #include <private/hw_info_types.h>
 #include <private/color_interface.h>
 #include <utils/constants.h>
-#include <core/buffer_allocator.h>
 #include <core/buffer_sync_handler.h>
 
 namespace sdm {
@@ -64,8 +62,6 @@
 
 class HWInterface {
  public:
-  virtual DisplayError Open(HWEventHandler *eventhandler) = 0;
-  virtual DisplayError Close() = 0;
   virtual DisplayError GetNumDisplayAttributes(uint32_t *count) = 0;
   virtual DisplayError GetDisplayAttributes(HWDisplayAttributes *display_attributes,
                                             uint32_t index) = 0;
@@ -82,7 +78,16 @@
   virtual DisplayError Flush() = 0;
   virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers) = 0;
   virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list) = 0;
+  virtual DisplayError SetVSyncState(bool enable) = 0;
+  virtual void SetIdleTimeoutMs(uint32_t timeout_ms) = 0;
+  virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode) = 0;
+  virtual DisplayError SetRefreshRate(uint32_t refresh_rate) = 0;
+  virtual DisplayError SetPanelBrightness(int level) = 0;
+  virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info) = 0;
+  virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format) = 0;
+  virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format) = 0;
   virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y) = 0;
+  virtual DisplayError OnMinHdcpEncryptionLevelChange() = 0;
 
  protected:
   virtual ~HWInterface() { }
diff --git a/sdm/libs/core/hw_primary_interface.h b/sdm/libs/core/hw_primary_interface.h
deleted file mode 100644
index 290f9cb..0000000
--- a/sdm/libs/core/hw_primary_interface.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2015, The Linux Foundation. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are permitted
-* provided that the following conditions are met:
-*    * Redistributions of source code must retain the above copyright notice, this list of
-*      conditions and the following disclaimer.
-*    * Redistributions in binary form must reproduce the above copyright notice, this list of
-*      conditions and the following disclaimer in the documentation and/or other materials provided
-*      with the distribution.
-*    * Neither the name of The Linux Foundation nor the names of its contributors may be used to
-*      endorse or promote products derived from this software without specific prior written
-*      permission.
-*
-* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef __HW_PRIMARY_INTERFACE_H__
-#define __HW_PRIMARY_INTERFACE_H__
-
-namespace sdm {
-
-class BufferSyncHandler;
-class HWInfoInterface;
-
-class HWPrimaryInterface: virtual public HWInterface {
- public:
-  static DisplayError Create(HWPrimaryInterface **intf, HWInfoInterface *hw_info_intf,
-                             BufferSyncHandler *buffer_sync_handler);
-  static DisplayError Destroy(HWPrimaryInterface *intf);
-  virtual DisplayError SetVSyncState(bool enable) = 0;
-  virtual void SetIdleTimeoutMs(uint32_t timeout_ms) = 0;
-  virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode) = 0;
-  virtual DisplayError SetRefreshRate(uint32_t refresh_rate) = 0;
-  virtual DisplayError SetPanelBrightness(int level) = 0;
-
- protected:
-  virtual ~HWPrimaryInterface() { }
-};
-
-}  // namespace sdm
-
-#endif  // __HW_PRIMARY_INTERFACE_H__
-
diff --git a/sdm/libs/core/hw_virtual_interface.h b/sdm/libs/core/hw_virtual_interface.h
deleted file mode 100644
index ba14ae6..0000000
--- a/sdm/libs/core/hw_virtual_interface.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2015, The Linux Foundation. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are permitted
-* provided that the following conditions are met:
-*    * Redistributions of source code must retain the above copyright notice, this list of
-*      conditions and the following disclaimer.
-*    * Redistributions in binary form must reproduce the above copyright notice, this list of
-*      conditions and the following disclaimer in the documentation and/or other materials provided
-*      with the distribution.
-*    * Neither the name of The Linux Foundation nor the names of its contributors may be used to
-*      endorse or promote products derived from this software without specific prior written
-*      permission.
-*
-* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef __HW_VIRTUAL_INTERFACE_H__
-#define __HW_VIRTUAL_INTERFACE_H__
-
-#include "hw_interface.h"
-
-namespace sdm {
-
-class HWInfoInterface;
-
-class HWVirtualInterface: virtual public HWInterface {
- public:
-  static DisplayError Create(HWVirtualInterface **intf, HWInfoInterface *hw_info_intf,
-                             BufferSyncHandler *buffer_sync_handler);
-  static DisplayError Destroy(HWVirtualInterface *intf);
-
- protected:
-  virtual ~HWVirtualInterface() { }
-};
-
-}  // namespace sdm
-
-#endif  // __HW_VIRTUAL_INTERFACE_H__
-