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