power.c revision c82792c0a4135c1a5de4e4f0ca47318fa5dd7e14
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#include <errno.h>
17#include <string.h>
18#include <sys/types.h>
19#include <sys/stat.h>
20#include <fcntl.h>
21
22#define LOG_TAG "Legacy PowerHAL"
23#include <utils/Log.h>
24
25#include <hardware/hardware.h>
26#include <hardware/power.h>
27
28/*
29 * This module implements the legacy interface for requesting early
30 * suspend and late resume
31 */
32
33#define LEGACY_SYS_POWER_STATE "/sys/power/state"
34
35static int sPowerStatefd;
36static const char *pwr_states[] = { "mem", "on" };
37
38static void power_init(struct power_module *module)
39{
40    char buf[80];
41
42    sPowerStatefd = open(LEGACY_SYS_POWER_STATE, O_RDWR);
43
44    if (sPowerStatefd < 0) {
45        strerror_r(errno, buf, sizeof(buf));
46        ALOGE("Error opening %s: %s\n", LEGACY_SYS_POWER_STATE, buf);
47    }
48}
49
50static void power_set_interactive(struct power_module *module, int on)
51{
52    char buf[80];
53    int len;
54
55    len = write(sPowerStatefd, pwr_states[!!on], strlen(pwr_states[!!on]));
56    if (len < 0) {
57        strerror_r(errno, buf, sizeof(buf));
58        ALOGE("Error writing to %s: %s\n", LEGACY_SYS_POWER_STATE, buf);
59    }
60}
61
62
63static struct hw_module_methods_t power_module_methods = {
64    .open = NULL,
65};
66
67struct power_module HAL_MODULE_INFO_SYM = {
68    .common = {
69        .tag = HARDWARE_MODULE_TAG,
70        .version_major = 1,
71        .version_minor = 0,
72        .id = POWER_HARDWARE_MODULE_ID,
73        .name = "Default Power HAL",
74        .author = "The Android Open Source Project",
75        .methods = &power_module_methods,
76    },
77
78    .init = power_init,
79    .setInteractive = power_set_interactive,
80};
81