Commit | Line | Data |
---|---|---|
1e494cf4 JB |
1 | /* |
2 | * Copyright (C) 2012 The Android Open Source Project | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | ||
17 | #ifndef ANDROID_INCLUDE_HARDWARE_POWER_H | |
18 | #define ANDROID_INCLUDE_HARDWARE_POWER_H | |
19 | ||
20 | #include <stdint.h> | |
21 | #include <sys/cdefs.h> | |
22 | #include <sys/types.h> | |
23 | ||
24 | #include <hardware/hardware.h> | |
25 | ||
26 | __BEGIN_DECLS | |
27 | ||
28 | #define POWER_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) | |
29 | #define POWER_MODULE_API_VERSION_0_2 HARDWARE_MODULE_API_VERSION(0, 2) | |
30 | ||
31 | ||
32 | /** | |
33 | * The id of this module | |
34 | */ | |
35 | #define POWER_HARDWARE_MODULE_ID "power" | |
36 | ||
37 | /* | |
38 | * Power hint identifiers passed to (*powerHint) | |
39 | */ | |
40 | ||
41 | typedef enum { | |
42 | POWER_HINT_VSYNC = 0x00000001, | |
43 | POWER_HINT_INTERACTION = 0x00000002, | |
44 | POWER_HINT_VIDEO_ENCODE = 0x00000003, | |
45 | POWER_HINT_CPU_BOOST = 0x00000004, | |
46 | } power_hint_t; | |
47 | ||
48 | /** | |
49 | * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM | |
50 | * and the fields of this data structure must begin with hw_module_t | |
51 | * followed by module specific information. | |
52 | */ | |
53 | typedef struct power_module { | |
54 | struct hw_module_t common; | |
55 | ||
56 | /* | |
57 | * (*init)() performs power management setup actions at runtime | |
58 | * startup, such as to set default cpufreq parameters. This is | |
59 | * called only by the Power HAL instance loaded by | |
60 | * PowerManagerService. | |
61 | */ | |
62 | void (*init)(struct power_module *module); | |
63 | ||
64 | /* | |
65 | * (*setInteractive)() performs power management actions upon the | |
66 | * system entering interactive state (that is, the system is awake | |
67 | * and ready for interaction, often with UI devices such as | |
68 | * display and touchscreen enabled) or non-interactive state (the | |
69 | * system appears asleep, display usually turned off). The | |
70 | * non-interactive state is usually entered after a period of | |
71 | * inactivity, in order to conserve battery power during | |
72 | * such inactive periods. | |
73 | * | |
74 | * Typical actions are to turn on or off devices and adjust | |
75 | * cpufreq parameters. This function may also call the | |
76 | * appropriate interfaces to allow the kernel to suspend the | |
77 | * system to low-power sleep state when entering non-interactive | |
78 | * state, and to disallow low-power suspend when the system is in | |
79 | * interactive state. When low-power suspend state is allowed, the | |
80 | * kernel may suspend the system whenever no wakelocks are held. | |
81 | * | |
82 | * on is non-zero when the system is transitioning to an | |
83 | * interactive / awake state, and zero when transitioning to a | |
84 | * non-interactive / asleep state. | |
85 | * | |
86 | * This function is called to enter non-interactive state after | |
87 | * turning off the screen (if present), and called to enter | |
88 | * interactive state prior to turning on the screen. | |
89 | */ | |
90 | void (*setInteractive)(struct power_module *module, int on); | |
91 | ||
92 | /* | |
93 | * (*powerHint) is called to pass hints on power requirements, which | |
94 | * may result in adjustment of power/performance parameters of the | |
95 | * cpufreq governor and other controls. The possible hints are: | |
96 | * | |
97 | * POWER_HINT_VSYNC | |
98 | * | |
99 | * Foreground app has started or stopped requesting a VSYNC pulse | |
100 | * from SurfaceFlinger. If the app has started requesting VSYNC | |
101 | * then CPU and GPU load is expected soon, and it may be appropriate | |
102 | * to raise speeds of CPU, memory bus, etc. The data parameter is | |
103 | * non-zero to indicate VSYNC pulse is now requested, or zero for | |
104 | * VSYNC pulse no longer requested. | |
105 | * | |
106 | * POWER_HINT_INTERACTION | |
107 | * | |
108 | * User is interacting with the device, for example, touchscreen | |
109 | * events are incoming. CPU and GPU load may be expected soon, | |
110 | * and it may be appropriate to raise speeds of CPU, memory bus, | |
111 | * etc. The data parameter is unused. | |
112 | * | |
113 | * POWER_HINT_VIDEO_ENCODE | |
114 | * | |
115 | * The user just started or stopped recording video. When encode | |
116 | * begins, large writes to the SD card will be done and this may | |
117 | * cause CPU frequency to increase. The data parameter is a string | |
118 | * with semicolon-separated 'key:value' pairs. The most common key is | |
119 | * 'state', which takes 0 or 1 as its value. For instance, To | |
120 | * indicate that recording is beginning, the string "state:1" would | |
121 | * need to be used. More keys can be provided depending on the data | |
122 | * that is to be passed. | |
123 | * | |
124 | * POWER_HINT_CPU_BOOST | |
125 | * | |
126 | * An operation is happening where it would be ideal for the CPU to | |
127 | * be boosted for a specific duration. The data parameter is an | |
128 | * integer value of the boost duration in microseconds. | |
129 | * | |
130 | * A particular platform may choose to ignore any hint. | |
131 | * | |
132 | * availability: version 0.2 | |
133 | * | |
134 | */ | |
135 | void (*powerHint)(struct power_module *module, power_hint_t hint, | |
136 | void *data); | |
137 | } power_module_t; | |
138 | ||
139 | ||
140 | __END_DECLS | |
141 | ||
142 | #endif // ANDROID_INCLUDE_HARDWARE_POWER_H |