blob: 1e56cc3add41c6b86700d303f02ce4a497e5fbde [file] [log] [blame]
David Ngee7c4c52018-03-22 23:49:12 -07001/*
2 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29#define LOG_NIDEBUG 0
30
31#include <errno.h>
32#include <string.h>
33#include <sys/types.h>
34#include <sys/stat.h>
35#include <fcntl.h>
36#include <dlfcn.h>
37#include <stdlib.h>
38
39#define LOG_TAG "QTI PowerHAL"
40#include <utils/Log.h>
41#include <hardware/hardware.h>
42#include <hardware/power.h>
43
44#include "utils.h"
45#include "metadata-defs.h"
46#include "hint-data.h"
47#include "performance.h"
48#include "power-common.h"
49
50static int display_hint_sent;
51static int display_hint2_sent;
52static int first_display_off_hint;
53extern int display_boost;
54
55int set_interactive_override(struct power_module *module, int on)
56{
57 char governor[80];
58
59 if (get_scaling_governor(governor, sizeof(governor)) == -1) {
60 ALOGE("Can't obtain scaling governor.");
61
62 return HINT_NONE;
63 }
64
65 if (!on) {
66 /* Display off. */
67 /*
68 * We need to be able to identify the first display off hint
69 * and release the current lock holder
70 */
71 if (display_boost) {
72 if (!first_display_off_hint) {
73 undo_initial_hint_action();
74 first_display_off_hint = 1;
75 }
76 /* used for all subsequent toggles to the display */
77 if (!display_hint2_sent) {
78 undo_hint_action(DISPLAY_STATE_HINT_ID_2);
79 display_hint2_sent = 1;
80 }
81 }
82
83 if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
84 (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
85 int resource_values[] = {MS_500, SYNC_FREQ_600, OPTIMAL_FREQ_600, THREAD_MIGRATION_SYNC_OFF};
86
87 if (!display_hint_sent) {
88 perform_hint_action(DISPLAY_STATE_HINT_ID,
89 resource_values, sizeof(resource_values)/sizeof(resource_values[0]));
90 display_hint_sent = 1;
91 }
92
93 return HINT_HANDLED;
94 }
95 } else {
96 /* Display on */
97 if (display_boost && display_hint2_sent) {
98 int resource_values2[] = {CPUS_ONLINE_MIN_2};
99 perform_hint_action(DISPLAY_STATE_HINT_ID_2,
100 resource_values2, sizeof(resource_values2)/sizeof(resource_values2[0]));
101 display_hint2_sent = 0;
102 }
103
104 if ((strncmp(governor, ONDEMAND_GOVERNOR, strlen(ONDEMAND_GOVERNOR)) == 0) &&
105 (strlen(governor) == strlen(ONDEMAND_GOVERNOR))) {
106 undo_hint_action(DISPLAY_STATE_HINT_ID);
107 display_hint_sent = 0;
108
109 return HINT_HANDLED;
110 }
111 }
112
113 return HINT_NONE;
114}