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 #include #include #include @@ -41,6 +42,7 @@ #include #include +#include #include #include #include @@ -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(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));