cm: charger: Add support for double backlight displays

 * Some devices using AMS AS36xx LEDs controllers
    are using 2 backlight paths to light the display,
    mostly on Sony Huashan and Sony Blue board devices

 * Although most of the displays have interlaced backlights
    and the half dark path can be hard to see, other displays
    have a top / bottom path that make half the screen on / off

 * Control the backlight level of both path if the device does have
    BACKLIGHT_PATH set, and if present, SECONDARY_BACKLIGHT_PATH

 * Leave the HEALTD_BACKLIGHT_LEVEL config accessible
    to override the default 100 / 255 brightness used in healthd

Change-Id: If774c3e66acedddf7ba676581e7c88b7e83a66b6
Signed-off-by: Adrian DC <radian.dc@gmail.com>
diff --git a/charger/healthd_board_cm.cpp b/charger/healthd_board_cm.cpp
index c5aa3e6..8d38e5a 100644
--- a/charger/healthd_board_cm.cpp
+++ b/charger/healthd_board_cm.cpp
@@ -365,9 +365,49 @@
 {
 }
 
+#ifdef HEALTHD_BACKLIGHT_PATH
+#ifndef HEALTHD_BACKLIGHT_LEVEL
+#define HEALTHD_BACKLIGHT_LEVEL 100
+#endif
+
+void healthd_board_mode_charger_set_backlight(bool on)
+{
+    int fd;
+    char buffer[10];
+
+    memset(buffer, '\0', sizeof(buffer));
+    fd = open(HEALTHD_BACKLIGHT_PATH, O_RDWR);
+    if (fd < 0) {
+        LOGE("Could not open backlight node : %s\n", strerror(errno));
+        return;
+    }
+    LOGV("Enabling backlight\n");
+    snprintf(buffer, sizeof(buffer), "%d\n", on ? HEALTHD_BACKLIGHT_LEVEL : 0);
+    if (write(fd, buffer, strlen(buffer)) < 0) {
+        LOGE("Could not write to backlight : %s\n", strerror(errno));
+    }
+    close(fd);
+
+#ifdef HEALTHD_SECONDARY_BACKLIGHT_PATH
+    fd = open(HEALTHD_SECONDARY_BACKLIGHT_PATH, O_RDWR);
+    if (fd < 0) {
+        LOGE("Could not open second backlight node : %s\n", strerror(errno));
+        return;
+    }
+    LOGV("Enabling secondary backlight\n");
+    if (write(fd, buffer, strlen(buffer)) < 0) {
+        LOGE("Could not write to second backlight : %s\n", strerror(errno));
+        return;
+    }
+    close(fd);
+#endif
+}
+
+#else
 void healthd_board_mode_charger_set_backlight(bool)
 {
 }
+#endif
 
 void healthd_board_mode_charger_init(void)
 {