diff options
Diffstat (limited to 'sdm/libs')
-rw-r--r-- | sdm/libs/core/display_base.cpp | 12 | ||||
-rw-r--r-- | sdm/libs/core/display_base.h | 1 | ||||
-rw-r--r-- | sdm/libs/core/fb/hw_device.cpp | 12 | ||||
-rw-r--r-- | sdm/libs/core/fb/hw_device.h | 2 | ||||
-rw-r--r-- | sdm/libs/hwc/hwc_display.cpp | 17 | ||||
-rw-r--r-- | sdm/libs/hwc/hwc_display.h | 1 | ||||
-rw-r--r-- | sdm/libs/hwc/hwc_session.cpp | 43 | ||||
-rw-r--r-- | sdm/libs/hwc/hwc_session.h | 1 |
8 files changed, 82 insertions, 7 deletions
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp index 1f28e6e7..cf81037c 100644 --- a/sdm/libs/core/display_base.cpp +++ b/sdm/libs/core/display_base.cpp @@ -1038,4 +1038,16 @@ DisplayError DisplayBase::SetDetailEnhancerData(const DisplayDetailEnhancerData return kErrorNone; } +DisplayError DisplayBase::GetDisplayPort(DisplayPort *port) { + lock_guard<recursive_mutex> obj(recursive_mutex_); + + if (!port) { + return kErrorParameters; + } + + *port = hw_panel_info_.port; + + return kErrorNone; +} + } // namespace sdm diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h index 7fdb7148..2ef6eb57 100644 --- a/sdm/libs/core/display_base.h +++ b/sdm/libs/core/display_base.h @@ -109,6 +109,7 @@ class DisplayBase : public DisplayInterface, DumpImpl { virtual DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info); virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info); virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data); + virtual DisplayError GetDisplayPort(DisplayPort *port); protected: // DumpImpl method diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp index bbb5791e..113560ba 100644 --- a/sdm/libs/core/fb/hw_device.cpp +++ b/sdm/libs/core/fb/hw_device.cpp @@ -848,13 +848,16 @@ void HWDevice::GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info) { } } - GetHWDisplayPortAndMode(device_node, &panel_info->port, &panel_info->mode); + GetHWDisplayPortAndMode(device_node, panel_info); GetSplitInfo(device_node, panel_info); GetHWPanelNameByNode(device_node, panel_info); GetHWPanelMaxBrightnessFromNode(panel_info); } -void HWDevice::GetHWDisplayPortAndMode(int device_node, HWDisplayPort *port, HWDisplayMode *mode) { +void HWDevice::GetHWDisplayPortAndMode(int device_node, HWPanelInfo *panel_info) { + DisplayPort *port = &panel_info->port; + HWDisplayMode *mode = &panel_info->mode; + *port = kPortDefault; *mode = kModeDefault; @@ -884,11 +887,14 @@ void HWDevice::GetHWDisplayPortAndMode(int device_node, HWDisplayPort *port, HWD *port = kPortEDP; *mode = kModeVideo; } else if ((strncmp(line.c_str(), "dtv panel", strlen("dtv panel")) == 0)) { - *port = kPortDTv; + *port = kPortDTV; *mode = kModeVideo; } else if ((strncmp(line.c_str(), "writeback panel", strlen("writeback panel")) == 0)) { *port = kPortWriteBack; *mode = kModeCommand; + } else if ((strncmp(line.c_str(), "dp panel", strlen("dp panel")) == 0)) { + *port = kPortDP; + *mode = kModeVideo; } return; diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h index 7e85e268..8916dc47 100644 --- a/sdm/libs/core/fb/hw_device.h +++ b/sdm/libs/core/fb/hw_device.h @@ -115,7 +115,7 @@ class HWDevice : public HWInterface { void PopulateHWPanelInfo(); void GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info); void GetHWPanelNameByNode(int device_node, HWPanelInfo *panel_info); - void GetHWDisplayPortAndMode(int device_node, HWDisplayPort *port, HWDisplayMode *mode); + void GetHWDisplayPortAndMode(int device_node, HWPanelInfo *panel_info); void GetSplitInfo(int device_node, HWPanelInfo *panel_info); void GetHWPanelMaxBrightnessFromNode(HWPanelInfo *panel_info); int ParseLine(const char *input, char *tokens[], const uint32_t max_token, uint32_t *count); diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp index dc66bc74..624c7210 100644 --- a/sdm/libs/hwc/hwc_display.cpp +++ b/sdm/libs/hwc/hwc_display.cpp @@ -486,16 +486,24 @@ int HWCDisplay::PrePrepareLayerStack(hwc_display_contents_1_t *content_list) { // For dim layers, SurfaceFlinger // - converts planeAlpha to per pixel alpha, - // - sets RGB color to 000, + // - sets appropriate RGB color, // - sets planeAlpha to 0xff, // - blending to Premultiplied. // This can be achieved at hardware by - // - solid fill ARGB to 0xff000000, + // - solid fill ARGB to appropriate value, // - incoming planeAlpha, // - blending to Coverage. if (hwc_layer.flags & kDimLayer) { layer->input_buffer->format = kFormatARGB8888; layer->solid_fill_color = 0xff000000; +#ifdef QTI_BSP + // Get ARGB color from HWC Dim Layer color + uint32_t a = UINT32(hwc_layer.color.a) << 24; + uint32_t r = UINT32(hwc_layer.color.r) << 16; + uint32_t g = UINT32(hwc_layer.color.g) << 8; + uint32_t b = UINT32(hwc_layer.color.b); + layer->solid_fill_color = a | r | g | b; +#endif SetBlending(HWC_BLENDING_COVERAGE, &layer->blending); } else { SetBlending(hwc_layer.blending, &layer->blending); @@ -1386,4 +1394,9 @@ bool HWCDisplay::IsSurfaceUpdated(const std::vector<LayerRect> &dirty_regions) { return (dirty_regions.empty() || IsValid(dirty_regions.at(0))); } +int HWCDisplay::GetDisplayPort(DisplayPort *port) { + return display_intf_->GetDisplayPort(port) == kErrorNone ? 0 : -1; +} + + } // namespace sdm diff --git a/sdm/libs/hwc/hwc_display.h b/sdm/libs/hwc/hwc_display.h index 3e519a69..014bd026 100644 --- a/sdm/libs/hwc/hwc_display.h +++ b/sdm/libs/hwc/hwc_display.h @@ -117,6 +117,7 @@ class HWCDisplay : public DisplayEventHandler { PPPendingParams *pending_action); int GetVisibleDisplayRect(hwc_rect_t* rect); DisplayClass GetDisplayClass(); + int GetDisplayPort(DisplayPort *port); protected: enum DisplayStatus { diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp index b00968c8..965797c2 100644 --- a/sdm/libs/hwc/hwc_session.cpp +++ b/sdm/libs/hwc/hwc_session.cpp @@ -940,6 +940,41 @@ android::status_t HWCSession::HandleGetDisplayConfigCount(const android::Parcel return error; } +android::status_t HWCSession::SetDisplayPort(DisplayPort sdm_disp_port, int *hwc_disp_port) { + if (!hwc_disp_port) { + return -EINVAL; + } + + switch (sdm_disp_port) { + case kPortDSI: + *hwc_disp_port = qdutils::DISPLAY_PORT_DSI; + break; + case kPortDTV: + *hwc_disp_port = qdutils::DISPLAY_PORT_DTV; + break; + case kPortLVDS: + *hwc_disp_port = qdutils::DISPLAY_PORT_LVDS; + break; + case kPortEDP: + *hwc_disp_port = qdutils::DISPLAY_PORT_EDP; + break; + case kPortWriteBack: + *hwc_disp_port = qdutils::DISPLAY_PORT_WRITEBACK; + break; + case kPortDP: + *hwc_disp_port = qdutils::DISPLAY_PORT_DP; + break; + case kPortDefault: + *hwc_disp_port = qdutils::DISPLAY_PORT_DEFAULT; + break; + default: + DLOGE("Invalid sdm display port %d", sdm_disp_port); + return -EINVAL; + } + + return 0; +} + android::status_t HWCSession::HandleGetDisplayAttributesForConfig(const android::Parcel *input_parcel, android::Parcel *output_parcel) { @@ -947,6 +982,8 @@ android::status_t HWCSession::HandleGetDisplayAttributesForConfig(const android: int dpy = input_parcel->readInt32(); int error = android::BAD_VALUE; DisplayConfigVariableInfo display_attributes; + DisplayPort sdm_disp_port = kPortDefault; + int hwc_disp_port = qdutils::DISPLAY_PORT_DEFAULT; if (dpy > HWC_DISPLAY_VIRTUAL) { return android::BAD_VALUE; @@ -955,12 +992,16 @@ android::status_t HWCSession::HandleGetDisplayAttributesForConfig(const android: if (hwc_display_[dpy]) { error = hwc_display_[dpy]->GetDisplayAttributesForConfig(config, &display_attributes); if (error == 0) { + hwc_display_[dpy]->GetDisplayPort(&sdm_disp_port); + + SetDisplayPort(sdm_disp_port, &hwc_disp_port); + output_parcel->writeInt32(INT(display_attributes.vsync_period_ns)); output_parcel->writeInt32(INT(display_attributes.x_pixels)); output_parcel->writeInt32(INT(display_attributes.y_pixels)); output_parcel->writeFloat(display_attributes.x_dpi); output_parcel->writeFloat(display_attributes.y_dpi); - output_parcel->writeInt32(0); // Panel type, unsupported. + output_parcel->writeInt32(hwc_disp_port); output_parcel->writeInt32(display_attributes.is_yuv); } } diff --git a/sdm/libs/hwc/hwc_session.h b/sdm/libs/hwc/hwc_session.h index 2a732b2b..54b72608 100644 --- a/sdm/libs/hwc/hwc_session.h +++ b/sdm/libs/hwc/hwc_session.h @@ -124,6 +124,7 @@ class HWCSession : hwc_composer_device_1_t, public qClient::BnQClient { android::status_t GetBWTransactionStatus(const android::Parcel *input_parcel, android::Parcel *output_parcel); android::status_t SetMixerResolution(const android::Parcel *input_parcel); + android::status_t SetDisplayPort(DisplayPort sdm_disp_port, int *hwc_disp_port); static Locker locker_; CoreInterface *core_intf_ = NULL; |