summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Marshall <tdm@cyngn.com>2016-07-05 13:33:47 -0700
committerTom Marshall <tdm@cyngn.com>2016-07-06 09:02:11 -0700
commit5d90c85e977df6dd34443b6050db5c994570f410 (patch)
tree7400e8995302ab07b8206bc9ad9d48c1dc3144ce
parentdd0866421e41fb2a38e22c8a94ee93e199599ec1 (diff)
downloadsystem_core-5d90c85e977df6dd34443b6050db5c994570f410.zip
system_core-5d90c85e977df6dd34443b6050db5c994570f410.tar.gz
system_core-5d90c85e977df6dd34443b6050db5c994570f410.tar.bz2
healthd: Write to blink file to fix LED
Many devices (such as bacon) require touching a blink file before changes to the LED are committed to hardware. Jira: CYAN-7689 Change-Id: Ia18a62134d196a636352bcd1af924c407c19d5b4
-rw-r--r--healthd/Android.mk1
-rw-r--r--healthd/healthd_mode_charger.cpp27
2 files changed, 28 insertions, 0 deletions
diff --git a/healthd/Android.mk b/healthd/Android.mk
index 7db4ad5..f509ace 100644
--- a/healthd/Android.mk
+++ b/healthd/Android.mk
@@ -34,6 +34,7 @@ LOCAL_CFLAGS := -D__STDC_LIMIT_MACROS -Werror
HEALTHD_CHARGER_DEFINES := RED_LED_PATH \
GREEN_LED_PATH \
BLUE_LED_PATH \
+ BLINK_PATH \
BACKLIGHT_PATH \
CHARGING_ENABLED_PATH
diff --git a/healthd/healthd_mode_charger.cpp b/healthd/healthd_mode_charger.cpp
index d6c31cf..6df9f12 100644
--- a/healthd/healthd_mode_charger.cpp
+++ b/healthd/healthd_mode_charger.cpp
@@ -82,6 +82,10 @@ char *locale;
#define BLUE_LED_PATH "/sys/class/leds/blue/brightness"
#endif
+#ifndef BLINK_PATH
+#define BLINK_PATH "/sys/class/leds/red/device/blink"
+#endif
+
#define LOGE(x...) do { KLOG_ERROR("charger", x); } while (0)
#define LOGW(x...) do { KLOG_WARNING("charger", x); } while (0)
#define LOGV(x...) do { KLOG_DEBUG("charger", x); } while (0)
@@ -214,6 +218,26 @@ static int char_height;
static bool minui_inited;
#ifndef NO_CHARGER_LED
+static int set_blink(int val)
+{
+ int fd;
+ char buffer[10];
+
+ fd = open(BLINK_PATH, O_RDWR);
+ if (fd < 0) {
+ LOGE("Could not open blink file\n");
+ return -1;
+ }
+ snprintf(buffer, sizeof(buffer), "%d\n", val);
+ if (write(fd, buffer, strlen(buffer)) < 0) {
+ LOGE("Could not write to blink file\n");
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ return 0;
+}
+
static int set_tricolor_led(int on, int color)
{
int fd, i;
@@ -258,6 +282,9 @@ static int set_battery_soc_leds(int soc)
LOGV("soc = %d, set led color 0x%x\n", soc, soc_leds[i].color);
}
+ /* This is required to commit the changes to hardware */
+ set_blink(0);
+
return 0;
}
#endif