sdm710-common: power: Clean up code and add generic hint handling
Removed unused code and added generic hint handling to power.c file, does not need to be device specific anymore. Change-Id: I0d4e2a73de0ce4d3735314d2e49ba58c23eb313c Signed-off-by: SamarV-121 <samarvispute121@gmail.com>
This commit is contained in:
parent
d735112eeb
commit
b12655e6b3
3 changed files with 36 additions and 333 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2013, 2015, 2017, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012, 2013, 2015, 2017-2018, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -50,8 +50,16 @@
|
||||||
#define LAUNCH_HINT AOSP_DELTA + POWER_HINT_LAUNCH
|
#define LAUNCH_HINT AOSP_DELTA + POWER_HINT_LAUNCH
|
||||||
#define DISABLE_TOUCH_HINT AOSP_DELTA + POWER_HINT_DISABLE_TOUCH
|
#define DISABLE_TOUCH_HINT AOSP_DELTA + POWER_HINT_DISABLE_TOUCH
|
||||||
|
|
||||||
|
//update NUM_HINTS if hints are added to AOSP
|
||||||
|
#define NUM_HINTS (POWER_HINT_DISABLE_TOUCH +1)
|
||||||
|
|
||||||
#define VR_MODE_SUSTAINED_PERF_HINT (0x1301)
|
#define VR_MODE_SUSTAINED_PERF_HINT (0x1301)
|
||||||
|
|
||||||
|
struct hint_handles{
|
||||||
|
int handle;
|
||||||
|
int ref_count;
|
||||||
|
};
|
||||||
|
|
||||||
struct hint_data {
|
struct hint_data {
|
||||||
unsigned long hint_id; /* This is our key. */
|
unsigned long hint_id; /* This is our key. */
|
||||||
unsigned long perflock_handle;
|
unsigned long perflock_handle;
|
||||||
|
|
354
power/power.c
354
power/power.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -44,19 +44,11 @@
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
|
|
||||||
#include "hint-data.h"
|
#include "hint-data.h"
|
||||||
#include "metadata-defs.h"
|
|
||||||
#include "performance.h"
|
#include "performance.h"
|
||||||
#include "power-common.h"
|
#include "power-common.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
static int saved_dcvs_cpu0_slack_max = -1;
|
static struct hint_handles handles[NUM_HINTS];
|
||||||
static int saved_dcvs_cpu0_slack_min = -1;
|
|
||||||
static int saved_mpdecision_slack_max = -1;
|
|
||||||
static int saved_mpdecision_slack_min = -1;
|
|
||||||
static int saved_interactive_mode = -1;
|
|
||||||
static int slack_node_rw_failed = 0;
|
|
||||||
static int display_hint_sent;
|
|
||||||
int display_boost;
|
|
||||||
|
|
||||||
static int power_device_open(const hw_module_t* module, const char* name, hw_device_t** device);
|
static int power_device_open(const hw_module_t* module, const char* name, hw_device_t** device);
|
||||||
|
|
||||||
|
@ -65,125 +57,11 @@ static struct hw_module_methods_t power_module_methods = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void power_init(struct power_module* module) {
|
static void power_init(struct power_module* module) {
|
||||||
ALOGI("QCOM power HAL initing.");
|
ALOGI("Initing");
|
||||||
|
|
||||||
int fd;
|
for (int i = 0; i < NUM_HINTS; i++) {
|
||||||
char buf[10] = {0};
|
handles[i].handle = 0;
|
||||||
|
handles[i].ref_count = 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");
|
|
||||||
} else {
|
|
||||||
int soc_id = atoi(buf);
|
|
||||||
if (soc_id == 194 || (soc_id >= 208 && soc_id <= 218) || soc_id == 178) {
|
|
||||||
display_boost = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void process_video_decode_hint(void* metadata) {
|
|
||||||
char governor[80];
|
|
||||||
struct video_decode_metadata_t video_decode_metadata;
|
|
||||||
|
|
||||||
if (get_scaling_governor(governor, sizeof(governor)) == -1) {
|
|
||||||
ALOGE("Can't obtain scaling governor.");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (metadata) {
|
|
||||||
ALOGI("Processing video decode hint. Metadata: %s", (char*)metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize encode metadata struct fields. */
|
|
||||||
memset(&video_decode_metadata, 0, sizeof(struct video_decode_metadata_t));
|
|
||||||
video_decode_metadata.state = -1;
|
|
||||||
video_decode_metadata.hint_id = DEFAULT_VIDEO_DECODE_HINT_ID;
|
|
||||||
|
|
||||||
if (metadata) {
|
|
||||||
if (parse_video_decode_metadata((char*)metadata, &video_decode_metadata) == -1) {
|
|
||||||
ALOGE("Error occurred while parsing metadata.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (video_decode_metadata.state == 1) {
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
int resource_values[] = {THREAD_MIGRATION_SYNC_OFF};
|
|
||||||
|
|
||||||
perform_hint_action(video_decode_metadata.hint_id, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
} else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
|
|
||||||
int resource_values[] = {TR_MS_30, HISPEED_LOAD_90, HS_FREQ_1026,
|
|
||||||
THREAD_MIGRATION_SYNC_OFF};
|
|
||||||
|
|
||||||
perform_hint_action(video_decode_metadata.hint_id, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
}
|
|
||||||
} else if (video_decode_metadata.state == 0) {
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
} else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
|
|
||||||
undo_hint_action(video_decode_metadata.hint_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void process_video_encode_hint(void* metadata) {
|
|
||||||
char governor[80];
|
|
||||||
struct video_encode_metadata_t video_encode_metadata;
|
|
||||||
|
|
||||||
if (get_scaling_governor(governor, sizeof(governor)) == -1) {
|
|
||||||
ALOGE("Can't obtain scaling governor.");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize encode metadata struct fields. */
|
|
||||||
memset(&video_encode_metadata, 0, sizeof(struct video_encode_metadata_t));
|
|
||||||
video_encode_metadata.state = -1;
|
|
||||||
video_encode_metadata.hint_id = DEFAULT_VIDEO_ENCODE_HINT_ID;
|
|
||||||
|
|
||||||
if (metadata) {
|
|
||||||
if (parse_video_encode_metadata((char*)metadata, &video_encode_metadata) == -1) {
|
|
||||||
ALOGE("Error occurred while parsing metadata.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (video_encode_metadata.state == 1) {
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
int resource_values[] = {IO_BUSY_OFF, SAMPLING_DOWN_FACTOR_1, THREAD_MIGRATION_SYNC_OFF};
|
|
||||||
|
|
||||||
perform_hint_action(video_encode_metadata.hint_id, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
} else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
|
|
||||||
int resource_values[] = {TR_MS_30, HISPEED_LOAD_90, HS_FREQ_1026,
|
|
||||||
THREAD_MIGRATION_SYNC_OFF, INTERACTIVE_IO_BUSY_OFF};
|
|
||||||
|
|
||||||
perform_hint_action(video_encode_metadata.hint_id, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
}
|
|
||||||
} else if (video_encode_metadata.state == 0) {
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
undo_hint_action(video_encode_metadata.hint_id);
|
|
||||||
} else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
|
|
||||||
undo_hint_action(video_encode_metadata.hint_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,9 +83,6 @@ static void power_hint(struct power_module* module, power_hint_t hint, void* dat
|
||||||
switch (hint) {
|
switch (hint) {
|
||||||
case POWER_HINT_VSYNC:
|
case POWER_HINT_VSYNC:
|
||||||
break;
|
break;
|
||||||
case POWER_HINT_SUSTAINED_PERFORMANCE:
|
|
||||||
ALOGI("Sustained perf power hint not handled in power_hint_override");
|
|
||||||
break;
|
|
||||||
case POWER_HINT_VR_MODE:
|
case POWER_HINT_VR_MODE:
|
||||||
ALOGI("VR mode power hint not handled in power_hint_override");
|
ALOGI("VR mode power hint not handled in power_hint_override");
|
||||||
break;
|
break;
|
||||||
|
@ -217,11 +92,25 @@ static void power_hint(struct power_module* module, power_hint_t hint, void* dat
|
||||||
|
|
||||||
interaction(duration, sizeof(resources) / sizeof(resources[0]), resources);
|
interaction(duration, sizeof(resources) / sizeof(resources[0]), resources);
|
||||||
} break;
|
} break;
|
||||||
|
//fall through below, hints will fail if not defined in powerhint.xml
|
||||||
|
case POWER_HINT_SUSTAINED_PERFORMANCE:
|
||||||
case POWER_HINT_VIDEO_ENCODE:
|
case POWER_HINT_VIDEO_ENCODE:
|
||||||
process_video_encode_hint(data);
|
if (data) {
|
||||||
break;
|
if (handles[hint].ref_count == 0)
|
||||||
case POWER_HINT_VIDEO_DECODE:
|
handles[hint].handle = perf_hint_enable((AOSP_DELTA + hint), 0);
|
||||||
process_video_decode_hint(data);
|
|
||||||
|
if (handles[hint].handle > 0)
|
||||||
|
handles[hint].ref_count++;
|
||||||
|
} else {
|
||||||
|
if (handles[hint].handle > 0) {
|
||||||
|
if (--handles[hint].ref_count == 0) {
|
||||||
|
release_request(handles[hint].handle);
|
||||||
|
handles[hint].handle = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ALOGE("Lock for hint: %X was not acquired, cannot be released", hint);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -233,10 +122,6 @@ int __attribute__((weak)) set_interactive_override(struct power_module* module,
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_interactive(struct power_module* module, int on) {
|
void set_interactive(struct power_module* module, int on) {
|
||||||
char governor[80];
|
|
||||||
char tmp_str[NODE_MAX];
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (!on) {
|
if (!on) {
|
||||||
/* Send Display OFF hint to perf HAL */
|
/* Send Display OFF hint to perf HAL */
|
||||||
perf_hint_enable(VENDOR_HINT_DISPLAY_OFF, 0);
|
perf_hint_enable(VENDOR_HINT_DISPLAY_OFF, 0);
|
||||||
|
@ -250,197 +135,6 @@ void set_interactive(struct power_module* module, int on) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ALOGI("Got set_interactive hint");
|
ALOGI("Got set_interactive hint");
|
||||||
|
|
||||||
if (get_scaling_governor(governor, sizeof(governor)) == -1) {
|
|
||||||
ALOGE("Can't obtain scaling governor.");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!on) {
|
|
||||||
/* Display off. */
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
int resource_values[] = {DISPLAY_OFF, MS_500, THREAD_MIGRATION_SYNC_OFF};
|
|
||||||
|
|
||||||
if (!display_hint_sent) {
|
|
||||||
perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
display_hint_sent = 1;
|
|
||||||
}
|
|
||||||
} else if ((strncmp(governor, INTERACTIVE_GOVERNOR, strlen(INTERACTIVE_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(INTERACTIVE_GOVERNOR))) {
|
|
||||||
int resource_values[] = {TR_MS_50, THREAD_MIGRATION_SYNC_OFF};
|
|
||||||
|
|
||||||
if (!display_hint_sent) {
|
|
||||||
perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
|
|
||||||
sizeof(resource_values) / sizeof(resource_values[0]));
|
|
||||||
display_hint_sent = 1;
|
|
||||||
}
|
|
||||||
} else if ((strncmp(governor, MSMDCVS_GOVERNOR, strlen(MSMDCVS_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(MSMDCVS_GOVERNOR))) {
|
|
||||||
if (saved_interactive_mode == 1) {
|
|
||||||
/* Display turned off. */
|
|
||||||
if (sysfs_read(DCVS_CPU0_SLACK_MAX_NODE, tmp_str, NODE_MAX - 1)) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to read from %s", DCVS_CPU0_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
} else {
|
|
||||||
saved_dcvs_cpu0_slack_max = atoi(tmp_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sysfs_read(DCVS_CPU0_SLACK_MIN_NODE, tmp_str, NODE_MAX - 1)) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to read from %s", DCVS_CPU0_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
} else {
|
|
||||||
saved_dcvs_cpu0_slack_min = atoi(tmp_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sysfs_read(MPDECISION_SLACK_MAX_NODE, tmp_str, NODE_MAX - 1)) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to read from %s", MPDECISION_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
} else {
|
|
||||||
saved_mpdecision_slack_max = atoi(tmp_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sysfs_read(MPDECISION_SLACK_MIN_NODE, tmp_str, NODE_MAX - 1)) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to read from %s", MPDECISION_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
} else {
|
|
||||||
saved_mpdecision_slack_min = atoi(tmp_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write new values. */
|
|
||||||
if (saved_dcvs_cpu0_slack_max != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", 10 * saved_dcvs_cpu0_slack_max);
|
|
||||||
|
|
||||||
if (sysfs_write(DCVS_CPU0_SLACK_MAX_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", DCVS_CPU0_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_dcvs_cpu0_slack_min != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", 10 * saved_dcvs_cpu0_slack_min);
|
|
||||||
|
|
||||||
if (sysfs_write(DCVS_CPU0_SLACK_MIN_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", DCVS_CPU0_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_mpdecision_slack_max != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", 10 * saved_mpdecision_slack_max);
|
|
||||||
|
|
||||||
if (sysfs_write(MPDECISION_SLACK_MAX_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", MPDECISION_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_mpdecision_slack_min != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", 10 * saved_mpdecision_slack_min);
|
|
||||||
|
|
||||||
if (sysfs_write(MPDECISION_SLACK_MIN_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", MPDECISION_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
slack_node_rw_failed = rc;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Display on. */
|
|
||||||
if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
|
|
||||||
undo_hint_action(DISPLAY_STATE_HINT_ID);
|
|
||||||
display_hint_sent = 0;
|
|
||||||
} else 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;
|
|
||||||
} else if ((strncmp(governor, MSMDCVS_GOVERNOR, strlen(MSMDCVS_GOVERNOR)) == 0) &&
|
|
||||||
(strlen(governor) == strlen(MSMDCVS_GOVERNOR))) {
|
|
||||||
if (saved_interactive_mode == -1 || saved_interactive_mode == 0) {
|
|
||||||
/* Display turned on. Restore if possible. */
|
|
||||||
if (saved_dcvs_cpu0_slack_max != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", saved_dcvs_cpu0_slack_max);
|
|
||||||
|
|
||||||
if (sysfs_write(DCVS_CPU0_SLACK_MAX_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", DCVS_CPU0_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_dcvs_cpu0_slack_min != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", saved_dcvs_cpu0_slack_min);
|
|
||||||
|
|
||||||
if (sysfs_write(DCVS_CPU0_SLACK_MIN_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", DCVS_CPU0_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_mpdecision_slack_max != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", saved_mpdecision_slack_max);
|
|
||||||
|
|
||||||
if (sysfs_write(MPDECISION_SLACK_MAX_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", MPDECISION_SLACK_MAX_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saved_mpdecision_slack_min != -1) {
|
|
||||||
snprintf(tmp_str, NODE_MAX, "%d", saved_mpdecision_slack_min);
|
|
||||||
|
|
||||||
if (sysfs_write(MPDECISION_SLACK_MIN_NODE, tmp_str) != 0) {
|
|
||||||
if (!slack_node_rw_failed) {
|
|
||||||
ALOGE("Failed to write to %s", MPDECISION_SLACK_MIN_NODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
slack_node_rw_failed = rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
saved_interactive_mode = !!on;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_feature(struct power_module* module, feature_t feature, int state) {
|
void set_feature(struct power_module* module, feature_t feature, int state) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2013,2015-2017, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2013,2015-2018, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are
|
* modification, are permitted provided that the following conditions are
|
||||||
|
@ -231,7 +231,8 @@ int perf_hint_enable(int hint_id, int duration) {
|
||||||
if (qcopt_handle) {
|
if (qcopt_handle) {
|
||||||
if (perf_hint) {
|
if (perf_hint) {
|
||||||
lock_handle = perf_hint(hint_id, NULL, duration, -1);
|
lock_handle = perf_hint(hint_id, NULL, duration, -1);
|
||||||
if (lock_handle == -1) ALOGE("Failed to acquire lock.");
|
if (lock_handle == -1)
|
||||||
|
ALOGE("Failed to acquire lock for hint_id: %X.", hint_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lock_handle;
|
return lock_handle;
|
||||||
|
|
Loading…
Reference in a new issue