Merge "sdm:fb: Add Mixer GC set functionality"
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index 16ea704..c877d06 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -59,7 +59,7 @@
/* Enable/Disable/Set refresh rate dynamically */
CONFIGURE_DYN_REFRESH_RATE = 18,
SET_PARTIAL_UPDATE = 19, // Preference on partial update feature
- TOGGLE_SCREEN_UPDATE = 20, // Provides ability to disable screen updates
+ CONTROL_BACKLIGHT = 20, // Provides ability to control backlight
SET_FRAME_DUMP_CONFIG = 21, // Provides ability to set the frame dump config
SET_S3D_MODE = 22, // Set the 3D mode as specified in msm_hdmi_modes.h
CONNECT_HDMI_CLIENT = 23, // Connect HDMI CEC HAL Client
diff --git a/libqservice/QServiceUtils.h b/libqservice/QServiceUtils.h
index 62ee0d1..b677188 100644
--- a/libqservice/QServiceUtils.h
+++ b/libqservice/QServiceUtils.h
@@ -74,8 +74,9 @@
return sendSingleParam(qService::IQService::SCREEN_REFRESH, 1);
}
+// TODO(user): Need to rename this wrapper name
inline android::status_t toggleScreenUpdate(uint32_t on) {
- return sendSingleParam(qService::IQService::TOGGLE_SCREEN_UPDATE, on);
+ return sendSingleParam(qService::IQService::CONTROL_BACKLIGHT, on);
}
inline android::status_t setPartialUpdate(uint32_t enable) {
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 878ff4c..885a732 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -503,6 +503,10 @@
case qService::IQService::SET_VIEW_FRAME:
break;
+ case qService::IQService::CONTROL_BACKLIGHT:
+ status = ControlBackLight(input_parcel);
+ break;
+
case qService::IQService::QDCM_SVC_CMDS:
status = QdcmCMDHandler(*input_parcel, output_parcel);
break;
@@ -515,6 +519,45 @@
return status;
}
+android::status_t HWCSession::ControlBackLight(const android::Parcel *input_parcel) {
+ uint32_t display_status = UINT32(input_parcel->readInt32());
+ HWCDisplay *display = hwc_display_[HWC_DISPLAY_PRIMARY];
+
+ DLOGI("Primary Display display_status = %d", display_status);
+
+ int fd = open("/sys/class/leds/lcd-backlight/brightness", O_RDWR);
+ const char *bl_brightness = "0";
+
+ if (fd < 0) {
+ DLOGE("unable to open brightness node err = %d errstr = %s", errno, strerror(errno));
+ return -1;
+ }
+
+ if (display_status == 0) {
+ // Read backlight and store it internally. Set backlight to 0 on primary.
+ if (read(fd, brightness_, sizeof(brightness_)) > 0) {
+ DLOGI("backlight brightness is %s", brightness_);
+ ssize_t ret = write(fd, bl_brightness, sizeof(bl_brightness));
+ if (ret < 0) {
+ DLOGE("Failed to write backlight node err = %d errstr = %s", errno, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ }
+ } else {
+ // Restore backlight to original value.
+ ssize_t ret = write(fd, brightness_, sizeof(brightness_));
+ if (ret < 0) {
+ DLOGE("Failed to write backlight node err = %d errstr = %s", errno, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ }
+ close(fd);
+
+ return display->SetDisplayStatus(display_status);
+}
+
android::status_t HWCSession::SetSecondaryDisplayStatus(const android::Parcel *input_parcel) {
uint32_t display_id = UINT32(input_parcel->readInt32());
uint32_t display_status = UINT32(input_parcel->readInt32());
diff --git a/sdm/libs/hwc/hwc_session.h b/sdm/libs/hwc/hwc_session.h
index b3cbb70..c8550d5 100644
--- a/sdm/libs/hwc/hwc_session.h
+++ b/sdm/libs/hwc/hwc_session.h
@@ -87,6 +87,7 @@
android::status_t SetMaxMixerStages(const android::Parcel *input_parcel);
android::status_t SetDisplayMode(const android::Parcel *input_parcel);
android::status_t SetSecondaryDisplayStatus(const android::Parcel *input_parcel);
+ android::status_t ControlBackLight(const android::Parcel *input_parcel);
android::status_t ConfigureRefreshRate(const android::Parcel *input_parcel);
android::status_t QdcmCMDHandler(const android::Parcel &in, android::Parcel *out);
@@ -100,8 +101,8 @@
const char *uevent_thread_name_;
HWCBufferAllocator *buffer_allocator_;
HWCBufferSyncHandler *buffer_sync_handler_;
-
HWCColorManager *color_mgr_;
+ char brightness_[64];
};
} // namespace sdm