hwc2: Add binder command to switch modes
Use adb shell service call display.qservice 34 i32 <disp> i32 <mode>
to switch the display mode. Only valid modes in graphics.h that are
enumerated in the calibration XML will work
Change-Id: I450ea6b8ba8001d8458ea8503098f7056ff958cf
CRs-Fixed: 1034841
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index 49467db..d25a06d 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -73,6 +73,7 @@
MIN_HDCP_ENCRYPTION_LEVEL_CHANGED = 31,
GET_BW_TRANSACTION_STATUS = 32, //Client can query BW transaction status.
SET_LAYER_MIXER_RESOLUTION = 33, // Enables client to set layer mixer resolution.
+ SET_COLOR_MODE = 34, // Overrides the QDCM mode on the display
COMMAND_LIST_END = 400,
};
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index bc186ad..91e57c5 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -845,9 +845,13 @@
status = GetBWTransactionStatus(input_parcel, output_parcel);
break;
- case qService::IQService::SET_LAYER_MIXER_RESOLUTION:
- status = SetMixerResolution(input_parcel);
- break;
+ case qService::IQService::SET_LAYER_MIXER_RESOLUTION:
+ status = SetMixerResolution(input_parcel);
+ break;
+
+ case qService::IQService::SET_COLOR_MODE:
+ status = SetColorModeOverride(input_parcel);
+ break;
default:
DLOGW("QService command = %d is not supported", command);
@@ -1212,6 +1216,16 @@
return 0;
}
+android::status_t HWCSession::SetColorModeOverride(const android::Parcel *input_parcel) {
+ auto display = static_cast<hwc2_display_t >(input_parcel->readInt32());
+ auto mode = static_cast<android_color_mode_t>(input_parcel->readInt32());
+ auto device = static_cast<hwc2_device_t *>(this);
+ auto err = CallDisplayFunction(device, display, &HWCDisplay::SetColorMode, mode);
+ if (err != HWC2_ERROR_NONE)
+ return -EINVAL;
+ return 0;
+}
+
void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
int type = input_parcel->readInt32();
bool enable = (input_parcel->readInt32() > 0);
diff --git a/sdm/libs/hwc2/hwc_session.h b/sdm/libs/hwc2/hwc_session.h
index 145f51c..6af9da5 100644
--- a/sdm/libs/hwc2/hwc_session.h
+++ b/sdm/libs/hwc2/hwc_session.h
@@ -166,6 +166,8 @@
android::Parcel *output_parcel);
android::status_t SetMixerResolution(const android::Parcel *input_parcel);
+ android::status_t SetColorModeOverride(const android::Parcel *input_parcel);
+
static Locker locker_;
CoreInterface *core_intf_ = NULL;
HWCDisplay *hwc_display_[HWC_NUM_DISPLAY_TYPES] = {NULL};