From 40eda54cb1b688efd1bc89ab29a6edc021428eed Mon Sep 17 00:00:00 2001
From: Demon000 <demonsingur@gmail.com>
Date: Mon, 18 May 2020 00:07:53 +0200
Subject: [PATCH] sm6250-common: power: add no-op 1.3 interface implementation

Change-Id: I435e275ab4229b9d6f5fbb4eb1271cfcd7488409
---
 power/Android.bp                              | 35 +++++++++
 power/Power.cpp                               | 71 +++++++++++++++++++
 power/Power.h                                 | 60 ++++++++++++++++
 ...ardware.power@1.3-service.xiaomi_sm6250.rc |  4 ++
 power/service.cpp                             | 55 ++++++++++++++
 sepolicy/vendor/file_contexts                 |  4 +-
 6 files changed, 227 insertions(+), 2 deletions(-)
 create mode 100644 power/Android.bp
 create mode 100644 power/Power.cpp
 create mode 100644 power/Power.h
 create mode 100644 power/android.hardware.power@1.3-service.xiaomi_sm6250.rc
 create mode 100644 power/service.cpp

diff --git a/power/Android.bp b/power/Android.bp
new file mode 100644
index 0000000..6beabdc
--- /dev/null
+++ b/power/Android.bp
@@ -0,0 +1,35 @@
+//
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+cc_binary {
+    name: "android.hardware.power@1.3-service.xiaomi_sm6250",
+    init_rc: ["android.hardware.power@1.3-service.xiaomi_sm6250.rc"],
+    relative_install_path: "hw",
+    proprietary: true,
+    srcs: [
+        "Power.cpp",
+        "service.cpp",
+    ],
+    shared_libs: [
+        "liblog",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hardware.power@1.3",
+        "android.hardware.power@1.2",
+        "android.hardware.power@1.1",
+        "android.hardware.power@1.0",
+    ],
+}
diff --git a/power/Power.cpp b/power/Power.cpp
new file mode 100644
index 0000000..134228d
--- /dev/null
+++ b/power/Power.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2020 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.power@1.3-service.xiaomi_sm6250"
+
+#include "Power.h"
+
+namespace android {
+namespace hardware {
+namespace power {
+namespace V1_3 {
+namespace implementation {
+
+// Methods from V1_0::IPower follow.
+Return<void> Power::setInteractive(bool) {
+    return Void();
+}
+
+Return<void> Power::powerHint(PowerHint_1_0, int32_t) {
+    return Void();
+}
+
+Return<void> Power::setFeature(Feature, bool) {
+    return Void();
+}
+
+Return<void> Power::getPlatformLowPowerStats(getPlatformLowPowerStats_cb _hidl_cb) {
+    ALOGI("getPlatformLowPowerStats not supported, do nothing");
+    _hidl_cb({}, Status::SUCCESS);
+    return Void();
+}
+
+// Methods from V1_1::IPower follow.
+Return<void> Power::getSubsystemLowPowerStats(getSubsystemLowPowerStats_cb _hidl_cb) {
+    ALOGI("getSubsystemLowPowerStats not supported, do nothing");
+    _hidl_cb({}, Status::SUCCESS);
+    return Void();
+}
+
+Return<void> Power::powerHintAsync(PowerHint_1_0, int32_t) {
+    return Void();
+}
+
+// Methods from V1_2::IPower follow.
+Return<void> Power::powerHintAsync_1_2(PowerHint_1_2, int32_t) {
+    return Void();
+}
+
+// Methods from V1_3::IPower follow.
+Return<void> Power::powerHintAsync_1_3(PowerHint_1_3, int32_t) {
+    return Void();
+}
+
+}  // namespace implementation
+}  // namespace V1_3
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
diff --git a/power/Power.h b/power/Power.h
new file mode 100644
index 0000000..1b770e6
--- /dev/null
+++ b/power/Power.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2020 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <android/hardware/power/1.3/IPower.h>
+#include <hidl/Status.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace hardware {
+namespace power {
+namespace V1_3 {
+namespace implementation {
+
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+
+using ::android::hardware::power::V1_0::Feature;
+using ::android::hardware::power::V1_0::Status;
+using PowerHint_1_0 = ::android::hardware::power::V1_0::PowerHint;
+using PowerHint_1_2 = ::android::hardware::power::V1_2::PowerHint;
+using PowerHint_1_3 = ::android::hardware::power::V1_3::PowerHint;
+
+struct Power : public IPower {
+    // Methods from V1_0::IPower follow.
+    Return<void> setInteractive(bool interactive) override;
+    Return<void> powerHint(PowerHint_1_0 hint, int32_t data) override;
+    Return<void> setFeature(V1_0::Feature feature, bool activate) override;
+    Return<void> getPlatformLowPowerStats(getPlatformLowPowerStats_cb _hidl_cb) override;
+
+    // Methods from V1_1::IPower follow.
+    Return<void> getSubsystemLowPowerStats(getSubsystemLowPowerStats_cb _hidl_cb) override;
+    Return<void> powerHintAsync(PowerHint_1_0 hint, int32_t data) override;
+
+    // Methods from V1_2::IPower follow.
+    Return<void> powerHintAsync_1_2(PowerHint_1_2 hint, int32_t data) override;
+
+    // Methods from V1_3::IPower follow.
+    Return<void> powerHintAsync_1_3(PowerHint_1_3 hint, int32_t data) override;
+};
+
+}  // namespace implementation
+}  // namespace V1_3
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
diff --git a/power/android.hardware.power@1.3-service.xiaomi_sm6250.rc b/power/android.hardware.power@1.3-service.xiaomi_sm6250.rc
new file mode 100644
index 0000000..0e67dde
--- /dev/null
+++ b/power/android.hardware.power@1.3-service.xiaomi_sm6250.rc
@@ -0,0 +1,4 @@
+service vendor.power-hal-1-0 /vendor/bin/hw/android.hardware.power@1.3-service.xiaomi_sm6250
+    class hal
+    user system
+    group system
diff --git a/power/service.cpp b/power/service.cpp
new file mode 100644
index 0000000..d5d1eb0
--- /dev/null
+++ b/power/service.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2020 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.power@1.3-service.xiaomi_sm6250"
+
+#include <hidl/HidlTransportSupport.h>
+
+#include "Power.h"
+
+using android::sp;
+using android::status_t;
+using android::OK;
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+
+using ::android::hardware::power::V1_3::IPower;
+using ::android::hardware::power::V1_3::implementation::Power;
+
+int main() {
+    ALOGI("Power HAL 1.3 service is starting");
+
+    sp<IPower> service = new Power();
+    if (service == nullptr) {
+        ALOGE("Failed to create an instance of Power HAL, exiting");
+        return 1;
+    }
+    configureRpcThreadpool(1, true /* callerWillJoin */);
+
+    status_t status = service->registerAsService();
+    if (status != OK) {
+        ALOGE("Failed to register service for Power HAL, exiting");
+        return 1;
+    }
+
+    ALOGI("Power HAL service is ready");
+    joinRpcThreadpool();
+
+    // In normal operation, we don't expect the thread pool to exit
+    ALOGE("Power HAL service is shutting down");
+    return 1;
+}
diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts
index 937e08e..accc530 100644
--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts
@@ -1,2 +1,2 @@
-# HALs
-/vendor/bin/hw/android\.hardware\.light@2\.0-service\.xiaomi_sm6250                                     u:object_r:hal_light_default_exec:s0
+# Power HAL
+/vendor/bin/hw/android\.hardware\.power@1\.3-service\.xiaomi_sm6250                                     u:object_r:hal_power_default_exec:s0
-- 
GitLab