From a98cc9c202b9ff97df89e2258bf04bc3b8b57301 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Tue, 5 Apr 2016 13:43:40 -0700 Subject: [PATCH] init: turn off backlight when performing shutdown cleanup Try writing a "0" into: - /sys/class/leds/lcd-backlight/brightness - /sys/class/backlight/*/brightness to turn off the backlight during shutdown cleanup. Bug: 27506425 Change-Id: Ic8a44dc8909b303f24e14f71cfb43292df60efde --- init/builtins.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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));