summaryrefslogtreecommitdiffstats
path: root/power-8952.c
diff options
context:
space:
mode:
Diffstat (limited to 'power-8952.c')
-rw-r--r--power-8952.c240
1 files changed, 104 insertions, 136 deletions
diff --git a/power-8952.c b/power-8952.c
index ec23dd3..9ae1292 100644
--- a/power-8952.c
+++ b/power-8952.c
@@ -29,33 +29,33 @@
#define LOG_NIDEBUG 0
+#include <dlfcn.h>
#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <fcntl.h>
-#include <dlfcn.h>
#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <unistd.h>
#define LOG_TAG "QTI PowerHAL"
-#include <log/log.h>
#include <hardware/hardware.h>
#include <hardware/power.h>
+#include <log/log.h>
-#include "utils.h"
-#include "metadata-defs.h"
#include "hint-data.h"
+#include "metadata-defs.h"
#include "performance.h"
#include "power-common.h"
+#include "utils.h"
-#define MIN_VAL(X,Y) ((X>Y)?(Y):(X))
+#define MIN_VAL(X, Y) ((X > Y) ? (Y) : (X))
static int saved_interactive_mode = -1;
static int display_hint_sent;
static int video_encode_hint_sent;
static int camera_hint_ref_count;
-static void process_video_encode_hint(void *metadata);
+static void process_video_encode_hint(void* metadata);
static int display_fd;
#define SYS_DISPLAY_PWR "/sys/kernel/hbtp/display_pwr"
@@ -80,14 +80,11 @@ static bool is_target_SDM439() /* Returns value=1 if target is Hathi else value
return is_target_SDM439;
}
-int power_hint_override(power_hint_t hint, void *data)
-{
-
- switch(hint) {
+int power_hint_override(power_hint_t hint, void* data) {
+ switch (hint) {
case POWER_HINT_VSYNC:
break;
- case POWER_HINT_VIDEO_ENCODE:
- {
+ case POWER_HINT_VIDEO_ENCODE: {
process_video_encode_hint(data);
return HINT_HANDLED;
}
@@ -95,25 +92,24 @@ int power_hint_override(power_hint_t hint, void *data)
return HINT_NONE;
}
-int set_interactive_override(int on)
-{
+int set_interactive_override(int on) {
char governor[80];
char tmp_str[NODE_MAX];
struct video_encode_metadata_t video_encode_metadata;
int rc = 0;
- static const char *display_on = "1";
- static const char *display_off = "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");
- if (get_scaling_governor_check_cores(governor, sizeof(governor),CPU0) == -1) {
- if (get_scaling_governor_check_cores(governor, sizeof(governor),CPU1) == -1) {
- if (get_scaling_governor_check_cores(governor, sizeof(governor),CPU2) == -1) {
- if (get_scaling_governor_check_cores(governor, sizeof(governor),CPU3) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU0) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU1) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU2) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU3) == -1) {
ALOGE("Can't obtain scaling governor.");
return HINT_HANDLED;
}
@@ -123,69 +119,62 @@ int set_interactive_override(int on)
if (!on) {
/* Display off. */
- if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
- (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
- int resource_values[] = {INT_OP_CLUSTER0_TIMER_RATE, BIG_LITTLE_TR_MS_50,
- INT_OP_CLUSTER1_TIMER_RATE, BIG_LITTLE_TR_MS_50,
- INT_OP_NOTIFY_ON_MIGRATE, 0x00};
+ if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
+ (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
+ int resource_values[] = {INT_OP_CLUSTER0_TIMER_RATE, BIG_LITTLE_TR_MS_50,
+ INT_OP_CLUSTER1_TIMER_RATE, BIG_LITTLE_TR_MS_50,
+ INT_OP_NOTIFY_ON_MIGRATE, 0x00};
- if (!display_hint_sent) {
- perform_hint_action(DISPLAY_STATE_HINT_ID,
- resource_values, sizeof(resource_values)/sizeof(resource_values[0]));
- display_hint_sent = 1;
- }
- } /* Perf time rate set for CORE0,CORE4 8952 target*/
+ if (!display_hint_sent) {
+ perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
+ sizeof(resource_values) / sizeof(resource_values[0]));
+ display_hint_sent = 1;
+ }
+ } /* Perf time rate set for CORE0,CORE4 8952 target*/
} else {
/* Display on. */
- if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
- (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
-
- undo_hint_action(DISPLAY_STATE_HINT_ID);
- display_hint_sent = 0;
- }
- }
+ if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
+ (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
+ undo_hint_action(DISPLAY_STATE_HINT_ID);
+ display_hint_sent = 0;
+ }
+ }
saved_interactive_mode = !!on;
- set_i_count ++;
+ 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
+ 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));
+ strerror_r(errno, err_buf, sizeof(err_buf));
ALOGE("Error opening %s: %s\n", SYS_DISPLAY_PWR, err_buf);
return HINT_HANDLED;
- }
- else
+ } 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 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);
- }
+ } 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;
}
/* Video Encode Hint */
-static void process_video_encode_hint(void *metadata)
-{
+static void process_video_encode_hint(void* metadata) {
char governor[80] = {0};
int resource_values[20] = {0};
int num_resources = 0;
@@ -193,19 +182,15 @@ static void process_video_encode_hint(void *metadata)
ALOGI("Got process_video_encode_hint");
- if (get_scaling_governor_check_cores(governor,
- sizeof(governor),CPU0) == -1) {
- if (get_scaling_governor_check_cores(governor,
- sizeof(governor),CPU1) == -1) {
- if (get_scaling_governor_check_cores(governor,
- sizeof(governor),CPU2) == -1) {
- if (get_scaling_governor_check_cores(governor,
- sizeof(governor),CPU3) == -1) {
- ALOGE("Can't obtain scaling governor.");
- return;
- }
- }
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU0) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU1) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU2) == -1) {
+ if (get_scaling_governor_check_cores(governor, sizeof(governor), CPU3) == -1) {
+ ALOGE("Can't obtain scaling governor.");
+ return;
+ }
}
+ }
}
/* Initialize encode metadata struct fields. */
@@ -214,8 +199,7 @@ static void process_video_encode_hint(void *metadata)
video_encode_metadata.hint_id = DEFAULT_VIDEO_ENCODE_HINT_ID;
if (metadata) {
- if (parse_video_encode_metadata((char *)metadata,
- &video_encode_metadata) == -1) {
+ if (parse_video_encode_metadata((char*)metadata, &video_encode_metadata) == -1) {
ALOGE("Error occurred while parsing metadata.");
return;
}
@@ -224,93 +208,77 @@ static void process_video_encode_hint(void *metadata)
}
if (video_encode_metadata.state == 1) {
- if((strncmp(governor, SCHEDUTIL_GOVERNOR,
- strlen(SCHEDUTIL_GOVERNOR)) == 0) &&
+ if ((strncmp(governor, SCHEDUTIL_GOVERNOR, strlen(SCHEDUTIL_GOVERNOR)) == 0) &&
(strlen(governor) == strlen(SCHEDUTIL_GOVERNOR))) {
- if(is_target_SDM439()) {
+ if (is_target_SDM439()) {
/* sample_ms = 10mS
- * SLB for Core0 = -6
- * SLB for Core1 = -6
- * SLB for Core2 = -6
- * SLB for Core3 = -6
- * hispeed load = 95
- * hispeed freq = 998Mhz */
- int res[] = {0x41820000, 0xa,
- 0x40c68100, 0xfffffffa,
- 0x40c68110, 0xfffffffa,
- 0x40c68120, 0xfffffffa,
- 0x40c68130, 0xfffffffa,
- 0x41440100, 0x5f,
- 0x4143c100, 0x3e6,
- };
+ * SLB for Core0 = -6
+ * SLB for Core1 = -6
+ * SLB for Core2 = -6
+ * SLB for Core3 = -6
+ * hispeed load = 95
+ * hispeed freq = 998Mhz */
+ int res[] = {
+ 0x41820000, 0xa, 0x40c68100, 0xfffffffa, 0x40c68110,
+ 0xfffffffa, 0x40c68120, 0xfffffffa, 0x40c68130, 0xfffffffa,
+ 0x41440100, 0x5f, 0x4143c100, 0x3e6,
+ };
memcpy(resource_values, res, MIN_VAL(sizeof(resource_values), sizeof(res)));
- num_resources = sizeof(res)/sizeof(res[0]);
+ num_resources = sizeof(res) / sizeof(res[0]);
camera_hint_ref_count++;
if (camera_hint_ref_count == 1) {
if (!video_encode_hint_sent) {
- perform_hint_action(video_encode_metadata.hint_id,
- resource_values, num_resources);
+ perform_hint_action(video_encode_metadata.hint_id, resource_values,
+ num_resources);
video_encode_hint_sent = 1;
}
}
- }
- else {
+ } else {
/* sample_ms = 10mS */
- int res[] = {0x41820000, 0xa,
- };
+ int res[] = {
+ 0x41820000,
+ 0xa,
+ };
memcpy(resource_values, res, MIN_VAL(sizeof(resource_values), sizeof(res)));
- num_resources = sizeof(res)/sizeof(res[0]);
+ num_resources = sizeof(res) / sizeof(res[0]);
camera_hint_ref_count++;
if (camera_hint_ref_count == 1) {
if (!video_encode_hint_sent) {
- perform_hint_action(video_encode_metadata.hint_id,
- resource_values, num_resources);
+ perform_hint_action(video_encode_metadata.hint_id, resource_values,
+ num_resources);
video_encode_hint_sent = 1;
}
}
}
- }
- else if ((strncmp(governor, INTERACTIVE_GOVERNOR,
- strlen(INTERACTIVE_GOVERNOR)) == 0) &&
- (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
- /* Sched_load and migration_notif*/
- int res[] = {INT_OP_CLUSTER0_USE_SCHED_LOAD,
- 0x1,
- INT_OP_CLUSTER1_USE_SCHED_LOAD,
- 0x1,
- INT_OP_CLUSTER0_USE_MIGRATION_NOTIF,
- 0x1,
- INT_OP_CLUSTER1_USE_MIGRATION_NOTIF,
- 0x1,
- INT_OP_CLUSTER0_TIMER_RATE,
- BIG_LITTLE_TR_MS_40,
- INT_OP_CLUSTER1_TIMER_RATE,
- BIG_LITTLE_TR_MS_40
- };
+ } else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
+ (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
+ /* Sched_load and migration_notif*/
+ int res[] = {INT_OP_CLUSTER0_USE_SCHED_LOAD, 0x1,
+ INT_OP_CLUSTER1_USE_SCHED_LOAD, 0x1,
+ INT_OP_CLUSTER0_USE_MIGRATION_NOTIF, 0x1,
+ INT_OP_CLUSTER1_USE_MIGRATION_NOTIF, 0x1,
+ INT_OP_CLUSTER0_TIMER_RATE, BIG_LITTLE_TR_MS_40,
+ INT_OP_CLUSTER1_TIMER_RATE, BIG_LITTLE_TR_MS_40};
memcpy(resource_values, res, MIN_VAL(sizeof(resource_values), sizeof(res)));
- num_resources = sizeof(res)/sizeof(res[0]);
+ num_resources = sizeof(res) / sizeof(res[0]);
camera_hint_ref_count++;
if (!video_encode_hint_sent) {
- perform_hint_action(video_encode_metadata.hint_id,
- resource_values,num_resources);
+ perform_hint_action(video_encode_metadata.hint_id, resource_values, num_resources);
video_encode_hint_sent = 1;
}
}
} else if (video_encode_metadata.state == 0) {
- if (((strncmp(governor, INTERACTIVE_GOVERNOR,
- strlen(INTERACTIVE_GOVERNOR)) == 0) &&
- (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) ||
- ((strncmp(governor, SCHEDUTIL_GOVERNOR,
- strlen(SCHEDUTIL_GOVERNOR)) == 0) &&
- (strlen(governor) == strlen(SCHEDUTIL_GOVERNOR)))) {
+ if (((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
+ (strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) ||
+ ((strncmp(governor, SCHEDUTIL_GOVERNOR, strlen(SCHEDUTIL_GOVERNOR)) == 0) &&
+ (strlen(governor) == strlen(SCHEDUTIL_GOVERNOR)))) {
camera_hint_ref_count--;
if (!camera_hint_ref_count) {
undo_hint_action(video_encode_metadata.hint_id);
video_encode_hint_sent = 0;
}
- return ;
+ return;
}
}
return;
}
-