91 lines
3.7 KiB
Diff
91 lines
3.7 KiB
Diff
From fffb6c1f4bf48d2bdc1a1b3c24b97d32bdaa4cca Mon Sep 17 00:00:00 2001
|
|
From: Pierre-Hugues Husson <phh@phh.me>
|
|
Date: Sun, 15 Dec 2019 22:14:12 +0100
|
|
Subject: [PATCH 39/58] 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 <android/hardware/power/1.1/IPower.h>
|
|
#include <android/system/suspend/1.0/ISystemSuspend.h>
|
|
#include <android/system/suspend/ISuspendControlService.h>
|
|
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
|
|
#include <nativehelper/JNIHelp.h>
|
|
#include <vendor/lineage/power/1.0/ILineagePower.h>
|
|
#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<IPowerV1_0> gPowerHalV1_0_ = nullptr;
|
|
static sp<IPowerV1_1> gPowerHalV1_1_ = nullptr;
|
|
static sp<ILineagePowerV1_0> gLineagePowerHalV1_0_ = nullptr;
|
|
+static sp<ISehMiscPower> 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<ISehMiscPower> getSehMiscPower() {
|
|
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
|
+ connectPowerHalLocked();
|
|
+ return gSehMiscPower;
|
|
+}
|
|
+
|
|
// Retrieve a copy of PowerHAL V1_0
|
|
sp<IPowerV1_0> getPowerHalV1_0() {
|
|
std::lock_guard<std::mutex> lock(gPowerHalMutex);
|
|
@@ -314,6 +324,14 @@ static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean
|
|
enable ? "true" : "false", enable ? "on" : "off");
|
|
}
|
|
}
|
|
+ sp<ISehMiscPower> sehMiscPower = getSehMiscPower();
|
|
+ if(sehMiscPower != nullptr) {
|
|
+ android::base::Timer t;
|
|
+ Return<void> 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.25.1
|
|
|