summaryrefslogtreecommitdiff
path: root/guest/hals/power/power.c
blob: 35d5a1155a2c96e0b5aeebf6db697f05b9896f37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Based on the HiKeyPowerHAL
 */

#include <pthread.h>
#include <semaphore.h>
#include <cutils/properties.h>

#define LOG_TAG "VSoCPowerHAL"
#include <utils/Log.h>

#include <hardware/hardware.h>
#include <hardware/power.h>

struct vsoc_power_module {
    struct power_module base;
    pthread_mutex_t lock;
};

static void vsoc_power_set_feature(struct power_module __unused *module,
                                  feature_t __unused hint,
                                  int __unused state) {
    return;
}

static void vsoc_power_hint(struct power_module __unused *module,
                           power_hint_t __unused hint,
                           void __unused *data) {
    return;
}

static void vsoc_power_set_interactive(struct power_module __unused *module,
                                      int __unused on) {
    return;
}

static  void vsoc_power_init(struct power_module __unused *module) {
    return;
}


/*
 * The power module wasn't opened at all in versions prior to 'O'. The module
 * pointer was reinterpretd as a device pointer. 'O' retains this behavior when
 * open is set to NULL. This code is using that mode.
 * For reference,
 * 'O': hardware/interfaces/power/1.0/default/Power.cpp
 * prior: frameworks/base/services/core/jni/com_android_server_power_PowerManagerService.cpp
 */
static struct hw_module_methods_t power_module_methods = {
    .open = NULL
};


struct vsoc_power_module HAL_MODULE_INFO_SYM = {
  .base = {
    .common = {
        .tag = HARDWARE_MODULE_TAG,
        .module_api_version = POWER_MODULE_API_VERSION_0_2,
        .hal_api_version = HARDWARE_HAL_API_VERSION,
        .id = POWER_HARDWARE_MODULE_ID,
        .name = "VSoC Power HAL",
        .author = "The Android Open Source Project",
        .methods = &power_module_methods,
    },
    .init = vsoc_power_init,
    .setInteractive = vsoc_power_set_interactive,
    .powerHint = vsoc_power_hint,
    // Before L_MR1 we don't have setFeature
    .setFeature = vsoc_power_set_feature,
  },

  .lock = PTHREAD_MUTEX_INITIALIZER,
};