From 5d90c85e977df6dd34443b6050db5c994570f410 Mon Sep 17 00:00:00 2001 From: Tom Marshall Date: Tue, 5 Jul 2016 13:33:47 -0700 Subject: 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 --- healthd/Android.mk | 1 + healthd/healthd_mode_charger.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/healthd/Android.mk b/healthd/Android.mk index 7db4ad5f9..f509aceed 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 d6c31cf6a..6df9f125e 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 -- cgit v1.2.3