1 /*
2 * Copyright (C) 2017 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 * Based on the HiKeyPowerHAL
17 */
18
19 #include <pthread.h>
20 #include <semaphore.h>
21 #include <cutils/properties.h>
22
23 #define LOG_TAG "VSoCPowerHAL"
24 #include <utils/Log.h>
25
26 #include <hardware/hardware.h>
27 #include <hardware/power.h>
28 #include "guest/libs/platform_support/api_level_fixes.h"
29
30 struct vsoc_power_module {
31 struct power_module base;
32 pthread_mutex_t lock;
33 };
34
35
36 #if VSOC_PLATFORM_SDK_AFTER(N_MR1)
37
vsoc_power_set_feature(struct power_module __unused * module,feature_t __unused hint,int __unused state)38 static void vsoc_power_set_feature(struct power_module __unused *module,
39 feature_t __unused hint,
40 int __unused state) {
41 return;
42 }
43
44 #elif VSOC_PLATFORM_SDK_AFTER(L)
45
vsoc_power_set_feature(struct power_module __unused * module,power_hint_t __unused hint,int __unused state)46 static void vsoc_power_set_feature(struct power_module __unused *module,
47 power_hint_t __unused hint,
48 int __unused state) {
49 return;
50 }
51
52 #endif
53
vsoc_power_hint(struct power_module __unused * module,power_hint_t __unused hint,void __unused * data)54 static void vsoc_power_hint(struct power_module __unused *module,
55 power_hint_t __unused hint,
56 void __unused *data) {
57 return;
58 }
59
vsoc_power_set_interactive(struct power_module __unused * module,int __unused on)60 static void vsoc_power_set_interactive(struct power_module __unused *module,
61 int __unused on) {
62 return;
63 }
64
vsoc_power_init(struct power_module __unused * module)65 static void vsoc_power_init(struct power_module __unused *module) {
66 return;
67 }
68
69
70 /*
71 * The power module wasn't opened at all in versions prior to 'O'. The module
72 * pointer was reinterpretd as a device pointer. 'O' retains this behavior when
73 * open is set to NULL. This code is using that mode.
74 * For reference,
75 * 'O': hardware/interfaces/power/1.0/default/Power.cpp
76 * prior: frameworks/base/services/core/jni/com_android_server_power_PowerManagerService.cpp
77 */
78 static struct hw_module_methods_t power_module_methods = {
79 VSOC_STATIC_INITIALIZER(open) NULL
80 };
81
82
83 struct vsoc_power_module HAL_MODULE_INFO_SYM = {
84 VSOC_STATIC_INITIALIZER(base) {
85 .common = {
86 VSOC_STATIC_INITIALIZER(tag) HARDWARE_MODULE_TAG,
87 VSOC_STATIC_INITIALIZER(module_api_version) POWER_MODULE_API_VERSION_0_2,
88 VSOC_STATIC_INITIALIZER(hal_api_version) HARDWARE_HAL_API_VERSION,
89 VSOC_STATIC_INITIALIZER(id) POWER_HARDWARE_MODULE_ID,
90 VSOC_STATIC_INITIALIZER(name) "VSoC Power HAL",
91 VSOC_STATIC_INITIALIZER(author) "The Android Open Source Project",
92 VSOC_STATIC_INITIALIZER(methods) &power_module_methods,
93 },
94 VSOC_STATIC_INITIALIZER(init) vsoc_power_init,
95 VSOC_STATIC_INITIALIZER(setInteractive) vsoc_power_set_interactive,
96 VSOC_STATIC_INITIALIZER(powerHint) vsoc_power_hint,
97 // Before L_MR1 we don't have setFeature
98 #if VSOC_PLATFORM_SDK_AFTER(L)
99 VSOC_STATIC_INITIALIZER(setFeature) vsoc_power_set_feature,
100 #endif
101 },
102
103 VSOC_STATIC_INITIALIZER(lock) PTHREAD_MUTEX_INITIALIZER,
104 };
105
106