summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvhunac <vhunac@codeaurora.org>2018-02-16 12:24:32 +0530
committerDavid Ng <dave@codeaurora.org>2018-06-04 15:14:56 -0700
commitba74c442d4342932d0ac506a19c88560b65a00da (patch)
treef170303d0d49ba6af12b1076f23133209694e4a1
parent472e576c9fefa13ed7d511727a714846d706b83e (diff)
downloadvendor_qcom_opensource_power-ba74c442d4342932d0ac506a19c88560b65a00da.tar.gz
vendor_qcom_opensource_power-ba74c442d4342932d0ac506a19c88560b65a00da.tar.bz2
vendor_qcom_opensource_power-ba74c442d4342932d0ac506a19c88560b65a00da.zip
power: Turn on/off display
PowerHAL writes to a sysfs node when it gets display on/off notification. Change-Id: I8c3437908f992aec23336ea104c6ac091a961205
-rw-r--r--power-8953.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/power-8953.c b/power-8953.c
index 09df941..805fb8d 100644
--- a/power-8953.c
+++ b/power-8953.c
@@ -58,6 +58,9 @@ static int camera_hint_ref_count;
static void process_video_encode_hint(void *metadata);
//static void process_cam_preview_hint(void *metadata);
+static int display_fd;
+#define SYS_DISPLAY_PWR "/sys/kernel/hbtp/display_pwr"
+
int power_hint_override(struct power_module *module, power_hint_t hint,
void *data)
{
@@ -79,7 +82,13 @@ int set_interactive_override(struct power_module *module, int on)
char governor[80];
char tmp_str[NODE_MAX];
struct video_encode_metadata_t video_encode_metadata;
- int rc;
+ int rc = 0;
+
+ static const char *display_on = "1";
+ static const char *display_off = "0";
+ char err_buf[80];
+ static int init_interactive_hint = 0;
+ static int set_i_count = 0;
ALOGI("Got set_interactive hint");
@@ -118,6 +127,40 @@ int set_interactive_override(struct power_module *module, int on)
}
}
saved_interactive_mode = !!on;
+
+ set_i_count ++;
+ ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
+
+ if (init_interactive_hint == 0)
+ {
+ //First time the display is turned off
+ display_fd = TEMP_FAILURE_RETRY(open(SYS_DISPLAY_PWR, O_RDWR));
+ if (display_fd < 0) {
+ strerror_r(errno,err_buf,sizeof(err_buf));
+ ALOGE("Error opening %s: %s\n", SYS_DISPLAY_PWR, err_buf);
+ return HINT_HANDLED;
+ }
+ else
+ init_interactive_hint = 1;
+ }
+ else
+ if (!on ) {
+ /* Display off. */
+ rc = TEMP_FAILURE_RETRY(write(display_fd, display_off, strlen(display_off)));
+ if (rc < 0) {
+ strerror_r(errno,err_buf,sizeof(err_buf));
+ ALOGE("Error writing %s to %s: %s\n", display_off, SYS_DISPLAY_PWR, err_buf);
+ }
+ }
+ else {
+ /* Display on */
+ rc = TEMP_FAILURE_RETRY(write(display_fd, display_on, strlen(display_on)));
+ if (rc < 0) {
+ strerror_r(errno,err_buf,sizeof(err_buf));
+ ALOGE("Error writing %s to %s: %s\n", display_on, SYS_DISPLAY_PWR, err_buf);
+ }
+ }
+
return HINT_HANDLED;
}