diff options
Diffstat (limited to 'power-8952.c')
-rw-r--r-- | power-8952.c | 240 |
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; } - |