diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-06-30 20:56:51 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-06-30 20:56:51 -0700 |
commit | 9c38bc0539a0a8dcb7a0ea500d6afd94d45e6e99 (patch) | |
tree | 72a90225d426f2b3644d496d133e7688a3e04537 /sdm | |
parent | 8775a2b5c4eba9e202e7368a556fdafeedb6a5e8 (diff) | |
parent | 3b482279ae0f0dd2adefdcd5b3c04b78979c46fa (diff) | |
download | hardware_qcom_display-9c38bc0539a0a8dcb7a0ea500d6afd94d45e6e99.tar.gz hardware_qcom_display-9c38bc0539a0a8dcb7a0ea500d6afd94d45e6e99.tar.bz2 hardware_qcom_display-9c38bc0539a0a8dcb7a0ea500d6afd94d45e6e99.zip |
Merge "hdmi: Set correct S3D configuration on bootup" into dev-2.0
Diffstat (limited to 'sdm')
-rw-r--r-- | sdm/include/private/hw_info_types.h | 3 | ||||
-rw-r--r-- | sdm/libs/core/fb/hw_hdmi.cpp | 23 | ||||
-rw-r--r-- | sdm/libs/core/fb/hw_hdmi.h | 4 |
3 files changed, 16 insertions, 14 deletions
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h index ec1b6e57e..97573c973 100644 --- a/sdm/include/private/hw_info_types.h +++ b/sdm/include/private/hw_info_types.h @@ -158,6 +158,7 @@ struct HWSplitInfo { }; enum HWS3DMode { + kS3DModeInvalid = -1, kS3DModeNone, kS3DModeLR, kS3DModeRL, @@ -184,7 +185,7 @@ struct HWPanelInfo { bool is_pluggable = false; // Panel is pluggable HWSplitInfo split_info; // Panel split configuration char panel_name[256] = {0}; // Panel name - HWS3DMode s3d_mode = kS3DModeNone; // Panel's current s3d mode. + HWS3DMode s3d_mode = kS3DModeInvalid; // Panel's current s3d mode. int panel_max_brightness = 0; // Max panel brightness bool operator !=(const HWPanelInfo &panel_info) { diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp index ec76b4170..1665d2431 100644 --- a/sdm/libs/core/fb/hw_hdmi.cpp +++ b/sdm/libs/core/fb/hw_hdmi.cpp @@ -220,6 +220,12 @@ DisplayError HWHDMI::ReadEDIDInfo() { return kErrorNone; } +void HWHDMI::PopulateHWPanelInfo() { + HWDevice::PopulateHWPanelInfo(); + hw_panel_info_.s3d_mode = active_s3d_mode_; + DLOGI("S3DMode = %d", hw_panel_info_.s3d_mode); +} + DisplayError HWHDMI::GetDisplayAttributes(uint32_t index, HWDisplayAttributes *display_attributes) { DTRACE_SCOPED(); @@ -652,6 +658,10 @@ bool HWHDMI::IsSupportedS3DMode(HWS3DMode s3d_mode) { } DisplayError HWHDMI::SetS3DMode(HWS3DMode s3d_mode) { + if (active_s3d_mode_ == s3d_mode) { + return kErrorNone; + } + if (!IsSupportedS3DMode(s3d_mode)) { DLOGW("S3D mode is not supported s3d_mode = %d", s3d_mode); return kErrorNotSupported; @@ -663,14 +673,6 @@ DisplayError HWHDMI::SetS3DMode(HWS3DMode s3d_mode) { } msm_hdmi_s3d_mode s3d_mdp_mode = it->second; - if (active_mdp_s3d_mode_ == s3d_mdp_mode) { - // HDMI_S3D_SIDE_BY_SIDE is an mdp mapping for kS3DModeLR and kS3DModeRL s3d modes. So no need - // to update the s3d_mode node. hw_panel_info needs to be updated to differentiate these two s3d - // modes in strategy - hw_panel_info_.s3d_mode = s3d_mode; - return kErrorNone; - } - ssize_t length = -1; char s3d_mode_path[kMaxStringLength] = {'\0'}; char s3d_mode_string[kMaxStringLength] = {'\0'}; @@ -690,7 +692,7 @@ DisplayError HWHDMI::SetS3DMode(HWS3DMode s3d_mode) { return kErrorNotSupported; } - active_mdp_s3d_mode_ = s3d_mdp_mode; + active_s3d_mode_ = s3d_mode; hw_panel_info_.s3d_mode = s3d_mode; Sys::close_(s3d_mode_node); @@ -845,9 +847,6 @@ DisplayError HWHDMI::SetRefreshRate(uint32_t refresh_rate) { return error; } -// GetDisplayAttributes(config_index, &display_attributes_); -// UpdateMixerAttributes(); - frame_rate_ = refresh_rate; active_config_index_ = config_index; diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h index 28adc39e6..1be151d7c 100644 --- a/sdm/libs/core/fb/hw_hdmi.h +++ b/sdm/libs/core/fb/hw_hdmi.h @@ -106,6 +106,7 @@ class HWHDMI : public HWDevice { DisplayError GetDynamicFrameRateMode(uint32_t refresh_rate, uint32_t*mode, DynamicFPSData *data, uint32_t *config_index); + void PopulateHWPanelInfo(); uint32_t hdmi_mode_count_; uint32_t hdmi_modes_[256]; // Holds the hdmi timing information. Ex: resolution, fps etc., @@ -114,7 +115,8 @@ class HWHDMI : public HWDevice { uint32_t active_config_index_; std::map<HWS3DMode, msm_hdmi_s3d_mode> s3d_mode_sdm_to_mdp_; std::vector<HWS3DMode> supported_s3d_modes_; - int active_mdp_s3d_mode_ = HDMI_S3D_NONE; + // Reset this variable to ensure valid S3D configuration is set. + HWS3DMode active_s3d_mode_ = kS3DModeInvalid; uint32_t frame_rate_ = 0; }; |