From 1b3779cba4eac5770c4b236cf3903e0c09ee6361 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Fri, 20 May 2016 23:58:16 +0300 Subject: [PATCH] msm8974-common: Add local libinit * Set alarm property * Load device property items using init_target_properties function Change-Id: I9b4b88c20078c9a310f425901368d765ddda2d51 --- BoardConfigCommon.mk | 4 ++ init/Android.mk | 14 ++++++ init/init_msm8974.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++ init/init_msm8974.h | 35 ++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 init/Android.mk create mode 100644 init/init_msm8974.cpp create mode 100644 init/init_msm8974.h diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index d8d1fce..679e6f1 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -47,5 +47,9 @@ MAX_EGL_CACHE_KEY_SIZE := 12*1024 # of the device. MAX_EGL_CACHE_SIZE := 2048*1024 +# Init +TARGET_INIT_VENDOR_LIB := libinit_msm8974 +TARGET_RECOVERY_DEVICE_MODULES := libinit_msm8974 + # Time services BOARD_USES_QC_TIME_SERVICES := true diff --git a/init/Android.mk b/init/Android.mk new file mode 100644 index 0000000..54cbf27 --- /dev/null +++ b/init/Android.mk @@ -0,0 +1,14 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_C_INCLUDES := system/core/init +LOCAL_CFLAGS := -Wall -DANDROID_TARGET=\"$(TARGET_BOARD_PLATFORM)\" +LOCAL_SRC_FILES := init_msm8974.cpp +ifneq ($(TARGET_LIBINIT_MSM8974_DEFINES_FILE),) + LOCAL_SRC_FILES += ../../../../$(TARGET_LIBINIT_MSM8974_DEFINES_FILE) +endif +LOCAL_MODULE := libinit_msm8974 + +include $(BUILD_STATIC_LIBRARY) diff --git a/init/init_msm8974.cpp b/init/init_msm8974.cpp new file mode 100644 index 0000000..8a5cee4 --- /dev/null +++ b/init/init_msm8974.cpp @@ -0,0 +1,103 @@ +/* + Copyright (c) 2016, The CyanogenMod Project + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include "vendor_init.h" +#include "property_service.h" +#include "log.h" +#include "util.h" + +#include "init_msm8974.h" + +__attribute__ ((weak)) +void init_target_properties() +{ +} + +static int read_file2(const char *fname, char *data, int max_size) +{ + int fd, rc; + + if (max_size < 1) + return 0; + + fd = open(fname, O_RDONLY); + if (fd < 0) { + ERROR("failed to open '%s'\n", fname); + return 0; + } + + rc = read(fd, data, max_size - 1); + if ((rc > 0) && (rc < max_size)) + data[rc] = '\0'; + else + data[0] = '\0'; + close(fd); + + return 1; +} + +static void init_alarm_boot_properties() +{ + char const *alarm_file = "/proc/sys/kernel/boot_reason"; + char buf[64]; + + if (read_file2(alarm_file, buf, sizeof(buf))) { + /* + * 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 insertd + * 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 (buf[0] == '3') + property_set("ro.alarm_boot", "true"); + else + property_set("ro.alarm_boot", "false"); + } +} + +void vendor_load_properties() +{ + init_target_properties(); + init_alarm_boot_properties(); +} diff --git a/init/init_msm8974.h b/init/init_msm8974.h new file mode 100644 index 0000000..587b76e --- /dev/null +++ b/init/init_msm8974.h @@ -0,0 +1,35 @@ +/* + Copyright (c) 2016, The CyanogenMod Project + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __INIT_MSM8974__H__ +#define __INIT_MSM8974__H__ + +void init_target_properties(); + +#endif /* __INIT_MSM8974__H__ */