103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian/*
203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Copyright (C) 2012 The Android Open Source Project
303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * you may not use this file except in compliance with the License.
603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * You may obtain a copy of the License at
703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
1003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Unless required by applicable law or agreed to in writing, software
1103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * See the License for the specific language governing permissions and
1403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * limitations under the License.
1503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian */
1603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
1703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <stdint.h>
1803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <sys/types.h>
1903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <cutils/log.h>
2103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <utils/Errors.h>
2203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include "PowerHAL.h"
2403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopiannamespace android {
2603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian// ---------------------------------------------------------------------------
2703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2806e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias AgopianPowerHAL::PowerHAL() : mPowerModule(0), mVSyncHintEnabled(false) {
2903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    int err = hw_get_module(POWER_HARDWARE_MODULE_ID,
3003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian            (const hw_module_t **)&mPowerModule);
3103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    ALOGW_IF(err, "%s module not found", POWER_HARDWARE_MODULE_ID);
3203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}
3303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
3403e407270c7ad76632f982c886d0776bed9e9b4cMathias AgopianPowerHAL::~PowerHAL() {
3503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}
3603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
3703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopianstatus_t PowerHAL::initCheck() const {
3803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    return mPowerModule ? NO_ERROR : NO_INIT;
3903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}
4003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
4103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopianstatus_t PowerHAL::vsyncHint(bool enabled) {
4203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    if (!mPowerModule) {
4303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian        return NO_INIT;
4403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    }
4503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    if (mPowerModule->common.module_api_version >= POWER_MODULE_API_VERSION_0_2) {
4603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian        if (mPowerModule->powerHint) {
4706e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias Agopian            if (mVSyncHintEnabled != bool(enabled)) {
4806e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias Agopian                mPowerModule->powerHint(mPowerModule,
4906e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias Agopian                        POWER_HINT_VSYNC, (void*)enabled);
5006e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias Agopian                mVSyncHintEnabled = bool(enabled);
5106e51a0aaf76fe53cef20c3345cf1ebda2b3461eMathias Agopian            }
5203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian        }
5303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    }
5403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    return NO_ERROR;
5503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}
5603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
5703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian// ---------------------------------------------------------------------------
5803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}; // namespace android
5903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
60