power: Prepare for power profile support

 * Add support for system performance profiles and CPU boost.
 * Uses mpctl to configure the CPUs in the appropriate modes.
 * Implement binderized Lineage power HAL.

Author: Steve Kondik <shade@chemlab.org>
Date:   Sat May 17 03:37:53 2014 -0700

    power: Add support for CPU boost hint

    Change-Id: I07c3e8daf8a5f3b568e27334f26d4ba8f4cf40c4

Author: Steve Kondik <shade@chemlab.org>
Date:   Sun May 18 23:55:23 2014 -0700

    power: Add power hint to set profile

     * A PowerHAL can implement support for this hint to receive
       power profile changes from the framework.

    Change-Id: Ie1e9e3b827c731cf5a817a0491677e3451fe8678

Author: Steve Kondik <shade@chemlab.org>
Date:   Mon May 19 17:26:34 2014 -0700

    power: Add support for SET_PROFILE hints

     * Add support for system performance profiles.
     * Uses mpctl to configure the CPUs in the appropriate modes.
     * PERFORMANCE = all cores at max
     * POWER_SAVE = max two cores at non-turbo voltage
     * If a custom profile is set, don't honor any other hints
     * Clean up the code and firm up the locking.

    Change-Id: Ie6acada805780c9ae6e6bc2002843aef638ca63b

Author: Steve Kondik <steve@cyngn.com>
Date:   Tue Nov 3 03:27:42 2015 -0800

    power: Update for PerformanceManager changes

     * Undo damage caused by the previous patch which broke
       all hint arguments. We were actually using these wrong to
       begin with anyway.
     * Add support for get_profile
     * Clean up code

    Change-Id: Ibc3f21bfb7aa46ec97b9b63d09737d4331a5a714

Author: dianlujitao <dianlujitao@lineageos.org>
Date:   Sat Feb 23 20:24:57 2019 +0800

    power: Pass NULL parameter in powerHint if data is zero

     * This restores the behavior in AOSP and CAF power HAL to avoid
       confusion.

    Change-Id: I72f5bb9286e2f57121e39eea82d2fe8854989393

Change-Id: I7ae614667e3182eaf0a90b81e8ed839689cfbf28
diff --git a/Power.cpp b/Power.cpp
index 19e3abe..ba8af81 100644
--- a/Power.cpp
+++ b/Power.cpp
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2017-2019 The LineageOS Project
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -29,6 +30,8 @@
 
 #define LOG_TAG "android.hardware.power@1.2-service-qti"
 
+// #define LOG_NDEBUG 0
+
 #include "Power.h"
 #include <android-base/file.h>
 #include <log/log.h>
@@ -101,6 +104,36 @@
     return powerHint(static_cast<PowerHint_1_0>(hint), data);
 }
 
+Return<int32_t> Power::getFeature(LineageFeature feature) {
+    if (feature == LineageFeature::SUPPORTED_PROFILES) {
+        return get_number_of_profiles();
+    }
+    return -1;
+}
+
+status_t Power::registerAsSystemService() {
+    status_t ret = 0;
+
+    ret = IPower::registerAsService();
+    if (ret != 0) {
+        ALOGE("Failed to register IPower (%d)", ret);
+        goto fail;
+    } else {
+        ALOGI("Successfully registered IPower");
+    }
+
+    ret = ILineagePower::registerAsService();
+    if (ret != 0) {
+        ALOGE("Failed to register ILineagePower (%d)", ret);
+        goto fail;
+    } else {
+        ALOGI("Successfully registered ILineagePower");
+    }
+
+fail:
+    return ret;
+}
+
 }  // namespace implementation
 }  // namespace V1_2
 }  // namespace power