sdm: Add support for minimum encryption level settings for HDCP.
- Add min_enc_level parameter in minHdcpEncryptionLevelChanged API.
Change-Id: I4c6ddfb7c0178ce547ce7aa357f86f0320d35208
diff --git a/libqdutils/display_config.cpp b/libqdutils/display_config.cpp
index e9b30f3..1470223 100644
--- a/libqdutils/display_config.cpp
+++ b/libqdutils/display_config.cpp
@@ -320,11 +320,12 @@
// ----------------------------------------------------------------------------
// 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<IQService> 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 01037b4..d3fc1f5 100644
--- a/sdm/include/core/display_interface.h
+++ b/sdm/include/core/display_interface.h
@@ -377,9 +377,11 @@
/*! @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 ad67dd0..b299e98 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -454,7 +454,7 @@
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 2f2c072..8c7c1b5 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -65,7 +65,7 @@
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 76deba0..d812f0c 100644
--- a/sdm/libs/core/display_hdmi.cpp
+++ b/sdm/libs/core/display_hdmi.cpp
@@ -176,9 +176,9 @@
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 2f50a3d..ce22104 100644
--- a/sdm/libs/core/display_hdmi.h
+++ b/sdm/libs/core/display_hdmi.h
@@ -59,7 +59,7 @@
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 590c23c..d5cde24 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -995,7 +995,7 @@
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 138dbda..09fddc2 100644
--- a/sdm/libs/core/fb/hw_device.h
+++ b/sdm/libs/core/fb/hw_device.h
@@ -70,7 +70,7 @@
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 a5fff54..58c5f5c 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -346,7 +346,7 @@
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 @@
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 c216b8f..2457ee0 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -48,7 +48,7 @@
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 648c313..5b6ddac 100644
--- a/sdm/libs/core/hw_interface.h
+++ b/sdm/libs/core/hw_interface.h
@@ -88,7 +88,7 @@
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 099a507..29a35b2 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -1209,8 +1209,8 @@
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 9154225..0aab57b 100644
--- a/sdm/libs/hwc/hwc_display.h
+++ b/sdm/libs/hwc/hwc_display.h
@@ -59,7 +59,7 @@
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 b755ab8..e90b181 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -1058,6 +1058,7 @@
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 @@
} 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);