From 51aa925ed3170c13810189cebcd90273eace3484 Mon Sep 17 00:00:00 2001 From: Max Weffers Date: Thu, 27 Sep 2018 11:54:55 +0200 Subject: [PATCH] clover: Add libinit module for clover --- device.mk | 4 ++ init/Android.mk | 29 ++++++++++++ init/init_clover.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100755 init/Android.mk create mode 100755 init/init_clover.cpp diff --git a/device.mk b/device.mk index e5697cc..ee18ffe 100644 --- a/device.mk +++ b/device.mk @@ -29,6 +29,10 @@ DEVICE_PATH := device/xiaomi/clover PRODUCT_COPY_FILES += \ frameworks/native/data/etc/tablet_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/tablet_core_hardware.xml +# Init +PRODUCT_PACKAGES += \ + libinit_clover + # IRSC PRODUCT_COPY_FILES += \ $(DEVICE_PATH)/configs/sec_config:$(TARGET_COPY_OUT_VENDOR)/etc/sec_config diff --git a/init/Android.mk b/init/Android.mk new file mode 100755 index 0000000..64014e0 --- /dev/null +++ b/init/Android.mk @@ -0,0 +1,29 @@ +# +# Copyright 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. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_C_INCLUDES := \ + system/core/base/include \ + system/core/init +LOCAL_CFLAGS := -Wall -DANDROID_TARGET=\"$(TARGET_BOARD_PLATFORM)\" +LOCAL_SRC_FILES := init_clover.cpp +LOCAL_MODULE := libinit_clover + +include $(BUILD_STATIC_LIBRARY) diff --git a/init/init_clover.cpp b/init/init_clover.cpp new file mode 100755 index 0000000..45cdbb8 --- /dev/null +++ b/init/init_clover.cpp @@ -0,0 +1,106 @@ +/* +# +# Copyright 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. +# + */ + +#include +#include +#include + +#include +#include +#include +#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ +#include + +#include "property_service.h" +#include "vendor_init.h" + +using android::base::GetProperty; +using android::base::ReadFileToString; +using android::base::Trim; +using android::init::property_set; + +void property_override(char const prop[], char const value[]) +{ + prop_info *pi; + + pi = (prop_info*) __system_property_find(prop); + if (pi) + __system_property_update(pi, value, strlen(value)); + else + __system_property_add(prop, strlen(prop), value, strlen(value)); +} + +void property_override_dual(char const system_prop[], + char const vendor_prop[], char const value[]) +{ + property_override(system_prop, value); + property_override(vendor_prop, value); +} + +static void init_alarm_boot_properties() +{ + char const *boot_reason_file = "/proc/sys/kernel/boot_reason"; + char const *power_off_alarm_file = "/persist/alarm/powerOffAlarmSet"; + std::string boot_reason; + std::string power_off_alarm; + std::string reboot_reason = GetProperty("ro.boot.alarmboot", ""); + + if (ReadFileToString(boot_reason_file, &boot_reason) + && ReadFileToString(power_off_alarm_file, &power_off_alarm)) { + /* + * Setup ro.alarm_boot value to true when it is RTC triggered boot up + * For existing PMIC chips, the following mapping applies + * for the value of boot_reason: + * + * 0 -> unknown + * 1 -> hard reset + * 2 -> sudden momentary power loss (SMPL) + * 3 -> real time clock (RTC) + * 4 -> DC charger inserted + * 5 -> USB charger inserted + * 6 -> PON1 pin toggled (for secondary PMICs) + * 7 -> CBLPWR_N pin toggled (for external power supply) + * 8 -> KPDPWR_N pin toggled (power key pressed) + */ + if ((Trim(boot_reason) == "3" || reboot_reason == "true") + && Trim(power_off_alarm) == "1") { + property_set("ro.alarm_boot", "true"); + } else { + property_set("ro.alarm_boot", "false"); + } + } +} + +void vendor_load_properties() +{ + std::string platform; + std::string hw_device; + + platform = GetProperty("ro.board.platform", ""); + if (platform != ANDROID_TARGET) + return; + + hw_device = GetProperty("ro.board.variant", ""); + if (hw_device.compare("d9")) { + property_override_dual("ro.product.model", "ro.vendor.product.model", "MI PAD 4"); + } else if (hw_device.compare("d9p")) { + property_override_dual("ro.product.model", "ro.vendor.product.model", "MI PAD 4 PLUS"); + } + + init_alarm_boot_properties(); +}