mirror of
https://github.com/team-infusion-developers/android_hardware_samsung.git
synced 2024-11-06 21:55:41 +00:00
power: Keep boost fd opened as well
Change-Id: I016b28c29786fc948a007d4ec3106be8a662eafd
This commit is contained in:
parent
a322ea2bdd
commit
fb5669e851
1 changed files with 41 additions and 30 deletions
|
@ -55,6 +55,7 @@
|
|||
struct samsung_power_module {
|
||||
struct power_module base;
|
||||
pthread_mutex_t lock;
|
||||
int boost_fd;
|
||||
int boostpulse_fd;
|
||||
char hispeed_freqs[CLUSTER_COUNT][PARAM_MAXLEN];
|
||||
char max_freqs[CLUSTER_COUNT][PARAM_MAXLEN];
|
||||
|
@ -172,41 +173,22 @@ static void cpu_interactive_write(const char *param, char s[CLUSTER_COUNT][PARAM
|
|||
}
|
||||
}
|
||||
|
||||
static void boost(int32_t duration_us)
|
||||
static void send_boost(int boost_fd, int32_t duration_us)
|
||||
{
|
||||
int fd;
|
||||
char path[PATH_MAX];
|
||||
int len;
|
||||
|
||||
if (duration_us <= 0)
|
||||
return;
|
||||
|
||||
// the boost node is only valid for the LITTLE cluster
|
||||
sprintf(path, "%s%s", CPU_INTERACTIVE_PATHS[0], BOOST_PATH);
|
||||
|
||||
fd = open(path, O_WRONLY);
|
||||
if (fd < 0) {
|
||||
ALOGE("Error opening %s", path);
|
||||
if (boost_fd < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
len = write(boost_fd, "1", 1);
|
||||
if (len < 0) {
|
||||
ALOGE("Error writing to %s%s: %s", CPU_INTERACTIVE_PATHS[0], BOOST_PATH, strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
write(fd, "1", 1);
|
||||
usleep(duration_us);
|
||||
write(fd, "0", 1);
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void boostpulse_open(struct samsung_power_module *samsung_pwr)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
// the boostpulse node is only valid for the LITTLE cluster
|
||||
sprintf(path, "%s%s", CPU_INTERACTIVE_PATHS[0], BOOSTPULSE_PATH);
|
||||
|
||||
samsung_pwr->boostpulse_fd = open(path, O_WRONLY);
|
||||
if (samsung_pwr->boostpulse_fd < 0) {
|
||||
ALOGE("Error opening %s: %s\n", path, strerror(errno));
|
||||
}
|
||||
len = write(boost_fd, "0", 1);
|
||||
}
|
||||
|
||||
static void send_boostpulse(int boostpulse_fd)
|
||||
|
@ -358,12 +340,40 @@ static void init_touch_input_power_path(struct samsung_power_module *samsung_pwr
|
|||
}
|
||||
}
|
||||
|
||||
static void boost_open(struct samsung_power_module *samsung_pwr)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
// the boost node is only valid for the LITTLE cluster
|
||||
sprintf(path, "%s%s", CPU_INTERACTIVE_PATHS[0], BOOST_PATH);
|
||||
|
||||
samsung_pwr->boost_fd = open(path, O_WRONLY);
|
||||
if (samsung_pwr->boost_fd < 0) {
|
||||
ALOGE("Error opening %s: %s\n", path, strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
static void boostpulse_open(struct samsung_power_module *samsung_pwr)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
// the boostpulse node is only valid for the LITTLE cluster
|
||||
sprintf(path, "%s%s", CPU_INTERACTIVE_PATHS[0], BOOSTPULSE_PATH);
|
||||
|
||||
samsung_pwr->boostpulse_fd = open(path, O_WRONLY);
|
||||
if (samsung_pwr->boostpulse_fd < 0) {
|
||||
ALOGE("Error opening %s: %s\n", path, strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
static void samsung_power_init(struct power_module *module)
|
||||
{
|
||||
struct samsung_power_module *samsung_pwr = (struct samsung_power_module *) module;
|
||||
|
||||
init_cpufreqs(samsung_pwr);
|
||||
|
||||
// keep interactive boost fds opened
|
||||
boost_open(samsung_pwr);
|
||||
boostpulse_open(samsung_pwr);
|
||||
|
||||
samsung_pwr->touchscreen_power_path = NULL;
|
||||
|
@ -494,7 +504,8 @@ static void samsung_power_hint(struct power_module *module,
|
|||
break;
|
||||
case POWER_HINT_CPU_BOOST:
|
||||
ALOGV("%s: POWER_HINT_CPU_BOOST", __func__);
|
||||
boost((*(int32_t *)data));
|
||||
int32_t duration_us = *((int32_t *)data);
|
||||
send_boost(samsung_pwr->boost_fd, duration_us);
|
||||
break;
|
||||
case POWER_HINT_SET_PROFILE:
|
||||
ALOGV("%s: POWER_HINT_SET_PROFILE", __func__);
|
||||
|
|
Loading…
Reference in a new issue