From 23fac793a4950f84a88ee2d5ceb3045d703a46e6 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 15 Dec 2019 22:14:12 +0100 Subject: [PATCH] Add Samsung's Q power HAL to fix suspend Change-Id: I1edd4de9932ab089b7051f1329f60c15b9d99aaa --- services/core/jni/Android.bp | 1 + ...ndroid_server_power_PowerManagerService.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index 3ffa7561028..8f44be480c9 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -135,6 +135,7 @@ cc_defaults { "android.system.suspend@1.0", "suspend_control_aidl_interface-cpp", "vendor.lineage.power@1.0", + "vendor.samsung.hardware.miscpower@2.0", "vendor.samsung.hardware.light@2.0", "vendor.samsung.hardware.light@3.0", ], diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index 211ea50ddc9..bf0599fe18a 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include "jni.h" @@ -58,6 +59,7 @@ using IPowerV1_1 = android::hardware::power::V1_1::IPower; using IPowerV1_0 = android::hardware::power::V1_0::IPower; using ILineagePowerV1_0 = vendor::lineage::power::V1_0::ILineagePower; using vendor::lineage::power::V1_0::LineageFeature; +using ISehMiscPower = vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower; namespace android { @@ -74,6 +76,7 @@ static jobject gPowerManagerServiceObj; static sp gPowerHalV1_0_ = nullptr; static sp gPowerHalV1_1_ = nullptr; static sp gLineagePowerHalV1_0_ = nullptr; +static sp gSehMiscPower = nullptr; static bool gPowerHalExists = true; static bool gLineagePowerHalExists = true; static std::mutex gPowerHalMutex; @@ -98,6 +101,7 @@ static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodNa // The caller must be holding gPowerHalMutex. static void connectPowerHalLocked() { if (gPowerHalExists && gPowerHalV1_0_ == nullptr) { + gSehMiscPower = ISehMiscPower::getService(); gPowerHalV1_0_ = IPowerV1_0::getService("miscpower"); if(gPowerHalV1_0_ == nullptr) gPowerHalV1_0_ = IPowerV1_0::getService(); @@ -130,6 +134,12 @@ void connectLineagePowerHalLocked() { } } +sp getSehMiscPower() { + std::lock_guard lock(gPowerHalMutex); + connectPowerHalLocked(); + return gSehMiscPower; +} + // Retrieve a copy of PowerHAL V1_0 sp getPowerHalV1_0() { std::lock_guard lock(gPowerHalMutex); @@ -314,6 +324,14 @@ static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean enable ? "true" : "false", enable ? "on" : "off"); } } + sp sehMiscPower = getSehMiscPower(); + if(sehMiscPower != nullptr) { + android::base::Timer t; + Return ret = sehMiscPower->setInteractiveAsync(enable, 0); + if(!ret.isOk()) { + ALOGE("set interactive async() failed: seh misc setInteractiveAsync"); + } + } } static void nativeSetAutoSuspend(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) { -- 2.17.1