1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <pthread.h> 17 18 #include "hilog_wrapper.h" 19 #include "power/running_lock_hub.h" 20 #include "power/suspend_ops.h" 21 22 static const char* WAKEUP_HOLDER = "OHOSPowerMgr.WakeupHolder"; 23 24 static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; 25 static struct AutoSuspendOps* g_suspendOps = NULL; 26 static BOOL g_suspendEnabled = FALSE; 27 ScAcquireRunningLock(const char * name)28void ScAcquireRunningLock(const char *name) 29 { 30 RunningLockHubLock(name); 31 } 32 ScReleaseRunningLock(const char * name)33void ScReleaseRunningLock(const char *name) 34 { 35 RunningLockHubUnlock(name); 36 } 37 EnableSuspend()38void EnableSuspend() 39 { 40 if (!g_suspendOps) { 41 return; 42 } 43 44 pthread_mutex_lock(&g_mutex); 45 if (g_suspendEnabled == FALSE) { 46 ScReleaseRunningLock(WAKEUP_HOLDER); 47 g_suspendEnabled = TRUE; 48 } 49 pthread_mutex_unlock(&g_mutex); 50 g_suspendOps->Enable(); 51 } 52 DisableSuspend()53void DisableSuspend() 54 { 55 pthread_mutex_lock(&g_mutex); 56 if (g_suspendEnabled == TRUE) { 57 ScAcquireRunningLock(WAKEUP_HOLDER); 58 g_suspendEnabled = FALSE; 59 } 60 pthread_mutex_unlock(&g_mutex); 61 } 62 SuspendControllerInit()63void SuspendControllerInit() 64 { 65 g_suspendOps = AutoSuspendOpsInit(); 66 if (!g_suspendOps) { 67 POWER_HILOGE("Failed to init auto suspend ops"); 68 return; 69 } 70 if (RunningLockHubInit(g_suspendOps) == FALSE) { 71 POWER_HILOGE("Failed to init running lock hub"); 72 return; 73 } 74 ScAcquireRunningLock(WAKEUP_HOLDER); 75 } 76