From 7ff6620596425c0884ec4a224ef13aa7fce91f4d Mon Sep 17 00:00:00 2001 From: Zhao Wei Liew Date: Tue, 19 Jul 2016 19:57:06 +0800 Subject: [PATCH] power: Simplify soc_id checks - Get soc_id in a common util function - Return boolean values for the target-specific soc_id checks Change-Id: I038c435d28855859f36566de7acf881037d070f2 --- power-660.c | 33 ++++++++++++++------------------- power-8937.c | 33 ++++++++++++++------------------- power-8953.c | 33 ++++++++++++++------------------- utils.c | 24 ++++++++++++++++++++++++ utils.h | 3 +++ 5 files changed, 69 insertions(+), 57 deletions(-) diff --git a/power-660.c b/power-660.c index 79c3d1f..c529d15 100644 --- a/power-660.c +++ b/power-660.c @@ -56,25 +56,20 @@ static int video_encode_hint_sent; static void process_video_encode_hint(void* metadata); -/* Returns true is target is SDM630/SDM455 else false*/ -static bool is_target_SDM630() { - int fd; - bool is_target_SDM630 = false; - char buf[10] = {0}; - fd = open("/sys/devices/soc0/soc_id", O_RDONLY); - if (fd >= 0) { - if (read(fd, buf, sizeof(buf) - 1) == -1) { - ALOGW("Unable to read soc_id"); - is_target_SDM630 = false; - } else { - int soc_id = atoi(buf); - if (soc_id == 318 || soc_id == 327 || soc_id == 385) { - is_target_SDM630 = true; /* Above SOCID for SDM630/SDM455 */ - } - } - } - close(fd); - return is_target_SDM630; +/** + * If target is SDM630/SDM455: + * return true + * else: + * return false + */ +static bool is_target_SDM630(void) { + static bool is_SDM630 = false; + int soc_id; + + soc_id = get_soc_id(); + if (soc_id == 318 || soc_id == 327 || soc_id == 385) is_SDM630 = true; + + return is_SDM630; } int power_hint_override(power_hint_t hint, void* data) { diff --git a/power-8937.c b/power-8937.c index cdcdbbd..ea9f43a 100644 --- a/power-8937.c +++ b/power-8937.c @@ -55,25 +55,20 @@ static int display_hint_sent; static int video_encode_hint_sent; static void process_video_encode_hint(void* metadata); -static bool is_target_SDM439() /* Returns value=1 if target is Hathi else value 0 */ -{ - int fd; - bool is_target_SDM439 = false; - char buf[10] = {0}; - fd = open("/sys/devices/soc0/soc_id", O_RDONLY); - if (fd >= 0) { - if (read(fd, buf, sizeof(buf) - 1) == -1) { - ALOGW("Unable to read soc_id"); - is_target_SDM439 = false; - } else { - int soc_id = atoi(buf); - if (soc_id == 353 || soc_id == 363 || soc_id == 354 || soc_id == 364) { - is_target_SDM439 = true; /* Above SOCID for SDM439/429 */ - } - } - } - close(fd); - return is_target_SDM439; +/** + * If target is SDM439/429: + * return true + * else: + * return false + */ +static bool is_target_SDM439(void) { + static bool is_SDM439 = false; + int soc_id; + + soc_id = get_soc_id(); + if (soc_id == 353 || soc_id == 363 || soc_id == 354 || soc_id == 364) is_SDM439 = true; + + return is_SDM439; } int power_hint_override(power_hint_t hint, void* data) { diff --git a/power-8953.c b/power-8953.c index 221e7fe..b2d7d12 100644 --- a/power-8953.c +++ b/power-8953.c @@ -56,25 +56,20 @@ static int video_encode_hint_sent; static void process_video_encode_hint(void* metadata); -static bool is_target_SDM632() /* Returns value=632 if target is SDM632 else value 0 */ -{ - int fd; - bool is_target_SDM632 = false; - char buf[10] = {0}; - fd = open("/sys/devices/soc0/soc_id", O_RDONLY); - if (fd >= 0) { - if (read(fd, buf, sizeof(buf) - 1) == -1) { - ALOGW("Unable to read soc_id"); - is_target_SDM632 = false; - } else { - int soc_id = atoi(buf); - if (soc_id == 349 || soc_id == 350) { - is_target_SDM632 = true; /* Above SOCID for SDM632 */ - } - } - } - close(fd); - return is_target_SDM632; +/** + * If target is SDM632: + * return true + * else: + * return false + */ +static bool is_target_SDM632(void) { + static bool is_SDM632 = false; + int soc_id; + + soc_id = get_soc_id(); + if (soc_id == 349 || soc_id == 350) is_SDM632 = true; + + return is_SDM632; } int power_hint_override(power_hint_t hint, void* data) { diff --git a/utils.c b/utils.c index dfd5127..409fcb1 100644 --- a/utils.c +++ b/utils.c @@ -43,6 +43,9 @@ #define LOG_TAG "QTI PowerHAL" #include +#define SOC_ID_0 "/sys/devices/soc0/soc_id" +#define SOC_ID_1 "/sys/devices/system/soc/soc0/id" + char scaling_gov_path[4][80] = {"sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "sys/devices/system/cpu/cpu1/cpufreq/scaling_governor", "sys/devices/system/cpu/cpu2/cpufreq/scaling_governor", @@ -341,3 +344,24 @@ void undo_initial_hint_action() { } } } + +int get_soc_id(void) { + int fd; + int soc_id = -1; + char buf[10] = {0}; + + if (!access(SOC_ID_0, F_OK)) + fd = open(SOC_ID_0, O_RDONLY); + else + fd = open(SOC_ID_1, O_RDONLY); + + if (fd >= 0) { + if (read(fd, buf, sizeof(buf) - 1) == -1) + ALOGW("Unable to read soc_id"); + else + soc_id = atoi(buf); + } + + close(fd); + return soc_id; +} diff --git a/utils.h b/utils.h index 2738400..7d6f84b 100644 --- a/utils.h +++ b/utils.h @@ -47,4 +47,7 @@ void release_request(int lock_handle); void interaction(int duration, int num_args, int opt_list[]); int interaction_with_handle(int lock_handle, int duration, int num_args, int opt_list[]); int perf_hint_enable(int hint_id, int duration); + +int get_soc_id(void); + PropVal perf_get_property(const char* prop, const char* def_val);