| /* |
| Copyright (c) 2016, The CyanogenMod Project |
| Copyright (c) 2019 Fairphone B.V. |
| |
| 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 <fcntl.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <sys/stat.h> |
| #include <sys/types.h> |
| |
| #include <android-base/strings.h> |
| #define LOG_TAG "init_msm8974" |
| #include <cutils/log.h> |
| |
| #include "vendor_init.h" |
| #include "property_service.h" |
| #include "log.h" |
| #include "util.h" |
| |
| #include "init_gles_version.h" |
| #include "init_msm8974.h" |
| |
| using android::base::Trim; |
| |
| __attribute__ ((weak)) |
| void init_target_properties() |
| { |
| } |
| |
| 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 tmp = property_get("ro.boot.alarmboot"); |
| |
| if (read_file(boot_reason_file, &boot_reason) |
| && read_file(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 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 ((Trim(boot_reason) == "3" || tmp == "true") |
| && Trim(power_off_alarm) == "1") |
| property_set("ro.alarm_boot", "true"); |
| else |
| property_set("ro.alarm_boot", "false"); |
| } |
| } |
| |
| static void init_gles_properties() |
| { |
| const std::string cryptoState = property_get("ro.crypto.state"); |
| if (cryptoState == "encrypted" || cryptoState.empty()) { |
| /* The device is encrypted or rebooting for getting encrypted. In either |
| * case, we cannot read the misc file yet, but have to read it once the |
| * framework is fully started on the decrypted userdata. The related |
| * vold hook will take care of the call below. */ |
| SLOGI("Device is encrypted or currently encrypting. Postponing reading " |
| "of experimental_gles3 until after framework restart (vold hook)."); |
| return; |
| } |
| else if (cryptoState != "unencrypted") { |
| SLOGW("Unexpected value in ro.crypto.state: %s. Skipping reading of " |
| "experimental_gles3 during init vendor hook.", cryptoState.c_str()); |
| return; |
| } |
| |
| init_gles_version(); |
| } |
| |
| void vendor_load_properties() |
| { |
| init_target_properties(); |
| init_alarm_boot_properties(); |
| init_gles_properties(); |
| } |