summaryrefslogtreecommitdiffstats
path: root/power
diff options
context:
space:
mode:
Diffstat (limited to 'power')
-rw-r--r--power/power_tuna.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/power/power_tuna.c b/power/power_tuna.c
index eb38410..bff028d 100644
--- a/power/power_tuna.c
+++ b/power/power_tuna.c
@@ -34,6 +34,10 @@
static int sPowerStatefd;
static const char *pwr_states[] = { "mem", "on" };
+#define BOOST_PATH "/sys/devices/system/cpu/cpufreq/interactive/boost"
+static int boost_fd = -1;
+static int boost_warned;
+
static void sysfs_write(char *path, char *s)
{
char buf[80];
@@ -103,6 +107,37 @@ static void tuna_power_set_interactive(struct power_module *module, int on)
}
}
+static void tuna_power_hint(struct power_module *module, power_hint_t hint,
+ void *data)
+{
+ char buf[80];
+ int len;
+
+ switch (hint) {
+ case POWER_HINT_VSYNC:
+ if (boost_fd < 0)
+ boost_fd = open(BOOST_PATH, O_WRONLY);
+
+ if (boost_fd < 0) {
+ if (!boost_warned) {
+ strerror_r(errno, buf, sizeof(buf));
+ ALOGE("Error opening %s: %s\n", BOOST_PATH, buf);
+ boost_warned = 1;
+ }
+ break;
+ }
+
+ len = write(boost_fd, (int) data ? "1" : "0", 1);
+ if (len < 0) {
+ strerror_r(errno, buf, sizeof(buf));
+ ALOGE("Error writing to %s: %s\n", BOOST_PATH, buf);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
static struct hw_module_methods_t power_module_methods = {
.open = NULL,
@@ -121,4 +156,5 @@ struct power_module HAL_MODULE_INFO_SYM = {
.init = tuna_power_init,
.setInteractive = tuna_power_set_interactive,
+ .powerHint = tuna_power_hint,
};