diff --git a/libqdutils/display_config.cpp b/libqdutils/display_config.cpp index e9b30f35..14702238 100644 --- a/libqdutils/display_config.cpp +++ b/libqdutils/display_config.cpp @@ -320,11 +320,12 @@ int getPanelBrightness() { // ---------------------------------------------------------------------------- // Functions for linking dynamically to libqdutils // ---------------------------------------------------------------------------- -extern "C" int minHdcpEncryptionLevelChanged(int dpy) { +extern "C" int minHdcpEncryptionLevelChanged(int dpy, int min_enc_level) { status_t err = (status_t) FAILED_TRANSACTION; sp binder = getBinder(); Parcel inParcel, outParcel; inParcel.writeInt32(dpy); + inParcel.writeInt32(min_enc_level); if(binder != NULL) { err = binder->dispatch(IQService::MIN_HDCP_ENCRYPTION_LEVEL_CHANGED, diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h index 01037b45..d3fc1f52 100644 --- a/sdm/include/core/display_interface.h +++ b/sdm/include/core/display_interface.h @@ -377,9 +377,11 @@ class DisplayInterface { /*! @brief Method to notify display about change in min HDCP encryption level. + @param[in] min_enc_level minimum encryption level value. + @return \link DisplayError \endlink */ - virtual DisplayError OnMinHdcpEncryptionLevelChange() = 0; + virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) = 0; /*! @brief Method to route display API requests to color service. diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp index ad67dd04..b299e984 100644 --- a/sdm/libs/core/display_base.cpp +++ b/sdm/libs/core/display_base.cpp @@ -454,7 +454,7 @@ DisplayError DisplayBase::SetPanelBrightness(int level) { return kErrorNotSupported; } -DisplayError DisplayBase::OnMinHdcpEncryptionLevelChange() { +DisplayError DisplayBase::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { return kErrorNotSupported; } diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h index 2f2c072a..8c7c1b5c 100644 --- a/sdm/libs/core/display_base.h +++ b/sdm/libs/core/display_base.h @@ -65,7 +65,7 @@ class DisplayBase : public DisplayInterface { virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst, bool rotate90); virtual bool IsUnderscanSupported(); virtual DisplayError SetPanelBrightness(int level); - virtual DisplayError OnMinHdcpEncryptionLevelChange(); + virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); virtual DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload, PPDisplayAPIPayload *out_payload, PPPendingParams *pending_action); diff --git a/sdm/libs/core/display_hdmi.cpp b/sdm/libs/core/display_hdmi.cpp index 76deba07..d812f0cf 100644 --- a/sdm/libs/core/display_hdmi.cpp +++ b/sdm/libs/core/display_hdmi.cpp @@ -176,9 +176,9 @@ DisplayError DisplayHDMI::SetPanelBrightness(int level) { return DisplayBase::SetPanelBrightness(level); } -DisplayError DisplayHDMI::OnMinHdcpEncryptionLevelChange() { +DisplayError DisplayHDMI::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { SCOPE_LOCK(locker_); - return hw_intf_->OnMinHdcpEncryptionLevelChange(); + return hw_intf_->OnMinHdcpEncryptionLevelChange(min_enc_level); } int DisplayHDMI::GetBestConfig() { diff --git a/sdm/libs/core/display_hdmi.h b/sdm/libs/core/display_hdmi.h index 2f50a3d0..ce22104e 100644 --- a/sdm/libs/core/display_hdmi.h +++ b/sdm/libs/core/display_hdmi.h @@ -59,7 +59,7 @@ class DisplayHDMI : public DisplayBase, DumpImpl { virtual DisplayError SetRefreshRate(uint32_t refresh_rate); virtual bool IsUnderscanSupported(); virtual DisplayError SetPanelBrightness(int level); - virtual DisplayError OnMinHdcpEncryptionLevelChange(); + virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); virtual void AppendDump(char *buffer, uint32_t length); virtual DisplayError SetCursorPosition(int x, int y); diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp index 590c23ce..d5cde246 100644 --- a/sdm/libs/core/fb/hw_device.cpp +++ b/sdm/libs/core/fb/hw_device.cpp @@ -995,7 +995,7 @@ DisplayError HWDevice::GetMaxCEAFormat(uint32_t *max_cea_format) { return kErrorNotSupported; } -DisplayError HWDevice::OnMinHdcpEncryptionLevelChange() { +DisplayError HWDevice::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { return kErrorNotSupported; } diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h index 138dbda1..09fddc2e 100644 --- a/sdm/libs/core/fb/hw_device.h +++ b/sdm/libs/core/fb/hw_device.h @@ -70,7 +70,7 @@ class HWDevice : public HWInterface { 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(); + virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); virtual DisplayError GetPanelBrightness(int *level); // For HWDevice derivatives diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp index a5fff546..58c5f5cc 100644 --- a/sdm/libs/core/fb/hw_hdmi.cpp +++ b/sdm/libs/core/fb/hw_hdmi.cpp @@ -346,7 +346,7 @@ DisplayError HWHDMI::GetMaxCEAFormat(uint32_t *max_cea_format) { return kErrorNone; } -DisplayError HWHDMI::OnMinHdcpEncryptionLevelChange() { +DisplayError HWHDMI::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { DisplayError error = kErrorNone; int fd = -1; char data[kMaxStringLength] = {'\0'}; @@ -359,8 +359,7 @@ DisplayError HWHDMI::OnMinHdcpEncryptionLevelChange() { return kErrorHardware; } - // write any value (1 here) on this fd to trigger level change. - snprintf(data, sizeof(data), "%d", 1); + snprintf(data, sizeof(data), "%d", min_enc_level); ssize_t err = Sys::pwrite_(fd, data, strlen(data), 0); if (err <= 0) { diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h index c216b8f3..2457ee0c 100644 --- a/sdm/libs/core/fb/hw_hdmi.h +++ b/sdm/libs/core/fb/hw_hdmi.h @@ -48,7 +48,7 @@ class HWHDMI : public HWDevice { 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 OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); virtual DisplayError SetDisplayAttributes(uint32_t index); virtual DisplayError GetConfigIndex(uint32_t mode, uint32_t *index); virtual DisplayError Validate(HWLayers *hw_layers); diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h index 648c3131..5b6ddac0 100644 --- a/sdm/libs/core/hw_interface.h +++ b/sdm/libs/core/hw_interface.h @@ -88,7 +88,7 @@ class HWInterface { 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; + virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) = 0; virtual DisplayError GetPanelBrightness(int *level) = 0; protected: diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp index 099a507d..29a35b2f 100644 --- a/sdm/libs/hwc/hwc_display.cpp +++ b/sdm/libs/hwc/hwc_display.cpp @@ -1209,8 +1209,8 @@ int HWCDisplay::SetCursorPosition(int x, int y) { return 0; } -int HWCDisplay::OnMinHdcpEncryptionLevelChange() { - DisplayError error = display_intf_->OnMinHdcpEncryptionLevelChange(); +int HWCDisplay::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { + DisplayError error = display_intf_->OnMinHdcpEncryptionLevelChange(min_enc_level); if (error != kErrorNone) { DLOGE("Failed. Error = %d", error); return -1; diff --git a/sdm/libs/hwc/hwc_display.h b/sdm/libs/hwc/hwc_display.h index 9154225d..0aab57ba 100644 --- a/sdm/libs/hwc/hwc_display.h +++ b/sdm/libs/hwc/hwc_display.h @@ -59,7 +59,7 @@ class HWCDisplay : public DisplayEventHandler { virtual void GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels); virtual void GetPanelResolution(uint32_t *x_pixels, uint32_t *y_pixels); virtual int SetDisplayStatus(uint32_t display_status); - virtual int OnMinHdcpEncryptionLevelChange(); + virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); virtual int Perform(uint32_t operation, ...); virtual int SetCursorPosition(int x, int y); virtual void SetSecureDisplay(bool secure_display_active); diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp index b755ab82..e90b1811 100644 --- a/sdm/libs/hwc/hwc_session.cpp +++ b/sdm/libs/hwc/hwc_session.cpp @@ -1058,6 +1058,7 @@ android::status_t HWCSession::OnMinHdcpEncryptionLevelChange(const android::Parc android::Parcel *output_parcel) { int ret = -EINVAL; uint32_t display_id = UINT32(input_parcel->readInt32()); + uint32_t min_enc_level = UINT32(input_parcel->readInt32()); DLOGI("Display %d", display_id); @@ -1068,7 +1069,7 @@ android::status_t HWCSession::OnMinHdcpEncryptionLevelChange(const android::Parc } else if (!hwc_display_[display_id]) { DLOGW("Display is not connected"); } else { - ret = hwc_display_[display_id]->OnMinHdcpEncryptionLevelChange(); + ret = hwc_display_[display_id]->OnMinHdcpEncryptionLevelChange(min_enc_level); } output_parcel->writeInt32(ret);