Merge "sdm: Add factory methods for HWInterface object creation"
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 3589680..1f28e6e 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -130,8 +130,8 @@
}
comp_manager_->UnregisterDisplay(display_comp_ctx_);
-
HWEventsInterface::Destroy(hw_events_intf_);
+ HWInterface::Destroy(hw_intf_);
return kErrorNone;
}
diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp
index 7d65e26..6e2a7b5 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -31,7 +31,6 @@
#include "display_hdmi.h"
#include "hw_interface.h"
#include "hw_info_interface.h"
-#include "fb/hw_hdmi.h"
#define __CLASS__ "DisplayHDMI"
@@ -47,8 +46,8 @@
DisplayError DisplayHDMI::Init() {
lock_guard<recursive_mutex> obj(recursive_mutex_);
- DisplayError error = HWHDMI::Create(&hw_intf_, hw_info_intf_,
- DisplayBase::buffer_sync_handler_);
+ DisplayError error = HWInterface::Create(kHDMI, hw_info_intf_, buffer_sync_handler_,
+ &hw_intf_);
if (error != kErrorNone) {
return error;
}
@@ -65,12 +64,12 @@
error = hw_intf_->SetDisplayAttributes(active_mode_index);
if (error != kErrorNone) {
- HWHDMI::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
}
error = DisplayBase::Init();
if (error != kErrorNone) {
- HWHDMI::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
return error;
}
@@ -91,22 +90,13 @@
error = HWEventsInterface::Create(INT(display_type_), this, &event_list_, &hw_events_intf_);
if (error != kErrorNone) {
DisplayBase::Deinit();
- HWHDMI::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
DLOGE("Failed to create hardware events interface. Error = %d", error);
}
return error;
}
-DisplayError DisplayHDMI::Deinit() {
- lock_guard<recursive_mutex> obj(recursive_mutex_);
-
- DisplayError error = DisplayBase::Deinit();
- HWHDMI::Destroy(hw_intf_);
-
- return error;
-}
-
DisplayError DisplayHDMI::Prepare(LayerStack *layer_stack) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
DisplayError error = kErrorNone;
diff --git a/sdm/libs/core/display_hdmi.h b/sdm/libs/core/display_hdmi.h
index 3a3c0dc..091cdc3 100644
--- a/sdm/libs/core/display_hdmi.h
+++ b/sdm/libs/core/display_hdmi.h
@@ -41,7 +41,6 @@
BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
RotatorInterface *rotator_intf);
virtual DisplayError Init();
- virtual DisplayError Deinit();
virtual DisplayError Prepare(LayerStack *layer_stack);
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index ad1d3d6..05e5dc3 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -33,7 +33,6 @@
#include "display_primary.h"
#include "hw_interface.h"
#include "hw_info_interface.h"
-#include "fb/hw_primary.h"
#define __CLASS__ "DisplayPrimary"
@@ -49,16 +48,15 @@
DisplayError DisplayPrimary::Init() {
lock_guard<recursive_mutex> obj(recursive_mutex_);
- DisplayError error = HWPrimary::Create(&hw_intf_, hw_info_intf_,
- DisplayBase::buffer_sync_handler_);
-
+ DisplayError error = HWInterface::Create(kPrimary, hw_info_intf_, buffer_sync_handler_,
+ &hw_intf_);
if (error != kErrorNone) {
return error;
}
error = DisplayBase::Init();
if (error != kErrorNone) {
- HWPrimary::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
return error;
}
@@ -76,21 +74,12 @@
if (error != kErrorNone) {
DLOGE("Failed to create hardware events interface. Error = %d", error);
DisplayBase::Deinit();
- HWPrimary::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
}
return error;
}
-DisplayError DisplayPrimary::Deinit() {
- lock_guard<recursive_mutex> obj(recursive_mutex_);
-
- DisplayError error = DisplayBase::Deinit();
- HWPrimary::Destroy(hw_intf_);
-
- return error;
-}
-
DisplayError DisplayPrimary::Prepare(LayerStack *layer_stack) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
DisplayError error = kErrorNone;
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index 962f00c..c20ff09 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -40,7 +40,6 @@
BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
RotatorInterface *rotator_intf);
virtual DisplayError Init();
- virtual DisplayError Deinit();
virtual DisplayError Prepare(LayerStack *layer_stack);
virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
index f835ea4..783cacd 100644
--- a/sdm/libs/core/display_virtual.cpp
+++ b/sdm/libs/core/display_virtual.cpp
@@ -28,7 +28,6 @@
#include "display_virtual.h"
#include "hw_interface.h"
#include "hw_info_interface.h"
-#include "fb/hw_virtual.h"
#define __CLASS__ "DisplayVirtual"
@@ -44,8 +43,8 @@
DisplayError DisplayVirtual::Init() {
lock_guard<recursive_mutex> obj(recursive_mutex_);
- DisplayError error = HWVirtual::Create(&hw_intf_, hw_info_intf_,
- DisplayBase::buffer_sync_handler_);
+ DisplayError error = HWInterface::Create(kVirtual, hw_info_intf_, buffer_sync_handler_,
+ &hw_intf_);
if (error != kErrorNone) {
return error;
}
@@ -54,21 +53,12 @@
error = DisplayBase::Init();
if (error != kErrorNone) {
- HWVirtual::Destroy(hw_intf_);
+ HWInterface::Destroy(hw_intf_);
}
return error;
}
-DisplayError DisplayVirtual::Deinit() {
- lock_guard<recursive_mutex> obj(recursive_mutex_);
-
- DisplayError error = DisplayBase::Deinit();
- HWVirtual::Destroy(hw_intf_);
-
- return error;
-}
-
DisplayError DisplayVirtual::GetNumVariableInfoConfigs(uint32_t *count) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
*count = 1;
diff --git a/sdm/libs/core/display_virtual.h b/sdm/libs/core/display_virtual.h
index 69af7f0..20ccc6e 100644
--- a/sdm/libs/core/display_virtual.h
+++ b/sdm/libs/core/display_virtual.h
@@ -39,7 +39,6 @@
BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
RotatorInterface *rotator_intf);
virtual DisplayError Init();
- virtual DisplayError Deinit();
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info);
virtual DisplayError GetActiveConfig(uint32_t *index);
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index c707847..0a72c17 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -48,6 +48,9 @@
#include <string>
#include "hw_device.h"
+#include "hw_primary.h"
+#include "hw_hdmi.h"
+#include "hw_virtual.h"
#include "hw_info_interface.h"
#define __CLASS__ "HWDevice"
@@ -58,6 +61,46 @@
namespace sdm {
+DisplayError HWInterface::Create(DisplayType type, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ HWInterface **intf) {
+ DisplayError error = kErrorNone;
+ HWDevice *hw = nullptr;
+
+ switch (type) {
+ case kPrimary:
+ hw = new HWPrimary(buffer_sync_handler, hw_info_intf);
+ break;
+ case kHDMI:
+ hw = new HWHDMI(buffer_sync_handler, hw_info_intf);
+ break;
+ case kVirtual:
+ hw = new HWVirtual(buffer_sync_handler, hw_info_intf);
+ break;
+ default:
+ DLOGE("Undefined display type");
+ return kErrorUndefined;
+ }
+
+ error = hw->Init();
+ if (error != kErrorNone) {
+ delete hw;
+ DLOGE("Init on HW Intf type %d failed", type);
+ return error;
+ }
+ *intf = hw;
+
+ return error;
+}
+
+DisplayError HWInterface::Destroy(HWInterface *intf) {
+ HWDevice *hw = static_cast<HWDevice *>(intf);
+ hw->Deinit();
+ delete hw;
+
+ return kErrorNone;
+}
+
HWDevice::HWDevice(BufferSyncHandler *buffer_sync_handler)
: fb_node_index_(-1), fb_path_("/sys/devices/virtual/graphics/fb"),
buffer_sync_handler_(buffer_sync_handler), synchronous_commit_(false) {
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
index 40f4f63..7e85e26 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -49,9 +49,13 @@
class HWInfoInterface;
class HWDevice : public HWInterface {
+ public:
+ virtual ~HWDevice() {}
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+
protected:
explicit HWDevice(BufferSyncHandler *buffer_sync_handler);
- virtual ~HWDevice() {}
// From HWInterface
virtual DisplayError GetActiveConfig(uint32_t *active_config);
@@ -89,10 +93,6 @@
virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
- // For HWDevice derivatives
- virtual DisplayError Init();
- virtual DisplayError Deinit();
-
enum {
kHWEventVSync,
kHWEventBlank,
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index 1ecb7c2..ccfb431 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -79,29 +79,6 @@
return true;
}
-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();
- if (error != kErrorNone) {
- delete hw_fb_hdmi;
- } else {
- *intf = hw_fb_hdmi;
- }
- return error;
-}
-
-DisplayError HWHDMI::Destroy(HWInterface *intf) {
- HWHDMI *hw_fb_hdmi = static_cast<HWHDMI *>(intf);
- hw_fb_hdmi->Deinit();
- delete hw_fb_hdmi;
-
- return kErrorNone;
-}
-
HWHDMI::HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
: HWDevice(buffer_sync_handler), hw_scan_info_(), active_config_index_(0) {
HWDevice::device_type_ = kDeviceHDMI;
@@ -155,10 +132,6 @@
return error;
}
-DisplayError HWHDMI::Deinit() {
- return HWDevice::Deinit();
-}
-
DisplayError HWHDMI::GetNumDisplayAttributes(uint32_t *count) {
*count = UINT32(hdmi_modes_.size());
if (*count <= 0) {
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
index 8cedc93..f745991 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -37,9 +37,7 @@
class HWHDMI : public HWDevice {
public:
- static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler);
- static DisplayError Destroy(HWInterface *intf);
+ HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
protected:
enum HWFramerateUpdate {
@@ -74,9 +72,7 @@
uint32_t fps;
};
- HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
virtual DisplayError Init();
- virtual DisplayError Deinit();
virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
// Requirement to call this only after the first config has been explicitly set by client
virtual DisplayError GetActiveConfig(uint32_t *active_config);
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index 3c3b464..4a8cc1f 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -63,30 +63,6 @@
using std::to_string;
using std::fstream;
-DisplayError HWPrimary::Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler) {
- DisplayError error = kErrorNone;
- HWPrimary *hw_primary = NULL;
-
- hw_primary = new HWPrimary(buffer_sync_handler, hw_info_intf);
- error = hw_primary->Init();
- if (error != kErrorNone) {
- delete hw_primary;
- } else {
- *intf = hw_primary;
- }
-
- return error;
-}
-
-DisplayError HWPrimary::Destroy(HWInterface *intf) {
- HWPrimary *hw_primary = static_cast<HWPrimary *>(intf);
- hw_primary->Deinit();
- delete hw_primary;
-
- return kErrorNone;
-}
-
HWPrimary::HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
: HWDevice(buffer_sync_handler) {
HWDevice::device_type_ = kDevicePrimary;
@@ -190,10 +166,6 @@
}
}
-DisplayError HWPrimary::Deinit() {
- return HWDevice::Deinit();
-}
-
DisplayError HWPrimary::GetNumDisplayAttributes(uint32_t *count) {
*count = IsResolutionSwitchEnabled() ? UINT32(display_configs_.size()) : 1;
return kErrorNone;
@@ -513,7 +485,7 @@
}
DisplayError HWPrimary::SetPanelBrightness(int level) {
- char buffer[MAX_SYSFS_COMMAND_LENGTH] = {0};
+ char buffer[kMaxSysfsCommandLength] = {0};
DLOGV_IF(kTagDriverConfig, "Set brightness level to %d", level);
int fd = Sys::open_(kBrightnessNode, O_RDWR);
@@ -523,7 +495,7 @@
return kErrorFileDescriptor;
}
- int32_t bytes = snprintf(buffer, MAX_SYSFS_COMMAND_LENGTH, "%d\n", level);
+ int32_t bytes = snprintf(buffer, kMaxSysfsCommandLength, "%d\n", level);
if (bytes < 0) {
DLOGV_IF(kTagDriverConfig, "Failed to copy new brightness level = %d", level);
Sys::close_(fd);
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
index 18e9d72..a517b06 100644
--- a/sdm/libs/core/fb/hw_primary.h
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -32,19 +32,13 @@
#include "hw_device.h"
namespace sdm {
-#define MAX_SYSFS_COMMAND_LENGTH 12
-struct DisplayConfigVariableInfo;
class HWPrimary : public HWDevice {
public:
- static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler);
- static DisplayError Destroy(HWInterface *intf);
+ HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
protected:
- HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
virtual DisplayError Init();
- virtual DisplayError Deinit();
virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
virtual DisplayError GetActiveConfig(uint32_t *active_config);
virtual DisplayError GetDisplayAttributes(uint32_t index,
@@ -74,6 +68,10 @@
kModeLPMCommand,
};
+ enum {
+ kMaxSysfsCommandLength = 12,
+ };
+
DisplayError PopulateDisplayAttributes();
void InitializeConfigs();
bool IsResolutionSwitchEnabled() { return !display_configs_.empty(); }
diff --git a/sdm/libs/core/fb/hw_virtual.cpp b/sdm/libs/core/fb/hw_virtual.cpp
index d297efa..455d0d2 100644
--- a/sdm/libs/core/fb/hw_virtual.cpp
+++ b/sdm/libs/core/fb/hw_virtual.cpp
@@ -34,30 +34,6 @@
namespace sdm {
-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();
- if (error != kErrorNone) {
- delete hw_virtual;
- } else {
- *intf = hw_virtual;
- }
-
- return error;
-}
-
-DisplayError HWVirtual::Destroy(HWInterface *intf) {
- HWVirtual *hw_virtual = static_cast<HWVirtual *>(intf);
- hw_virtual->Deinit();
- delete hw_virtual;
-
- return kErrorNone;
-}
-
HWVirtual::HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
: HWDevice(buffer_sync_handler) {
HWDevice::device_type_ = kDeviceVirtual;
diff --git a/sdm/libs/core/fb/hw_virtual.h b/sdm/libs/core/fb/hw_virtual.h
index c083127..eb82731 100644
--- a/sdm/libs/core/fb/hw_virtual.h
+++ b/sdm/libs/core/fb/hw_virtual.h
@@ -31,9 +31,7 @@
class HWVirtual : public HWDevice {
public:
- static DisplayError Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler);
- static DisplayError Destroy(HWInterface *intf);
+ HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
virtual DisplayError SetVSyncState(bool enable) { return kErrorNotSupported; }
virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
return kErrorNotSupported;
@@ -42,7 +40,6 @@
virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes);
protected:
- HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
virtual DisplayError Init();
virtual DisplayError Validate(HWLayers *hw_layers);
};
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
index 56a1513..da3ac4d 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -31,6 +31,8 @@
#include <utils/constants.h>
#include <core/buffer_sync_handler.h>
+#include "hw_info_interface.h"
+
namespace sdm {
enum HWScanSupport {
@@ -64,6 +66,10 @@
class HWInterface {
public:
+ static DisplayError Create(DisplayType type, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler, HWInterface **intf);
+ static DisplayError Destroy(HWInterface *intf);
+
virtual DisplayError GetActiveConfig(uint32_t *active_config) = 0;
virtual DisplayError GetNumDisplayAttributes(uint32_t *count) = 0;
virtual DisplayError GetDisplayAttributes(uint32_t index,