diff options
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r-- | init/builtins.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index b3bd41801..95e4c8804 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -16,6 +16,7 @@ #include "builtins.h" +#include <dirent.h> #include <errno.h> #include <fcntl.h> #include <mntent.h> @@ -41,6 +42,7 @@ #include <selinux/label.h> #include <fs_mgr.h> +#include <android-base/file.h> #include <android-base/parseint.h> #include <android-base/stringprintf.h> #include <cutils/partition_utils.h> @@ -106,6 +108,32 @@ done: return ret; } +// Turn off backlight while we are performing power down cleanup activities. +static void turnOffBacklight() { + static const char off[] = "0"; + + android::base::WriteStringToFile(off, "/sys/class/leds/lcd-backlight/brightness"); + + static const char backlightDir[] = "/sys/class/backlight"; + std::unique_ptr<DIR, int(*)(DIR*)> dir(opendir(backlightDir), closedir); + if (!dir) { + return; + } + + struct dirent *dp; + while ((dp = readdir(dir.get())) != NULL) { + if (((dp->d_type != DT_DIR) && (dp->d_type != DT_LNK)) || + (dp->d_name[0] == '.')) { + continue; + } + + std::string fileName = android::base::StringPrintf("%s/%s/brightness", + backlightDir, + dp->d_name); + android::base::WriteStringToFile(off, fileName); + } +} + static void unmount_and_fsck(const struct mntent *entry) { if (strcmp(entry->mnt_type, "f2fs") && strcmp(entry->mnt_type, "ext4")) return; @@ -140,6 +168,8 @@ static void unmount_and_fsck(const struct mntent *entry) { svc->Start(); } + turnOffBacklight(); + int count = 0; while (count++ < UNMOUNT_CHECK_TIMES) { int fd = TEMP_FAILURE_RETRY(open(entry->mnt_fsname, O_RDONLY | O_EXCL)); |